2012-08-27 28 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/