:root
для чего нужен псевдокласс :root
В CSS псевдокласс :root нужен для выбора родительского элемента высшего уровня согласно действующей спецификации. Для HTML-документа :root соответствует селектору html.
В коде представленном ниже стили для :root и html имеют одинаковый смысл:
:root {
background-color: gray;
}
html {
background-color: gray;
}
Выше мы уже упомянули, что псевдокласс :root по своей значимости эквивалентен селектору html. Но, на самом деле, в CSS :root более значим, чем html, так как он является псевдоклассом (подобно :first-child или :hover). Селекторы псевдоклассов имеют больший вес и более высокую специфичность, чем селекторы тегов.
Например, в коде:
:root {
background-color: blue;
color: white;
}
html {
background-color: red;
color: white;
}
Несмотря на то, что селектор html следует в документе последним, стили для :root одерживают верх, благодаря более высокой специфичности.
Иные спецификации
В спецификации HTML :root относится к родителю самого высокого уровня, которым является html.
Так как CSS может использоваться для SVG и XML, в таких документах так же можно применять псевдокласс :root, но он будет относиться уже к другим селекторам.
Например, в SVG родителем высшего порядка является тег svg:
:root {
fill: gold;
}
svg {
fill: gold;
}
Как и в HTML, в примере, приведенном выше, стили для :root и svg будут выполнять одни и те же действия, :root, при этом, будет обладать более высокой специфичностью.
Практическое использование
Так для чего же нужен :root в повседневной работе. Как мы заметили ранее, этот псевдокласс является эквивалентом селектора html. А это означает, что с помощью стилей для селектора :root можно делать все, что мы делаем в отношении селектора html:
:root {
margin: 0;
padding: 0;
color: #0000FF;
font-family: "Helvetica", "Arial", sans-serif;
line-height: 1.5;
}
При желании, Вы можете применить пользовательские свойства и создать глобальные переменные для CSS-кода своего проекта:
:root {
margin: 0;
padding: 0;
--primary-color: #0000FF;
--body-fonts: "Helvetica", "Arial", sans-serif;
--line-height: 1.5;
}
p {
color: var(--primary-color);
font-family: var(--body-fonts);
line-height: var(--line-height);
}
Возможность стилизовать SVG-графику - еще один плюс использования :root вместо html:
:root {
margin: 0;
padding: 0;
--primary-color: #0000FF;
--body-fonts: "Helvetica", "Arial", sans-serif;
--line-height: 1.5;
}
svg {
font-family: var(--body-fonts);
}
svg circle {
fill: var(--primary-color);
}
Дополнительную информациию о псевдоклассе :root можно получить на сайте MDN.
Спасибо за внимание.
