Вы в значительной степени ответили на свой вопрос с последним битом о :root
, соответствующем <html>
и <svg>
- или любому другому элементу root в документах, отличных от HTML.
Помните, что CSS также совместим не только с HTML и SVG, но и с XML, а с XML элемент root может иметь то же имя элемента, что и дочерний элемент - так что это способ работы с документами такого типа, потому что CSS не предлагает другого способа выбора только элемента root для стиля, поэтому он находится в том же семействе, что и :first-child
, :first-of-type
, :last-of-type
, et c.
Я добавлю, что существует также риск того, что искаженный HTML документ может иметь незаконный <html>
элемент, расположенный в другом месте в DOM. Если вы используете просто html
в качестве селектора, тогда эти дополнительные элементы <html>
также будут стилизованы, что нарушит макет вашего сайта, если у вас есть общее правило html { min-height: 100%; height: 100%; }
. Изменение на html:root { ... }
исправляет это.