:root 真的没用吗?

Is :root really useless?

我知道 :root 可以用于 select html 标记 HTML 文件和 select svg 标记 svg 文件(关于样式 XML 文件,这真的很奇怪,对我不适用),但我认为 :root 优于 html 或 [=12] 是没有意义的=] select 或。对 HTML 和 SVG 应用相同的样式对使用 :root 的我来说真的很奇怪。我确信这不是现实情况。

:root的唯一有效应用我found它可以用来覆盖html样式(因为伪类selector比类型selector), 但我会避免经常覆盖 html 并稍后放置特定的 CSS 文件链接以避免这种需要。

所以问题是::root 是否有任何现实世界的应用,它不会只是 html(或 svg 对于 SVG 文件)的奇怪替代?

对于绝大多数使用 HTML 的作者来说,:roothtml 之间只有两个实际差异:

  1. :root,作为伪 class,更具体。如果您需要类型选择器的特异性较低,则完全可以使用 html 而不是 :root.
  2. :root 可用于对 Internet Explorer 8 及更早版本隐藏规则(这种用例在 2017 年可能并不普遍,但在五年前相当普遍)。

除此之外,:root伪class确实主要是为匹配任意文档中的根元素而无需知道元素类型的用例而设计的,这意味着基于 XML 的语言,甚至其他非 XML 类型的文档。请记住,从级别 3 开始,选择器模块设计用于各种文档语言的多种用途,而不仅仅是使用 CSS 样式化 HTML 元素(这就是为什么它现在被简称为 "Selectors" 而不是 "CSS Selectors",尽管它是一个 CSS 模块)。

此外,对于根元素没有自己类型的宿主语言(例如,在 element 可能既是根元素又可能是嵌套的语言中),:root 是必需的用于区分根元素和嵌套元素(尽管存在替代方案,例如 :not(:nth-child(n)) 在选择器 3 中具有相同的特异性,或 :not(* > *) 在选择器 4 中具有 特异性)。