#id#id :重复出现相同的简单选择器应该会增加特异性,但对于 IE9 中的 ID 则不会



一段时间以来,我一直在使用一个我认为很聪明的小技巧。

这就是组合相同的css选择器,为规则的选择器添加特定性。

CSS规范确实提到:

注意:允许重复出现同一个简单选择器,并且确实增加了特异性。

http://www.w3.org/TR/css3-selectors/#specificity

例如,如果HTML是

<body>
    <section id="main">
        <header class="titles">
            <h2>Title red</h2>
            <h2 class="blue">Title blue</h2>
        </header>
        <h2 class="blue">Title blue</h2>
    </section>
</body>

和CSS

#main .titles h2{
    color: red;
}
#main .blue.blue{
    color: blue;
}

通过这种方式,我可以使用类.blue来覆盖样式、标头中的事件。。。

(我这么做是因为我讨厌使用!important。对我来说,应该不惜一切代价避免它。)

第一个选择器重0111(1 id,1 class,1 element)第二选择器重0120(1 id,2类)

有时我会用身份证来做。它有效。。。在真实的浏览器中。。。此选择器:

#main#main .blue{}

应该重0200,因为它有两个ID,对吧?

IE9(没有尝试其他方法)不会在选择器中解释多个相同的ID。此选择器不会覆盖IE9…中的#main .titles h2{}

IE的css控制台显示一个等于#main .blue的计算选择器,并删除第二个出现。。。

为什么?

对我来说,这只是另一个IE实现的"bug"。

正如@BoltClocks所建议的,我在这里提交了一份报告:

https://connect.microsoft.com/IE/feedbackdetail/view/958790/repeated-occurrences-of-the-same-simple-selector-should-increase-specificity-even-with-ids

是的,从F12中显示的行为来看,这肯定是一个错误。如果你把"增加特异性"解释为"必须增加特异性",这也是违反规范的。这个问题似乎只影响ID选择器。类选择器、属性选择器和伪类都可以。

这似乎以前已经报告过,因为当我搜索Microsoft Connect时,它会显示一个现有的报告,但由于某种原因我无法查看它。IE11中仍然存在该问题;如果您也无法查看报告,请随时提交另一份报告。

最新更新