我可以将适用于不同浏览器的样式合并到一个CSS中吗?

时间:2013-01-03 13:08:19

标签: css

我的皮肤有以下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 个答案:

答案 0 :(得分:1)

HTML 添加

<!--[if IE]>    
<style>
    dl.definition dd.last-child {
       margin-bottom: 0;
    }
</style>
<![endif]-->

答案 1 :(得分:1)

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

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

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

关于如何改进事物的几个选项,并且避免了整个地方重复代码的麻烦......

  1. Upgrde 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 or Less这样的CSS编译器,这样您就可以用更合理的结构化形式编写CSS,然后在将其部署到站点时将其转换为真正的CSS代码。

  6. 希望其中一个解决方案适合您。我的建议是Selectivizr库,但上述任何一个都应该为您提供可行的解决方案。

答案 2 :(得分:0)

不是您的问题的确切答案,而是针对IE6&amp;可以找到IE7 here ,它告诉您可以在单个css文件中使用属性。

This再次提供了更复杂的解决方案。

再次,您可以在单个css文件中使用多个属性,如果浏览器不理解它,浏览器将忽略它。为不断增长的浏览器智能而欢呼。 : - )

答案 3 :(得分:0)

IE的

Conditional comments。您可以指定IE的版本,以便选择CSS