当浏览器不支持 CSS 伪类时会发生什么?

Fli*_*imm 4 css cross-browser css-selectors pseudo-class

如果浏览器不支持 CSS 伪类(例如 ),会发生什么情况:dir

例如:

html:dir(rtl) {
    color: red;
}
Run Code Online (Sandbox Code Playgroud)

如果浏览器不理解:dir伪类,他们会忽略这条规则吗?我对一般情况比对这个特定的伪类更感兴趣。我的直觉告诉我是的,但我还没有找到证实我直觉的文档。


这个问题与这个问题不同:无效的 CSS 选择器导致规则被删除:原理是什么?。它的范围更窄,我问的是浏览器在看到它无法识别的伪类时会做什么,而不是一般情况下它对无效的 CSS 选择器会做什么。据我所知,例如,无法识别的伪类仍可能被视为有效的选择器。

Bol*_*ock 5

目前,浏览器不区分无法识别不支持的选择器以及无效的选择器。如果浏览器识别出一个选择器,通常它会尽其所能地实现它(任何不符合规范的行为都可以被归类为错误跟踪器上的错误),即使它没有识别出t 在同一级别的选择器中实现所有其他功能(例如当前的情况:dir(),以及历史上具有 3 级属性选择器的 Internet Explorer 7 和 8,以及具有通用选择器的 Internet Explorer 6)。如果它无法识别选择器,它将严格遵循CSS2.1 \xc2\xa74.1.7并删除整个规则集,不询问任何问题。请注意,它说

\n\n
\n

当用户代理无法解析选择器(即,它不是有效的 CSS 2.1)时,它也必须忽略选择器和后面的声明块(如果有)。

\n
\n\n

这意味着如果用户代理无法解析选择器,那么它必定是无效的CSS2.1(或者在其他级别的选择器中无效);反之,如果它可以解析选择器,那么它一定是有效的。但这假设用户代理完全符合标准;我们都知道,实际上,不同的实现对每个标准的一致性程度不同,某些实现甚至有自己的特定于供应商的选择器,这些选择器不属于任何标准。因此,我将其视为“当用户代理无法解析选择器时”而不加括号,并且我想浏览器供应商也会这样做。

\n\n

事实上,选择器本身并不区分具有不对应于有效伪类的标识或函数的伪类标记,以及一系列甚至无法解析为伪类的字符 \xe2\ x80\x94 它们都同样无效 \xe2\x80\x94 请参阅css3-selectors 的第 12 节selectors-4 的第 3.9 节。本质上,这意味着当前的浏览器行为完全符合标准,而不仅仅是浏览器供应商商定的任意决定。

\n\n

我还没有听说过任何浏览器将伪类识别为有效的错误处理目的,并继续忽略该伪类或整个复杂选择器(使选择器列表中的其他复杂选择器不受影响) )。WebKit 确实曾经有一个非常坏的习惯,即接受带有无法识别的伪元素的 CSS 规则允许诸如此类的事情::selection, ::-moz-selection,但事实证明这毫无用处,因为其他所有布局引擎都更严格地遵循规范。不过,我相信 WebKit 不再这样做了,但是您知道 WebKit 是如何处理这些事情的。但据我所知,它从未用伪做到过这一点。

\n\n

在标准方面,selectors-4 似乎将通过引入静态和动态配置文件来改变这一点。我关于这个主题的电子邮件在 CSSWG 电话会议中得到了解决;您可以在此处找到会议记录(搜索“不在快速配置文件中的选择器行为”)。然而,已解决的问题是,不在动态(以前是快速)配置文件中的选择器应被视为无效,并导致整个 CSS 规则像往常一样被删除。参见第 2.1 节

\n\n
\n

符合选择器级别 4 的 CSS 实现必须使用动态配置文件进行 CSS 选择。使用动态配置文件的实现必须将未包含在配置文件中的选择器视为未知和无效。

\n
\n