CSS hack:區分IE6、IE7、IE8、Firefox、Opera 瀏覽器相容性問題

CSS hack:區分IE6、IE7、IE8、Firefox、Opera 瀏覽器相容性問題

文章tkkuo » 2012年 2月 12日, 01:19

方法一:

跨瀏覽器的網頁設計一直是讓人很頭疼的問題,這不只是因為瀏覽器的版本眾多,還有一個重要的原因是相同瀏覽器的不同時期的版本也會有差異,甚至是在不同操作同台上還會有不同。因此使CSS hack技術進行瀏覽器區分是實現跨瀏覽器訪問一個好方法。CSS Hack技術有很多,具體可以查看:

本文據說的主要是通過「.」,「>」,「*」,「_」來區分。以下是本人對這四種符號的測試結果:
———————IE6—— IE7——IE8——FF2——FF3— Opera9.5
>property—— Y—— Y—— Y—— N—— N—— N
. property—— Y—— Y—— Y—— N—— N—— N
* property—— Y—— Y—— Y—— N—— N—— N
_ property—— Y—— N—— N—— N—— N—— N

我們可以看到>property、.property、*property在各瀏覽器中的表現是一致的,只有_property在IE6和IE7、IE8中有所區別。另外還要注意的,IE6是不支持!important的,而其他幾款瀏覽器都識別。

舉例:

要對想同的文字在不同瀏覽器中顯示不同的顏色可以使用:

color:brown !important; /*用於Opera、Firefox2、Firefox3等現代瀏覽器*/

1. >color:green !important; /*IE7、IE8可以識別該規則,因此它覆蓋掉了上一條規則*/
2. color:red; /*所有瀏覽器都可以識別,但是以上兩條規則有!important,所以這條規則被忽視;只有IE6認識並覆蓋掉上兩條規則*/

因此這就實現了跨瀏覽器的表現問題。_property和*property也是一樣的。對於_property來說,只有IE6才能識別,因此可以用於單獨對IE6的設置中。

不過這裡要注意書寫的順序:現在瀏覽器的寫法要寫在最前面,IE6的寫法要寫在最後面用於覆蓋,其他瀏覽器寫在中間。

方法二:

其實主要是瀏覽器:IE6/IE7/firefox下,各個對CSS代碼的解釋有區別,下邊轉載一篇HACK的文章,相當實用。

區別IE6與FF: background:orange;*background:blue;
區別IE6與IE7: background:green !important;background:blue;
區別IE7與FF: background:orange; *background:green;
區別FF/IE7/IE6: background:orange;*background:green !important;*background:blue;

註:
IE都能識別*標準瀏覽器(如FF)不能識別*
IE6能識別*,但不能識別 !important
IE7能識別*,也能識別!important
FF不能識別*,但能識別!important

另外再補充一個,底線 "_"

IE6支援底線,IE7和firefox均不支援底線。(推薦.我這只有這個有效!)

於是大家還可以這樣來區分IE6、IE7、firefox
: background:orange;*background:green;_background:blue;
頭像
tkkuo
系統管理員
系統管理員
 
文章: 131
註冊時間: 2008年 7月 19日, 19:24

Re: CSS hack:區分IE6、IE7、IE8、Firefox、Opera 瀏覽器相容性問題

文章tkkuo » 2012年 2月 12日, 01:20

區別IE和Firefox

【辨識符號】:「\9」

【範例練習】:

#tip {

background:blue; /*Firefox 背景變藍色*/

background:red \9; /*IE6、IE7、IE8背景變紅色*/

}

【說明】:因為IE瀏覽器看得懂「\9」,但是非IE的瀏覽器一律看不懂,因此就可以用這個語法來區分IE和Firefox(非IE瀏覽器,像是Opera、Google Chrome、Safari等),因此以上CSS範例中,非IE瀏覽器是顯示藍色背景,IE系列瀏覽器是顯示紅色背景。


區別IE6、IE7、IE8、Firefox

【辨識符號】:「\9」、「*」、「_」

【範例練習】:

#tip {

background:blue; /*Firefox 背景變藍色*/

background:red \9; /*IE8 背景變紅色*/

*background:black; /*IE7 背景變黑色*/

_background:orange; /*IE6 背景變橘色*/

}

【說明】:因為IE系列瀏覽器可讀「\9」,而IE6和IE7可讀「*」(米字號),另外IE6可辨識「_」(底線),因此可以依照順序寫下來,就會讓瀏覽器正確的讀取到自己看得懂得CSS語法,所以就可以有效區分IE各版本和非IE瀏覽器(像是Firefox、Opera、Google Chrome、Safari等)。


區別IE6、IE7、Firefox (方法 1)

【辨識符號】:「*」、「_」

【範例練習】:

#tip {

background:blue; /*Firefox背景變藍色*/

*background:black; /*IE7 背景變黑色*/

_background:orange; /*IE6 背景變橘色*/

}

【說明】:IE7和IE6可讀「*」(米字號),IE6又可以讀「_」(底線),但是IE7卻無法讀取「_」,至於Firefox(非IE瀏覽器)則完全無法辨識「*」和「_」,因此就可以透過這樣的差異性來區分IE6、IE7、Firefox,


區別IE6、IE7、Firefox (方法 2)

【辨識符號】:「*」、「!important」

【範例練習】:

#tip {

background:blue; /*Firefox 背景變藍色*/

*background:green !important; /*IE7 背景變綠色*/

*background:orange; /*IE6 背景變橘色*/

}

【說明】:IE7可以辨識「*」和「!important」,但是IE6只可以辨識「*」,卻無法辨識「!important」,至於Firefox可以讀取「!important」但不能辨識「*」因此可以透過這樣的差異來有效區隔IE6、IE7、Firefox。
區別IE7、Firefox

【辨識符號】:「*」、「!important」

【範例練習】:

#tip {

background:blue; /*Firefox 背景變藍色*/

*background:green !important; /*IE7 背景變綠色*/

}

【說明】:因為Firefox可以辨識「!important」但卻無法辨識「*」,而IE7則可以同時看懂「*」、「!important」,因此可以兩個辨識符號來區隔IE7和Firefox。


區別IE6、IE7 (方法 1)

【辨識符號】:「*」、「_」

【範例練習】:

#tip {

*background:black; /*IE7 背景變黑色*/

_background:orange; /*IE6 背景變橘色*/

}

【說明】:IE7和IE6都可以辨識「*」(米字號),但IE6可以辨識「_」(底線),IE7卻無法辨識,透過IE7無法讀取「_」的特性就能輕鬆區隔IE6和IE7之間的差異。
區別IE6、IE7 (方法 2)

【辨識符號】:「!important」

【範例練習】:

#tip {

background:black !important; /*IE7 背景變黑色*/

background:orange; /*IE6 背景變橘色*/

}

【說明】:因為IE7可讀取「!important;」但IE6卻不行,而CSS的讀取步驟是從上到下,因此IE6讀取時因無法辨識「!important」而直接跳到下一行讀取CSS,所以背景色會呈現橘色。


區別IE6、Firefox

【辨識符號】:「_」

【範例練習】:

#tip {

background:black; /*Firefox 背景變黑色*/

_background:orange; /*IE6 背景變橘色*/

}

【說明】:因為IE6可以辨識「_」(底線),但是Firefox卻不行,因此可以透過這樣的差異來區隔Firefox和IE6,有效達成CSS hack。



關於IE6、IE7、IE8、Firefox之間的CSS Hack大概是以上那樣,如果有疏漏或是有錯誤還煩請大家指證一下囉!這些CSS Hack是我目前看過比較簡單的處理方式,當然如果你不會很在意CSS是否通過W3C的驗證,你只會在意每個用戶在不同的瀏覽器下閱讀是否可以正常的話,其實以上CSS Hack對你來說是非常好用的,因為這些CSS Hack如果善加利用確實可以正確的解決瀏覽器相容性問題。
頭像
tkkuo
系統管理員
系統管理員
 
文章: 131
註冊時間: 2008年 7月 19日, 19:24


回到 未分類工具

誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 1 位訪客

cron