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

4

如果浏览器不支持CSS伪类,比如:dir会发生什么?

例如:

html:dir(rtl) {
    color: red;
}

如果浏览器不理解:dir伪类,它会忽略这条规则吗?我更关心一般情况而不是特定的伪类。我的直觉告诉我是的,但我还没有找到确认我的直觉的文档。
这个问题与无效的CSS选择器导致规则被删除:有何理由?不同。 它更狭窄,我问的是当浏览器看到它不认识的伪类时会发生什么,而不是它对于无效的CSS选择器的一般处理方式。 我所知道的是,一个未被认可的伪类可能仍然被视为有效的选择器。

由于CSS解析和支持的差异,每个浏览器都会有所不同。话虽如此,这似乎是一件容易测试的事情。Chrome和Firefox都支持direction属性,但只有Firefox(49+)支持:dir伪类。创建两个div元素并为每个元素分配不同的方向,然后创建一个带有:dir(rtl)伪类的类,并将其分配给两个元素。在Firefox和Chrome中打开并观察结果。(截至本文撰写时,Firefox 48和Chrome 52是当前版本。) - TheJim01
1个回答

5
浏览器目前没有区分无法识别或不支持的选择器和无效的选择器。如果浏览器识别了一个选择器,通常它会尽其所能地实现它(任何不符合规范的行为都可以归类为其错误跟踪器上的错误),即使它没有实现同一级别的所有其他特性(例如,目前的:dir(),以及历史上的Internet Explorer 7和8与级别3属性选择器,以及Internet Explorer 6与通用选择器)。如果它不能识别选择器,则按照CSS2.1 §4.1.7的要求严格执行,并放弃整个规则集,不问任何问题。请注意,它说:
这意味着,如果用户代理无法解析选择器,则必须是无效的CSS2.1(或在某些其他级别的Selectors中无效);反之,如果它可以解析选择器,则必须有效。但这假定用户代理完全符合标准;我们都知道,在现实中,不同的实现对每个标准的符合程度有所不同,某些实现甚至具有自己的供应商特定选择器,这些选择器不属于任何标准。因此,我将其视为“当用户代理无法解析选择器”而没有括号,并且我想浏览器供应商也是这样做的。
事实上,Selectors本身并没有区分具有标识符或函数但与有效伪类不对应的伪类令牌和连续字符,这两者都是无效的,请参见css3-selectors的第12节selectors-4的第3.9节。基本上,这意味着当前浏览器行为完全符合标准,而不仅仅是浏览器供应商达成的任意决定。
我没有听说过任何浏览器会将伪类视为有效的错误处理目的,并继续忽略该伪类或整个复杂选择器(保留选择器列表中的其他复杂选择器不受影响)。WebKit曾经有一个非常糟糕的习惯,即接受具有未识别伪元素的CSS规则,允许像::selection、::-moz-selection这样的东西,但每个其他布局引擎都更严格地遵循规范,所以这些是无用的。我相信WebKit不再这样做了,但你知道WebKit对这些事情的看法。但据我所知,它从未在伪类上这样做过。

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接