css - Internet Explorer IE7 + IE8 忽略逗号分隔选择器列表中第 n 个子项的 CSS 规则

标签 css internet-explorer-8 internet-explorer-7 css-selectors

我刚刚花了一个小时调试 IE7 和 IE8 中出现的一个奇怪的 CSS 错误,并想分享我的发现:

问题:为什么IE7/IE8不拾取后面的规则覆盖前面的规则?

示例标记如下所示:

<table>
    <caption>Things on planet Earth</caption>
    <tbody>
        <tr class="odd"><td>Monkeys</td></tr>
        <tr><td>Tennis</td></tr>
        <tr class="odd"><td>Fridge Magnets</td></tr>
        <tr><td>Humous</td></tr>
    </tbody>
</table>

简单的 CSS 示例如下所示:

tr.odd{
    background-color: red;
}

tr.odd, div:nth-child(odd){
    background-color: blue;
}

Chrome、FF 和 IE9+ 按预期将带有“奇数”类的表行呈现为蓝色,因为将其设置为蓝色的规则出现在文档的后面并且具有相同的特异性。但是 IE7 和 IE8 将它们渲染为红色!那么为什么 IE 不应用第二条规则呢?

最佳答案

因为 IE7(2006 年发布)和 IE8(2009 年发布)不理解 nth-child(添加到 CSS 2010),它们似乎将第二条规则中的第二个选择器视为错误。它的 react 是忽略整个规则,包括它认为有效的其他选择器。尽管第 nth-child 被附加到不同的选择器。开发人员忽略整个规则是一个奇怪的决定,而不仅仅是它认为无效的选择器。

重写CSS如下,将IE7/IE8之后添加的选择器与之前存在的选择器分开,从而解决问题:

tr.odd{
    background-color: red;
}

tr.odd{
    background-color: blue;
}

/* IE7 and IE8 will ignore this entire rule */
div:nth-child(odd){
    background-color: blue;
}

注意:请不要自作聪明,建议删除第一条规则。显然,在这样一个简化的示例中,它是多余的,但这是一个巨大元素的截断版本,在该元素中,CSS 连接到文档的末尾需要覆盖以前的规则。

关于css - Internet Explorer IE7 + IE8 忽略逗号分隔选择器列表中第 n 个子项的 CSS 规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21856542/

相关文章:

javascript - JavaScript 的 "update"函数,类似于 p5.js?

javascript - 媒体查询在 iphone 5 上失败

css - IE8 显示内联 block 不起作用

css - MS IE 7 中的圆 Angular

css - IE 评论根本不在页面上呈现 css

html - IE7元素无法点击

html - 如何在 CSS 中制作多边形 div

css - Susy Grid 系统上 Debug模式和隔离装订线位置的问题

javascript - Jquery slider PNG黑色边框IE8

css - 在兼容模式下,IE7 和更低版本的这种条件 css 加载是否适用于 IE8?