CSS编译器并将IE hacks转换为条件css

时间:2010-04-30 18:26:39

标签: css internet-explorer-6 internet-explorer sass less

跳到底部提问,但首先是一点背景。

所以我一直在研究CSS编译器(比如Sass& Less),并且对它们非常感兴趣,不是因为它们帮助我更容易理解(我已经做了几年的CSS了)现在),但他们减少了残酷,帮助我更容易看到事情。

我最近一直在研究可靠地实现内联块(和clearfix),它需要大量无关的代码和放大器。黑客。现在据该领域的所有权威人士说,我不应该把IE黑客放在我做CSS的同一页面上,我应该让它们有条件。但对我来说,通过管理所有这些额外的代码是一个非常大的麻烦,这就是为什么我真的喜欢像Less这样的东西。

可以指定一个mixin并将其应用一次,而不是应用非语义类

所以我想我得到了一些曲目(我想解释一下我的观点)但是,基本上,我正处于这些CSS编译器对我非常有用的地步,并允许我抽象出很多东西离开,并可靠地应用它们一次然后编译它。我想有一种方法能够将IE特定的样式编译到他们自己的条件文件(ala Less / Sass)中,所以我不必无故地处理2个文件。

是否有类似脚本/应用程序运行并且可以使下划线/星形黑客攻击它们自己的文件?

3 个答案:

答案 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)并将所有内容保存在一个文件中。更易于维护。