CSS的解决IE5/IE5.5/IE6/FF/IE7的兼容性问题(css hack)
生活随笔
收集整理的這篇文章主要介紹了
CSS的解决IE5/IE5.5/IE6/FF/IE7的兼容性问题(css hack)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
之前找了幾個不同版本的可獨立運行的IE瀏覽器,正好拿來試試頁面的兼容性問題。不試不知道,在IE6和FF中沒問題的頁面在IE5和IE5.5中亂成一團,一直聽說IE5是WEB標準制作的一個“釘子戶”,現在不得不相信了。
既然有問題,那就找找解決的方法咯,在網上一搜,相關的文章還是不少的,覺得最直接的方法還是“IE條件注釋”,很方便的就能為IE的不同版本寫樣式。但這樣就得為每個版本寫一個樣式,不利于文件的優化。
找了一些相關的CSS HACK后,覺得應該可以把IE5/IE5.5/IE6/FF的HACK寫到一起的,經過測試,終于找到了一個不錯的方法,下面我們來看看怎么實現:
大家都知道用!important聲明可以提升指定樣式規則的應用優先權,如下面的例子:
E1{}{
background-color:?red?!important;/**//*提升優先權*/
background-color:?blue;
} 但這樣寫在IE中會有個問題,看過我的《關于CSS樣式表優先級》和《關于CSS樣式表優先級補遺》,你會知道在IE6和FF中用! important聲明可以提高優先級別,但在IE6中的!important聲明并不是絕對的,它會被之后的同名屬性定義所替換。也就是說在上面的例子中,IE6所應用的是最后一個背景色的值,即“blue”;而在FF中背景色的值為“red”。根據這一點,我們就可以把FF和IE的樣式分離開。
OK ,解決了FF和IE的問題,現在來解決IE自己的問題。
看過了嘟嘟的《繞過IE6支持IE5的別一種寫法-IE也支持">"》后有感而發,使用“>”IE是否真的可以認得?我們來看個例子: E1{}{
background-color:?red;
>background-color:?blue;
} 在FF中得到的是背景色紅色,而在IE中得到的背景色是藍色,根據樣式重定義的規則,如果瀏覽器可以識別“>”,則應該得到的藍色的背景,因此可以知道“>”只有IE可以識別,這點是很重要的哦!在后面大家就會知道了。(注:我測試過其它的一些符號,如“~”、“`”、“<”等,都只有IE可以識別,在此為了感謝嘟嘟,推薦使用“>”)
我們再來看個例子:
E1{}{
>/**//*IE?only*/background-color:?black;
>/**//*IE?only*/background-color?/**//*IE5.5*/:?green;
}
這個例子在IE6中得到了黑色的背景;而在IE5.5中得到的綠色的背景;在IE5中也得到了黑色的背景。這就說明了第二句定義只有IE5.5能識別,這是個很早就公布的HACK,可以在網上找到相關的資料,要注意的就是在屬性名之后是有一個空格的。到此我們已經把FF、IE5.5、IE6分離出來了,那IE5呢?其實現在我們只要把IE5跟IE6分開就OK了,來看看例子:
E1{}{
>/**//*IE?only*/background-color:?red;/**//*IE5*/
}
E1/**//*IE5.5+*/{}{
>/**//*IE?only*/background-color:?black;
} 這里我們又用到一個HACK,就是“E1/**/{}”,這個定義在IE5以上的版本才能識別出來。這個例子得到的結果是,在IE5中的背景色為紅色;在IE5以上版本中得到的是黑色背景。
終于把不同版本的瀏覽器都分離出來了,這樣我們就可以為不同的瀏覽器定義不同的樣式了。來看個完整的例子: E1{}{
width:?500px;
height:?50px;
background-color:?red?!important;/**//*FF*/
background-color:?blue;/**//*IE5*/
text-align:center;
}
E1/**//*IE5.5+*/{}{
>/**//*IE?only*/background-color:?black;/**//*IE6*/
>/**//*IE?only*/background-color?/**//*IE5.5*/:?green;
} 需要注意的是,在上面例子中“background-color”定義的順利不能改變,即FF-IE5-IE6-IE5.5。對于IE的定義在屬性前要加“>”,因為“E1/**/{}”這個HACK在FF中可以識別。也許你會想,上面的例子不是可以寫成: E1{}{
width:?500px;
height:?50px;
background-color:?red;/**//*FF*/
>background-color:?blue;/**//*IE5*/
text-align:center;
}
E1/**//*IE5.5+*/{}{
>/**//*IE?only*/background-color:?black;/**//*IE6*/
>/**//*IE?only*/background-color?/**//*IE5.5*/:?green;
} 這樣不就又可以省下幾個字節?是沒錯,可是HACK不是標準,如果濫用HACK,那只會離標準越來越遠!
總結:IE6/FF/IE7 能認識的符號
IE6能識別下劃線_和星號*,IE7能識別星號*,當不能識別下劃線_,而firefox兩個都不能認識。等等
書寫順序,一般是將識別能力強的瀏覽器的CSS寫在后面。下面如何寫里面說得更詳細些。
如何寫CSS Hack
比如要分辨IE6和firefox兩種瀏覽器,可以這樣寫: <style>???
div{}{???
????background:green;?/**//*?for?firefox?*/???
????*background:red;??/**//*?for?IE6?*/???
}???
</style>???
<div>我在IE6中看到是紅色的,在firefox中看到是綠色的。</div>??
<style>?div{}{?background:green;?/**//*?for?firefox?*/?????*background:red;??/**//*?for?IE6?*/?}?</style>
<div>我在IE6中看到是紅色的,在firefox中看到是綠色的。</div> 解釋一下:
上面的css在firefox中,它是認識不了后面的那個帶星號*的東東是什么的,于是將它過濾掉,不予理睬,解析得到的結果是:div{background:green},于是理所當然這個div的背景是綠色的。
在IE6中呢,它兩個background都能識別出來,它解析得到的結果是:div{background:green;background:red;},于是根據優先級別,處在后面的red的優先級高,于是當然這個div的背景顏色就是紅色的了。
CSS hack:區分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??FF
*? ?? ?? ???√? ?√? ?×
!important??×? ?√? ?√
既然有問題,那就找找解決的方法咯,在網上一搜,相關的文章還是不少的,覺得最直接的方法還是“IE條件注釋”,很方便的就能為IE的不同版本寫樣式。但這樣就得為每個版本寫一個樣式,不利于文件的優化。
找了一些相關的CSS HACK后,覺得應該可以把IE5/IE5.5/IE6/FF的HACK寫到一起的,經過測試,終于找到了一個不錯的方法,下面我們來看看怎么實現:
大家都知道用!important聲明可以提升指定樣式規則的應用優先權,如下面的例子:
E1{}{
background-color:?red?!important;/**//*提升優先權*/
background-color:?blue;
} 但這樣寫在IE中會有個問題,看過我的《關于CSS樣式表優先級》和《關于CSS樣式表優先級補遺》,你會知道在IE6和FF中用! important聲明可以提高優先級別,但在IE6中的!important聲明并不是絕對的,它會被之后的同名屬性定義所替換。也就是說在上面的例子中,IE6所應用的是最后一個背景色的值,即“blue”;而在FF中背景色的值為“red”。根據這一點,我們就可以把FF和IE的樣式分離開。
OK ,解決了FF和IE的問題,現在來解決IE自己的問題。
看過了嘟嘟的《繞過IE6支持IE5的別一種寫法-IE也支持">"》后有感而發,使用“>”IE是否真的可以認得?我們來看個例子: E1{}{
background-color:?red;
>background-color:?blue;
} 在FF中得到的是背景色紅色,而在IE中得到的背景色是藍色,根據樣式重定義的規則,如果瀏覽器可以識別“>”,則應該得到的藍色的背景,因此可以知道“>”只有IE可以識別,這點是很重要的哦!在后面大家就會知道了。(注:我測試過其它的一些符號,如“~”、“`”、“<”等,都只有IE可以識別,在此為了感謝嘟嘟,推薦使用“>”)
我們再來看個例子:
E1{}{
>/**//*IE?only*/background-color:?black;
>/**//*IE?only*/background-color?/**//*IE5.5*/:?green;
}
這個例子在IE6中得到了黑色的背景;而在IE5.5中得到的綠色的背景;在IE5中也得到了黑色的背景。這就說明了第二句定義只有IE5.5能識別,這是個很早就公布的HACK,可以在網上找到相關的資料,要注意的就是在屬性名之后是有一個空格的。到此我們已經把FF、IE5.5、IE6分離出來了,那IE5呢?其實現在我們只要把IE5跟IE6分開就OK了,來看看例子:
E1{}{
>/**//*IE?only*/background-color:?red;/**//*IE5*/
}
E1/**//*IE5.5+*/{}{
>/**//*IE?only*/background-color:?black;
} 這里我們又用到一個HACK,就是“E1/**/{}”,這個定義在IE5以上的版本才能識別出來。這個例子得到的結果是,在IE5中的背景色為紅色;在IE5以上版本中得到的是黑色背景。
終于把不同版本的瀏覽器都分離出來了,這樣我們就可以為不同的瀏覽器定義不同的樣式了。來看個完整的例子: E1{}{
width:?500px;
height:?50px;
background-color:?red?!important;/**//*FF*/
background-color:?blue;/**//*IE5*/
text-align:center;
}
E1/**//*IE5.5+*/{}{
>/**//*IE?only*/background-color:?black;/**//*IE6*/
>/**//*IE?only*/background-color?/**//*IE5.5*/:?green;
} 需要注意的是,在上面例子中“background-color”定義的順利不能改變,即FF-IE5-IE6-IE5.5。對于IE的定義在屬性前要加“>”,因為“E1/**/{}”這個HACK在FF中可以識別。也許你會想,上面的例子不是可以寫成: E1{}{
width:?500px;
height:?50px;
background-color:?red;/**//*FF*/
>background-color:?blue;/**//*IE5*/
text-align:center;
}
E1/**//*IE5.5+*/{}{
>/**//*IE?only*/background-color:?black;/**//*IE6*/
>/**//*IE?only*/background-color?/**//*IE5.5*/:?green;
} 這樣不就又可以省下幾個字節?是沒錯,可是HACK不是標準,如果濫用HACK,那只會離標準越來越遠!
總結:IE6/FF/IE7 能認識的符號
IE6能識別下劃線_和星號*,IE7能識別星號*,當不能識別下劃線_,而firefox兩個都不能認識。等等
書寫順序,一般是將識別能力強的瀏覽器的CSS寫在后面。下面如何寫里面說得更詳細些。
如何寫CSS Hack
比如要分辨IE6和firefox兩種瀏覽器,可以這樣寫: <style>???
div{}{???
????background:green;?/**//*?for?firefox?*/???
????*background:red;??/**//*?for?IE6?*/???
}???
</style>???
<div>我在IE6中看到是紅色的,在firefox中看到是綠色的。</div>??
<style>?div{}{?background:green;?/**//*?for?firefox?*/?????*background:red;??/**//*?for?IE6?*/?}?</style>
<div>我在IE6中看到是紅色的,在firefox中看到是綠色的。</div> 解釋一下:
上面的css在firefox中,它是認識不了后面的那個帶星號*的東東是什么的,于是將它過濾掉,不予理睬,解析得到的結果是:div{background:green},于是理所當然這個div的背景是綠色的。
在IE6中呢,它兩個background都能識別出來,它解析得到的結果是:div{background:green;background:red;},于是根據優先級別,處在后面的red的優先級高,于是當然這個div的背景顏色就是紅色的了。
CSS hack:區分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??FF
*? ?? ?? ???√? ?√? ?×
!important??×? ?√? ?√
轉載于:https://www.cnblogs.com/DavidLc/archive/2008/03/01/1087366.html
總結
以上是生活随笔為你收集整理的CSS的解决IE5/IE5.5/IE6/FF/IE7的兼容性问题(css hack)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: KEB科比F5变频器维修24F5HAR-
- 下一篇: POI教程