css - 使用 :root CSS 选择器而不是 html CSS 选择器有什么好处?
问题描述
在 HTML 文档:root
中,CSS3 中引入的伪类选择器等同于html
选择器,唯一的区别是:root
具有更高的特异性。如果它们几乎相同,那么使用的实际好处是:root
什么?
我读过:root
选择器对于声明全局 CSS 变量很有用,即在整个 HTML 代码中可访问的变量。但是我可以使用选择器设置一个变量html
,它也可以在整个 HTML 代码中使用。我在https://alligator.io/css/root-pseudo-class/上发现的唯一好处是设置的 CSS 变量:root
也可用于设置 SVG 图形的样式。这是唯一的好处吗?
解决方案
:root
最后一点关于匹配<html>
和<svg>
- 或非 HTML 文档中的任何其他根元素,您几乎回答了您自己的问题。
请记住,CSS 不仅与 HTML 和 SVG 兼容,而且还与 XML 兼容,并且对于 XML,根元素可能与子元素共享相同的元素名称 - 所以这是一种方式处理这些类型的文档,因为 CSS 没有提供仅选择根:first-child
元素进行样式设置的其他方法,因此它与, :first-of-type
,:last-of-type
等属于同一家族。
我还要补充一点,格式错误的 HTML 文档可能<html>
在 DOM 的其他地方有非法元素。如果您仅html
将其用作选择器,那么这些附加<html>
元素也将被设置样式,如果您有常规html { min-height: 100%; height: 100%; }
规则,这将破坏您网站的布局。改变它来html:root { ... }
解决这个问题。
推荐阅读
- javascript - 如何降低旋转木马的高度
- python - Python 插件 - WordBlitz - 无法使用捷克语
- java - java中数组中对象的验证
- cmake - Yocto / OE:使用 CMake 的配方安装共享库 .so
- ruby-on-rails - Ruby on Rails 临时实例变量
- amazon-web-services - 使用 AWS Sagemaker Boto 创建多模型终端节点
- python - 使用特定条件查找数据框的特定部分
- javascript - Chrome 性能分析中系统自身持续时间过长的问题
- c - 我正在研究清单,但并非一切都突然变得清晰
- python - Pandas 转换到新列的有效方法