根标签<html>与伪类:root的区别

今天在阅读《深入解析 CSS》一书时看到这么一段话:

书中部分内容截图◎ 书中部分内容截图

在文档中,根节点是所有其他元素的祖先节点。根节点有一个伪类选择器(:root),可以用来选中它自己。这等价于类型选择器 html,但是 html 的优先级相当于一个类名,而不是一个标签。

第一句话很好理解,但是第二句话让我愣了一下。我第一时间的理解是 :root 是等价于 <html> 的伪类,而且 <html> 的优先级相当于类型选择器,而不是标签选择器。

虽然我是第一次接触 :root,对它不太了解。但是我对 <html> 还是很熟悉的,它的优先级绝对是普通标签选择器的优先级啊,感觉这句话的的表达方式多少有点问题。

于是我上网查了查,最终明确了 <html> 与 :root 的区别,具体如下:

  1. 定义:<html> 就是是标签选择器,:root 就是伪类选择器,优先级也是 :root 高于 <html>。

  2. 适用范围:<html> 只适用于 HTML 格式文档,:root 适用于所有 XML 格式文档。但是 <html> 没有兼容性问题,:root 仅兼容 IE9 以上。

总的来说,<html> 与 :root 很像,但是 :root 应该是优于根标签的,作者后续内容的例子也采用了 :root。

最后我也在该书电子版的社区看到有人对该问题进行了勘误,问题圆满解决。总之,通过这个误会加深了我对 :root 和 <html> 的理解,也算是有所裨益了。