跳到底部提问,但首先是一点背景。
所以我一直在研究CSS编译器(比如Sass& Less),并且对它们非常感兴趣,不是因为它们帮助我更容易理解(我已经做了几年的CSS了)现在),但他们减少了残酷,帮助我更容易看到事情。
我最近一直在研究可靠地实现内联块(和clearfix),它需要大量无关的代码和放大器。黑客。现在据该领域的所有权威人士说,我不应该把IE黑客放在我做CSS的同一页面上,我应该让它们有条件。但对我来说,通过管理所有这些额外的代码是一个非常大的麻烦,这就是为什么我真的喜欢像Less这样的东西。
可以指定一个mixin并将其应用一次,而不是应用非语义类所以我想我得到了一些曲目(我想解释一下我的观点)但是,基本上,我正处于这些CSS编译器对我非常有用的地步,并允许我抽象出很多东西离开,并可靠地应用它们一次然后编译它。我想有一种方法能够将IE特定的样式编译到他们自己的条件文件(ala Less / Sass)中,所以我不必无故地处理2个文件。
是否有类似脚本/应用程序运行并且可以使下划线/星形黑客攻击它们自己的文件?
答案 0 :(得分:9)
这不是一个真正的编译器技巧,但如果你想使用条件注释而不必编译单独的每个浏览器样式表,你可以简单地使用HTML条件注释来注入一个样式钩子。例如:
...
</head>
<!--[if lte IE 6]><body class="ie6 ie7"><![endif]-->
<!--[if lte IE 7]><body class="ie7"><![endif]-->
<!--[if gte IE 8]><!--><body><!--<![endif]-->
现在,您可以在与其他规则相同的样式表中将要应用于IE&lt; = 6和IE&lt; = 7的规则作为目标:
body.ie6 #thing { position: relative; }
body.ie7 #otherthing { z-index: 0; }
这是IMO比* html
黑客更清晰,这是最后可接受的CSS黑客攻击。 (“明星黑客”和“下划线黑客”是无效的CSS:避免。)
答案 1 :(得分:1)
您可以有条件地为IE6 / 7 / whathaveyou:
包含生成的CSS表<head>
<link rel="stylesheet" href="/css/master.css" type="text/css"/>
<!--[if IE 6]>
<link rel="stylesheet" href="/css/ie6.css" type="text/css"/>
<![endif]-->
</head>
另外,如果您担心将IE修复程序/黑客与大部分SASS / CSS混合使用,您可以将它们分解为自己的部分内容:
@import ie6.sass
以上内容将包括当前SASS文档中该特定IE版本的所有规则。有关局部文件的文档可在此处找到:SASS Partials
答案 2 :(得分:0)
这是IMO比* html hack更清晰,这是最后可接受的CSS hack。 (“明星黑客”和“下划线黑客”是无效的CSS:避免。)
不是真的:虽然“下划线黑客”无效,但“* html”和“* + html”黑客攻击是完全有效的CSS。 Check it out yourself。 ;)
〜
至于上面的问题,现在我不知道任何编译器能够做到这一点,我仍然喜欢使用启动黑客(IE6-7)并将所有内容保存在一个文件中。更易于维护。