Html 根真的没用吗?

Html 根真的没用吗?,html,css,css-selectors,pseudo-class,Html,Css,Css Selectors,Pseudo Class,我知道:root可以用于选择html文件的html标记,并选择svg标记svg文件(关于XML文件的样式设计,这是一件非常奇怪的事情,对我来说并不适用),但我不认为选择:root而不是html或svg选择器更有意义。使用:root,对HTML和SVG应用相同的样式对我来说真的很奇怪。我相信这是不现实的 唯一有效的应用程序是:rootI,它可以用来覆盖html样式(因为伪类选择器比类型选择器具有更高的优先级),但我会避免经常覆盖html,并在以后放置特定的CSS文件链接以避免这种需要 所以问题是:

我知道
:root
可以用于选择html文件的
html
标记,并选择
svg
标记
svg
文件(关于XML文件的样式设计,这是一件非常奇怪的事情,对我来说并不适用),但我不认为选择
:root
而不是
html
svg
选择器更有意义。使用
:root
,对HTML和SVG应用相同的样式对我来说真的很奇怪。我相信这是不现实的

唯一有效的应用程序是:root
I,它可以用来覆盖
html
样式(因为伪类选择器比类型选择器具有更高的优先级),但我会避免经常覆盖
html
,并在以后放置特定的CSS文件链接以避免这种需要


所以问题是:
:root
是否有任何现实世界中的应用程序,它不仅仅是
html
(或
svg
用于svg文件)的一个奇怪的替代品?

对于绝大多数使用html的作者来说,
之间只有两个实际的区别:root
html

  • :root
    ,作为一个伪类,更为具体。如果您需要的类型选择器的特异性较小,则完全可以使用
    html
    而不是
    :root
  • :root
    可用于对Internet Explorer 8及更早版本隐藏规则(该用例在2017年可能并不流行,但在五年前相当普遍)
  • 除此之外,
    :root
    伪类实际上主要用于匹配任意文档中的根元素的用例,而不必知道元素的类型,这意味着基于XML的语言,甚至其他非基于XML的文档类型。请记住,从第3级开始,选择器模块设计用于各种文档语言的各种用途,而不仅仅是使用CSS设置HTML元素的样式(这就是为什么它现在被简单地称为“选择器”,而不是“CSS选择器”,尽管它是CSS模块)


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

    关于案例2,我将使用条件注释来应用IE8-的特定规则。使用IE8样式作为默认设置并在其他浏览器中覆盖它似乎是非常错误的方法。@Vadim Ovchinnikov:是的,我也这么做,很少使用选择器黑客。尽管如此,许多其他作者使用它们,这是一个常见的黑客攻击的例子。