網頁設計遇到最大的麻煩之一莫過於網頁對不同浏覽器的兼容性問題了,因為IE 6.0 / IE 7.0 / firefox 2 / Opera 9等主流浏覽器對CSS解析不近相同,導致設計的頁面效果不一樣,所以用什麼方法可以有效解決不同浏覽器不同頁面效果的問題呢?廣泛被使用的方法就是CSS Hack,即使用特別的CSS定義顯示網頁在不同浏覽器的設計風格,針對不同的浏覽器去寫不同的CSS,最大化兼容浏覽器。
一般情況下,我都會兼顧IE 6.0 / IE 7.0 / firefox 2.0浏覽器,下面是用的較頻繁的CSS Hack技巧:
用的最廣莫過於!important了, 它可以針對IE(IE 7.0能正確理解!important)和非IE浏覽器設置不同的樣式,只要在非IE浏覽器樣式的後面加上!important,就可以針對其優先了。所以為了兼顧IE 6.0與火狐之間的差異,我都會使用!important。
1、僅IE7與IE5.0可以識別
*+html select {…}
當面臨需要只針對IE7與IE5.0做樣式的時候就可以采用這個HACK。
2、僅IE7可以識別
*+html select {…!important;}
當面臨需要只針對IE7做樣式的時候就可以采用這個HACK。
3、IE6及IE6以下識別
* html select {…}
這個地方要特別注意很多博客都寫成了是IE6的HACK其實IE5.x同樣可以識別這個HACK。其它浏覽器不識別。
4、html/**/ >body select {…}
這句與上一句的作用相同。
5、僅IE6不識別,屏蔽IE6
select { display /*屏蔽IE6*/:none;}
這裡主要是通過CSS注釋分開一個屬性與值,注釋在冒號前。
6、僅IE6與IE5不識別,屏蔽IE6與IE5
select/**/ { display /*IE6,IE5不識別*/:none;}
這裡與上面一句不同的是在選擇符與花括號之間多了一個CSS注釋。不屏蔽IE5.5
7、僅IE5不識別,屏蔽IE5
select/*IE5不識別*/ {…}
這一句是在上一句中去掉了屬性區的注釋。只有IE5不識別,IE5.5可以識別。
8、盒模型解決方法
selct {width:IE5.x寬度; voice-family :”\”}\”"; voice-family:inherit; width:正確寬度;}
盒模型的清除方法不是通過!important來處理的。這點要明確。
9、只有Opera識別
@media all and (min-width: 0px){ select {……} }
針對Opera浏覽器做單獨的設定。
以上都是寫CSS中的一些HACK,這些都是用來解決局部的兼容性問題,如果希望把兼容性的內容也分離出來,不妨試一下下面的幾種過濾器。這些過濾器有的是寫在CSS中通過過濾器導入特別的樣式,也有的是寫在HTML中的通過條件來鏈接或是導入需要的補丁樣式。
10、IE5.x的過濾器,只有IE5.x可見
@media tty {
i{content:”\”;/*” “*/}} @import ‘ie5win.css’; /*”;}
}/* */
11、IE5/MAC的過濾器,一般用不著
/*\*//*/
@import “ie5mac.css”;
/**/
--------------------------------------------------------------------
12、IE的if條件Hack
<!--[if IE]> Only IE <![endif]--> 所有的IE可識別
<!--[if IE 5.0]> Only IE 5.0 <![endif]--> 只有IE5.0可以識別
<!--[if gt IE 5.0]> Only IE 5.0+ <![endif]--> IE5.0包換IE5.5都可以識別
<!--[if lt IE 6]> Only IE 6- <![endif]--> 僅IE6可識別
<!--[if gte IE 6]> Only IE 6/+ <![endif]--> IE6以及IE6以下的IE5.x都可識別
<!--[if lte IE 7]> Only IE 7/- <![endif]--> 僅IE7可識別
-----------------------------------------------------------------
你在寫css時樣式表加上浏覽器標識符就行了,各浏覽器區別如下:
IE都能識別*,標准浏覽器(如FF)不能識別*;
IE6能識別*,但不能識別 !important;
IE7能識別*,也能識別 !important;
FF不能識別*,但能識別 !important;
例如style="*width:10px;!important width:20px;"
這樣在IE6下寬度為10px,在IE7下寬度時20px
-----------------------------------------------------------------
最新的CSS兼容方案,讓你的樣式完美兼容各大浏覽器,這個方案主要是用來解決Safari的,Opear是在測試的時候順帶試了一下,結果發現竟然也行,所以順便也解決了。
.e {/*FF OP*/
background-color: #FF0000
}
html* .e{/*Sa IE7 OP*/
background-color:#FF00FF
}
*+html .e{
background-color:#000000;/*OP*/
*background-color:#0000FF;/*IE7*/
}
* html .e{/*IE6*/
background-color:#00FFFF
}
經FF2、OP9.21、OP9.10、Sa3.0.3(pc)、IE7、IE6測試通過,如果你在其他的浏覽器版本上測試過,歡迎給我留言,把結果告訴我。
需要注意的是:IE7對樣式的解釋跟DTD是有關,在沒有DTD的時候,IE7是能讀取IE6的hack的