Edge和IE的_:-ms-lang(x)修复程序如何工作?

时间:2018-12-25 20:12:34

标签: css internet-explorer microsoft-edge

我遇到的情况是,我只能在Edge和IE浏览器中应用特定的CSS样式。我在网上发现,您可以在CSS选择器的前面加上_:-ms-lang(x),该样式仅适用于IE和Edge。

但是我想知道,此修复程序的工作原理是什么?据我所知,逗号只会分隔不同的选择器,这意味着其他浏览器也应解释并使用此样式。

这里是一个示例:

假设我们只希望在Edge和IE中将94px的宽度应用于.selector元素。

_:-ms-lang(x), .selector { 
    width: 94px;
}

Edge浏览器将应用此样式,而其他浏览器则不会。但是为什么不呢?

选择器中的逗号应将样式应用于_:-ms-lang(x)元素,并将样式应用于.selector元素。

Here is a source for this IE hack.

And one more.

1 个答案:

答案 0 :(得分:1)

在CSS中,当浏览器无法识别选择器的一部分(或认为选择器中存在错误)时,它会完全忽略整个规则。

Here's the section in the CSS3 spec outlining this behavior

  

合格规则的前奏被解析为选择器列表。如果这导致选择器列表无效,则整个样式规则均无效。

Here CSS2.1 talks about the special case of comma

  

CSS 2.1为选择器中的逗号(,)赋予特殊含义。但是,由于不知道逗号是否会在将来的CSS更新中获取其他含义,因此即使选择器的其余部分在CSS 2.1中看起来很合理,如果选择器中的任何地方出现错误,也应忽略整个语句。

因此,当其他浏览器尝试解析选择器时,它们发现{ duration: "One", startTime1: 60, endtime1: 600 } 选择器无效,因此忽略了 整个 规则(包括{{ 1}})

Also here is an excellent answer on why this behavior is desirable