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

时间:2016-08-09 16:38:10

标签: css css-selectors cross-browser pseudo-class

如果浏览器不支持CSS伪类,例如:dir

,会发生什么

例如:

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

如果浏览器不理解:dir伪类,是否会忽略此规则?我对这个特殊的伪类中的一般情况更感兴趣。我的直觉告诉我是的,但我没有找到确认我直觉的文件。

这个问题与此问题不同:Invalid CSS selector causes rule to be dropped: What is the rationale?。它更窄,我问的是当它看到一个它无法识别的伪类时浏览器会做什么,而不是它对无效的CSS选择器的作用。据我所知,例如,无法识别的伪类仍可被视为有效的选择器。

1 个答案:

答案 0 :(得分:4)

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

  

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

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

事实上,Selectors本身并没有区分具有与有效伪类不对应的ident或函数的伪类令牌,以及甚至无法解析为伪类的一系列字符 - 它们同样无效 - 请参阅section 12 of css3-selectorssection 3.9 of selectors-4。从本质上讲,这意味着当前的浏览器行为完全符合标准,而不仅仅是浏览器供应商商定的任意决定。

我没有听说任何浏览器将伪类识别为出于错误处理的目的而有效,并且继续忽略该伪类或整个复杂选择器(在选择器中留下其他复杂的选择器)列表未受影响)。 WebKit确实习惯于接受使用无法识别的伪元素的CSS规则,允许::selection, ::-moz-selection之类的内容proved useless anyway because every other layout engine followed the spec more strictly。我相信WebKit不再这样做,但是你知道WebKit是如何处理这些事情的。但AFAIK从未使用伪进行此操作。

在标准方面,选择器-4似乎设置为通过引入静态和动态配置文件来更改此设置。 My email on the subject在CSSWG电话中得到了解决;您可以找到分钟here(搜索“不在快速配置文件中的选择器的行为”)。但是,解决了不在动态(以前快速)配置文件中的选择器应被视为无效并导致整个CSS规则像往常一样被删除。见section 2.1

  

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