2013-01-03 19 views
0

我的皮肤下面的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; 
} 
+0

我会建议尝试像[Selectivzr](http://selectivizr.com/)这样的库,它可以让IE支持CSS,比如':last-child',所以你不必写全部该浏览器特定的代码。 – SDC

回答

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. 使用像这样的CSS编译器,因此您可以在将其部署到站点时将其转换为真正的CSS代码之前,以更合理和结构化的方式编写您的CSS。

希望这些解决方案之一将为您工作。我的建议是Selectivizr图书馆,但上述任何一项都应为您提供可行的解决方案。

1

HTML添加

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

+1你给出了正确的建议,但只有Internet Explorer! :/ –

+0

这就是OP想要的(“第二只适用于IE”)。 – JJJ

+0

嗯,@Juhana我知道你downvoted我的POST,但你可以看到问题标题:'我可以结合一种风格,适用于不同的浏览器到一个CSS?' –

0

不是一个确切的答案,你的问题,但IE6的解决方法& IE7可以找到here它告诉你可以在单个CSS文件中使用属性。

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

而且,您可以在单个css文件中使用多个属性,如果浏览器不理解它,浏览器将忽略它。欢呼着越来越聪明的浏览器。 :-)

相关问题