2012-08-27 29 views
2

在单独的CSS文件中维护IE解决方法的常见做法是什么?我正在谈论更深层次的问题,通过其他方式解决问题是不切实际的(例如,包括一个替代图像url以及base64编码的嵌入式资源; boxsizing.htc解决方法等)注意:在考虑dataURI VS拼合香草,所以只有少数编译和维护特定于ie的样式表

有时我不得不求助于类似的代码

.some-class-lets-say-datepicker { 
    background-image: url(data:image/png;base64,/*encoded image*/); 
    *background-image: url(../gfx/lets-say-datepicker-icon.png); 
} 

与编码图像字符为平均100〜300个字符。鉴于上面的代码,这会导致一些冗余和流量 - 符合标准的浏览器下载冗余和URL,并让IE7下载单独的图像请求顶部的base64字符串。我觉得这个开销是微不足道的两个(及,毕竟,IE7的用户有更大的问题是担心:)

同时下面会()是有很多清洁:

<!--[if !IE]> --> 
    <link href="main.css" rel="stylesheet" /> 
<!-- <![endif]--> 
<!--[if lt IE 8]> 
    <link href="main_ie.css" rel="stylesheet"/> 
<![endif]--> 

但单独的维护似乎并不吸引人。 Closure样式表提供conditionals,SASS/LESS是否有类似的内容,或者您​​推荐的完全不同的方法?

回答

5

如果您可以生成2个不同的样式表,那么Sass(版本3.2+)可以很容易地完成这项工作。

这是你的混入:

$ie-only: false !default; 

@mixin hide-from-ie { 
    if $ie-only != true { 
     @content; 
    } 
} 

@mixin show-only-ie { 
    if $ie-only == true { 
     @content; 
    } 
} 

在您的SCSS文件:

.some-class-lets-say-datepicker { 
    @include hide-from-ie { 
     background-image: url(data:image/png;base64,/*encoded image*/); 
    } 

    @include show-only-ie { 
     background-image: url(../gfx/lets-say-datepicker-icon.png); 
    } 
} 

让一个用于导入其他SCSS文件,但这个在顶部有一个单独的IE浏览器只能对文件:

$ie-only: true; 

使用条件注释为旧的IE版本生成的css文件的$ ie-only设置为true,并且每个ot她的浏览器获得使用$ ie-only生成的默认false。

此技术的灵感来源于:http://jakearchibald.github.com/sass-ie/