当浏览器不支持 CSS 伪 class 时会发生什么?
What happens when the browser doesn't support a CSS pseudo-class?
如果浏览器不支持 CSS 伪 class,如 :dir
,会发生什么情况?
例如:
html:dir(rtl) {
color: red;
}
如果浏览器不理解 :dir
伪 class 是否会忽略此规则?我对一般情况比对这个特定的伪 class 更感兴趣。我的直觉告诉我是的,但我还没有找到证实我的直觉的文档。
这个问题与这个问题不同:Invalid CSS selector causes rule to be dropped: What is the rationale?。它更窄,我问的是浏览器在看到它无法识别的伪 class 时会做什么,而不是一般情况下它对无效的 CSS 选择器会做什么。据我所知,一个无法识别的伪 class 可能仍然被认为是一个有效的选择器,例如
浏览器目前不区分无法识别或不支持选择器,以及无效选择器。如果浏览器识别选择器,通常它会尽最大努力实现它(并且任何不符合规范的行为都可以 class 在其错误跟踪器上被确定为错误),即使它没有t 在同一级别的选择器中实现所有其他功能(例如 :dir()
当前的情况,以及历史上具有 3 级属性选择器的 Internet Explorer 7 和 8,以及具有通用选择器的 Internet Explorer 6)。如果它不能识别选择器,它会按照 CSS2.1 §4.1.7 的字母并丢弃整个规则集,不问任何问题。请注意它说
When a user agent cannot parse the selector (i.e., it is not valid CSS 2.1), it must ignore the selector and the following declaration block (if any) as well.
这意味着如果用户代理无法解析选择器,则它必须是无效的 CSS2.1(或在其他级别的选择器中无效);相反,如果它 可以 解析一个选择器,那么它必须是有效的。但这假设用户代理完全符合标准;我们都知道,在现实中,不同的实现对每个标准的符合程度不同,某些实现甚至有自己的特定于供应商的选择器,这些选择器不属于任何标准。所以我将其视为没有括号的 "When a user agent cannot parse the selector",我想浏览器供应商也会这样做。
事实上,Selectors 本身不区分具有不对应于有效伪 class 的标识符或函数的伪 class 标记,以及一系列字符甚至不能被解析为伪 class — 它们同样无效 — 请参见 section 12 of css3-selectors and section 3.9 of selectors-4。从本质上讲,这意味着当前浏览器的行为完全符合标准,而不仅仅是浏览器厂商商定的任意决定。
我还没有听说过任何浏览器会为了错误处理的目的而将伪 class 识别为有效,然后继续忽略那个伪 class 或整个复合体选择器(不影响选择器列表中的其他复杂选择器)。 WebKit 过去确实有一个非常坏的习惯,即接受带有无法识别的伪 元素 的CSS 规则,允许::selection, ::-moz-selection
之类的东西proved useless anyway because every other layout engine followed the spec more strictly。不过,我相信 WebKit 不再这样做了,但是您知道 WebKit 是如何处理这些事情的。但是据我所知,它从来没有用伪 classes.
做到过
在标准方面,selectors-4 似乎准备通过引入静态和动态配置文件来改变这一点。 My email on the subject was addressed in a CSSWG telecon; you can find the minutes here (search for "Behavior of Selectors not in Fast Profile"). However, it was resolved that selectors not in the dynamic (previously fast) profile should be treated as invalid and cause the entire CSS rule to be dropped, as usual. See section 2.1:
CSS implementations conformant to Selectors Level 4 must use the dynamic profile for CSS selection. Implementations using the dynamic profile must treat selectors that are not included in the profile as unknown and invalid.
如果浏览器不支持 CSS 伪 class,如 :dir
,会发生什么情况?
例如:
html:dir(rtl) {
color: red;
}
如果浏览器不理解 :dir
伪 class 是否会忽略此规则?我对一般情况比对这个特定的伪 class 更感兴趣。我的直觉告诉我是的,但我还没有找到证实我的直觉的文档。
这个问题与这个问题不同:Invalid CSS selector causes rule to be dropped: What is the rationale?。它更窄,我问的是浏览器在看到它无法识别的伪 class 时会做什么,而不是一般情况下它对无效的 CSS 选择器会做什么。据我所知,一个无法识别的伪 class 可能仍然被认为是一个有效的选择器,例如
浏览器目前不区分无法识别或不支持选择器,以及无效选择器。如果浏览器识别选择器,通常它会尽最大努力实现它(并且任何不符合规范的行为都可以 class 在其错误跟踪器上被确定为错误),即使它没有t 在同一级别的选择器中实现所有其他功能(例如 :dir()
当前的情况,以及历史上具有 3 级属性选择器的 Internet Explorer 7 和 8,以及具有通用选择器的 Internet Explorer 6)。如果它不能识别选择器,它会按照 CSS2.1 §4.1.7 的字母并丢弃整个规则集,不问任何问题。请注意它说
When a user agent cannot parse the selector (i.e., it is not valid CSS 2.1), it must ignore the selector and the following declaration block (if any) as well.
这意味着如果用户代理无法解析选择器,则它必须是无效的 CSS2.1(或在其他级别的选择器中无效);相反,如果它 可以 解析一个选择器,那么它必须是有效的。但这假设用户代理完全符合标准;我们都知道,在现实中,不同的实现对每个标准的符合程度不同,某些实现甚至有自己的特定于供应商的选择器,这些选择器不属于任何标准。所以我将其视为没有括号的 "When a user agent cannot parse the selector",我想浏览器供应商也会这样做。
事实上,Selectors 本身不区分具有不对应于有效伪 class 的标识符或函数的伪 class 标记,以及一系列字符甚至不能被解析为伪 class — 它们同样无效 — 请参见 section 12 of css3-selectors and section 3.9 of selectors-4。从本质上讲,这意味着当前浏览器的行为完全符合标准,而不仅仅是浏览器厂商商定的任意决定。
我还没有听说过任何浏览器会为了错误处理的目的而将伪 class 识别为有效,然后继续忽略那个伪 class 或整个复合体选择器(不影响选择器列表中的其他复杂选择器)。 WebKit 过去确实有一个非常坏的习惯,即接受带有无法识别的伪 元素 的CSS 规则,允许::selection, ::-moz-selection
之类的东西proved useless anyway because every other layout engine followed the spec more strictly。不过,我相信 WebKit 不再这样做了,但是您知道 WebKit 是如何处理这些事情的。但是据我所知,它从来没有用伪 classes.
在标准方面,selectors-4 似乎准备通过引入静态和动态配置文件来改变这一点。 My email on the subject was addressed in a CSSWG telecon; you can find the minutes here (search for "Behavior of Selectors not in Fast Profile"). However, it was resolved that selectors not in the dynamic (previously fast) profile should be treated as invalid and cause the entire CSS rule to be dropped, as usual. See section 2.1:
CSS implementations conformant to Selectors Level 4 must use the dynamic profile for CSS selection. Implementations using the dynamic profile must treat selectors that are not included in the profile as unknown and invalid.