0

我的皮肤有以下 CSS:

dl.definition dd:last-child {
    margin-bottom: 0;
}
/* IE class */
dl.definition dd.last-child {
    margin-bottom: 0;
}

即使第二个仅用于 IE,是否可以将它们组合成一个?

感谢大家的回答,但我不确定是否有人真的说过我是否可以这样做:

dl.definition dd:last-child, 
dl.definition dd.last-child {
    margin-bottom: 0;
}
4

4 回答 4

1

HTML中添加

<!--[if IE]>    
<style>
    dl.definition dd.last-child {
       margin-bottom: 0;
    }
</style>
<![endif]-->
于 2013-01-03T13:10:38.357 回答
1

您希望的解决方案不起作用:

dl.definition dd:last-child, 
dl.definition dd.last-child {
    margin-bottom: 0;
}

这不起作用的原因是,就旧版本的 IE 而言,dd:last-child它是一个无效的选择器,因此它将丢弃整个块。它也包含一个有效的选择器并不重要;由于无效的,整个东西都被扔掉了。

关于如何改进的一些选项,并为自己省去到处重复代码的麻烦......

  1. 升级 IE。有一些可用的 JavaScript 库,例如Selectivizrie7.js/ie8.js/ie9.js,它们对 IE 进行了修补以使其支持更多的 CSS 选择器。:last-child几乎包含在所有这些库中。

  2. 降级你的 CSS。您已经在.last-child代码中编写了该类以支持旧的 IE 版本,因此只需将其用于所有内容并忘记使用:last-child选择器。然后,您只需要一个适用于所有浏览器的选择器。

  3. 优雅的退化。删除特定于 IE 的代码,只允许旧 IE 用户看到稍微损坏的页面。只要它不影响可用性,它可能没什么大不了的。您可能没有那么多旧的 IE 用户(并且数量将继续下降),而那些仍在使用旧 IE 的人已经习惯于看到这些天稍微损坏(或更糟)的网站。

  4. 重新安排您的布局以使用:first-child而不是:last-child. :first-child有更好的支持(它可以追溯到 IE7,尽管在旧 IE 中存在错误)。

  5. 使用像SASS 或 Less之类的 CSS 编译器,这样您就可以在将 CSS 部署到站点时将其转换为真正的 CSS 代码之前,以更合乎逻辑和结构化的形式编写您的 CSS。

希望其中一种解决方案对您有用。我的建议是 Selectivizr 库,但以上任何一个都应该为您提供一个可行的解决方案。

于 2013-01-03T15:07:30.173 回答
0

不是您问题的确切答案,但可以在此处找到 IE6 和 IE7 的解决方法,它告诉您可以在单个 css 文件中使用属性。

再次给出了更复杂的解决方案。

同样,您可以在单个 css 文件中使用多个属性,如果它不理解它,浏览器将忽略它。为浏览器的日益智能干杯。:-)

于 2013-01-03T13:30:05.127 回答
0

IE 的条件注释。您可以指定 IE 的版本,因为您要选择 CSS

于 2013-01-03T13:47:21.863 回答