使用Filters濾鏡彌補(bǔ)CSS3的跨瀏覽器問題以及兼容低版本IE
發(fā)布時(shí)間:2013-01-23 14:55:36 作者:佚名
我要評(píng)論

跨瀏覽器兼容性是網(wǎng)頁(yè)制作永恒的難題,所以在未來(lái)一段時(shí)間里,樣式表里的-moz-,-webkit-,(-ms-,-o-)等等前綴將長(zhǎng)期存在,除了考慮各家瀏覽器之間的兼容性外,我們還有必要向前兼容老式瀏覽器
跨瀏覽器兼容性是網(wǎng)頁(yè)制作永恒的難題。別看各瀏覽器廠商都努力在自己的瀏覽器中實(shí)現(xiàn)新式的css3標(biāo)準(zhǔn)特性,但都是以擴(kuò)展樣式的形式提供的, 所以在未來(lái)一段時(shí)間里,樣式表里的-moz-,-webkit-,(-ms-,-o-)等等前綴將長(zhǎng)期存在。
另外,雖說各家有志于擴(kuò)張自己市場(chǎng)的瀏覽器廠商都提供了css3的新特性,但鑒于其老式版本的瀏覽器依然存在于用戶的主機(jī)上(主要是微軟旗下的ie6,7,8),除了考慮各家瀏覽器之間的兼容性外,我們還有必要向前兼容老式瀏覽器。
這些老式瀏覽器(低版本ie)對(duì)于css3的不支持問題,真是阻礙我們邁向css3時(shí)代的一大障礙。
不幸之幸,當(dāng)年ie在輕視w3c標(biāo)準(zhǔn)之時(shí),自成一套的Filters濾鏡卻是具備長(zhǎng)遠(yuǎn)眼光的。在這些Filters濾鏡中,不少效果正是我們CSS3中目前實(shí)現(xiàn)的。
對(duì)于Filters濾鏡,我們不建議單獨(dú)使用,只作為解決兼容性時(shí)候的一個(gè)選擇。
下面我們將解決以下低版本瀏覽器的問題:
1. ie6下對(duì)透明png的不支持;
2. ie6,7,8下陰影(box-shadow,text-shadow)效果的不支持;
3. ie6,7,8下漸變(Gradients)效果的不支持;
4. ie6,7,8下對(duì)rgba的不支持(一般用來(lái)做半透明層)。
1. 解決ie6對(duì)24位透明png的不支持
第一個(gè)問題非常常見,其實(shí)有兩個(gè)解決方法,
一個(gè)就是使用ie濾鏡:AlphaImageLoader
提示:您可以先修改部分代碼再運(yùn)行
使用這個(gè)濾鏡之后,仍然是有一些問題沒法彌補(bǔ)的,比如圖片的repeat等等。
之前,我曾極力推薦過另外一個(gè)解決方法:使用VML,稱之為完美解決方案。在這個(gè)js里已經(jīng)封裝好代碼DD_belatedPNG
但是后來(lái)發(fā)現(xiàn),使用VML效率問題比AlphaImageLoader更甚,君當(dāng)慎之。
2. 解決ie6,7,8下對(duì)陰影(box-shadow,text-shadow)效果的不支持
現(xiàn)在很多網(wǎng)站為求美觀采用了很多css3的樣式,其中box-shadow和text-shadow的使用率最高。
下面我們就利用Blur和dropShadow濾鏡在ie6,7,8中實(shí)現(xiàn)這種效果:
提示:您可以先修改部分代碼再運(yùn)行
ie的濾鏡是必須要在觸發(fā)haslayout情況下才能生效的(ie8除外,它已經(jīng)拋棄了haslayout這個(gè)私有屬性),這就是為什么我們?cè)谀抢锛恿藗€(gè)zoom:1;
另外,當(dāng)使用dropShadow濾鏡做文字陰影時(shí),就不應(yīng)該使用background,否則陰影效果是對(duì)背景起作用了,所以我們將dropShadow濾鏡加在了span上而不是class=shadow層上。
做box-shadow效果,我們還多加了一層class=ieShadow,然后使用blur濾鏡來(lái)模擬的。其實(shí)濾鏡中還有個(gè)Shadow濾鏡,可以不需要這個(gè)額外層,但是效果并不好,所以我們并沒有采用。
下面,我們做一個(gè)兼容所有瀏覽器的demo。
提示:您可以先修改部分代碼再運(yùn)行
3. 解決ie6,7,8下漸變(Gradients)效果的不支持
自從有了gradient漸變這個(gè)css3屬性后,很多設(shè)計(jì)效果我們就不需要去切圖了,直接使用代碼就能實(shí)現(xiàn),并且相對(duì)圖片來(lái)說局限性更小。
為了彌補(bǔ)ie低版本下對(duì)gradient的不支持,我們可以使用Gradient濾鏡。
ie的Gradient濾鏡只支持線性漸變,且只能設(shè)置兩個(gè)漸變色,不過這里注意一下,這個(gè)漸變顏色可以設(shè)置alpha透明度。
提示:您可以先修改部分代碼再運(yùn)行
我們?cè)诳匆幌赂鳛g覽器兼容性的寫法,遺憾的是opera并未支持。
提示:您可以先修改部分代碼再運(yùn)行
4. 解決ie6,7,8下對(duì)rgba的不支持(一般用來(lái)做半透明層)
這第四個(gè)問題,非常普遍,而且ie低版本下的解決方法在網(wǎng)上也是隨處可見,就是半透明層的效果。
因?yàn)閕e不支持rgba色,所以我們一般都使用ie的alpha濾鏡來(lái)達(dá)到半透明效果,但是,同我們上面舉的box-shadow的模擬例子一樣,這個(gè)alpha濾鏡和上面的blur濾鏡都是針對(duì)層元素內(nèi)所有子元素且包括文本節(jié)點(diǎn)的。所以,一旦使用了alpha濾鏡,那么這個(gè)元素下面的所有東西都透明了,這常常和我們要的效果不一致。
網(wǎng)上一般的解決方法同上面的模擬box-shadow的blur濾鏡一樣,將透明層單獨(dú)提取成一個(gè)層。
提示:您可以先修改部分代碼再運(yùn)行
這種方法使用的比較普遍,但是多加的一層實(shí)在有些多余,并且有時(shí)候控制起來(lái)還比較麻煩。
我們可以換一個(gè)濾鏡方法:在上面的漸變的濾鏡里,我們提到了漸變色也可以使用alpha半透明值,并且這個(gè)漸變?yōu)V鏡是針對(duì)于元素背景的,元素內(nèi)容并不會(huì)受其影響。
那么我們可以這樣實(shí)現(xiàn):
提示:您可以先修改部分代碼再運(yùn)行
顯然結(jié)構(gòu),樣式簡(jiǎn)單多了,再做一下其他瀏覽器的兼容性:
提示:您可以先修改部分代碼再運(yùn)行
雖然我們以上解決了四種ie低版本下的不足,但在解決的過程中某些地方還是稍顯繁復(fù)了,且在具體應(yīng)用當(dāng)中的情況或許并沒有這么簡(jiǎn)單,讀者當(dāng)理解之后再做延伸。
除了以上四種問題被解決之外,還是有太多的css3效果在ie低版本下是無(wú)法實(shí)現(xiàn)的,我們不得不(在低版本瀏覽器中)放棄之,其中最最最遺憾的就是css3圓角效果了,當(dāng)然使用VML也是能解決,封裝的方法:Curved corner,同DD_belatedPNG一樣,我還是建議讀者謹(jǐn)慎采用。
ie各個(gè)Filters靜態(tài)濾鏡演示Demo:DXTidemo
另外,雖說各家有志于擴(kuò)張自己市場(chǎng)的瀏覽器廠商都提供了css3的新特性,但鑒于其老式版本的瀏覽器依然存在于用戶的主機(jī)上(主要是微軟旗下的ie6,7,8),除了考慮各家瀏覽器之間的兼容性外,我們還有必要向前兼容老式瀏覽器。
這些老式瀏覽器(低版本ie)對(duì)于css3的不支持問題,真是阻礙我們邁向css3時(shí)代的一大障礙。
不幸之幸,當(dāng)年ie在輕視w3c標(biāo)準(zhǔn)之時(shí),自成一套的Filters濾鏡卻是具備長(zhǎng)遠(yuǎn)眼光的。在這些Filters濾鏡中,不少效果正是我們CSS3中目前實(shí)現(xiàn)的。
對(duì)于Filters濾鏡,我們不建議單獨(dú)使用,只作為解決兼容性時(shí)候的一個(gè)選擇。
下面我們將解決以下低版本瀏覽器的問題:
1. ie6下對(duì)透明png的不支持;
2. ie6,7,8下陰影(box-shadow,text-shadow)效果的不支持;
3. ie6,7,8下漸變(Gradients)效果的不支持;
4. ie6,7,8下對(duì)rgba的不支持(一般用來(lái)做半透明層)。
1. 解決ie6對(duì)24位透明png的不支持
第一個(gè)問題非常常見,其實(shí)有兩個(gè)解決方法,
一個(gè)就是使用ie濾鏡:AlphaImageLoader
提示:您可以先修改部分代碼再運(yùn)行
使用這個(gè)濾鏡之后,仍然是有一些問題沒法彌補(bǔ)的,比如圖片的repeat等等。
之前,我曾極力推薦過另外一個(gè)解決方法:使用VML,稱之為完美解決方案。在這個(gè)js里已經(jīng)封裝好代碼DD_belatedPNG
但是后來(lái)發(fā)現(xiàn),使用VML效率問題比AlphaImageLoader更甚,君當(dāng)慎之。
2. 解決ie6,7,8下對(duì)陰影(box-shadow,text-shadow)效果的不支持
現(xiàn)在很多網(wǎng)站為求美觀采用了很多css3的樣式,其中box-shadow和text-shadow的使用率最高。
下面我們就利用Blur和dropShadow濾鏡在ie6,7,8中實(shí)現(xiàn)這種效果:
提示:您可以先修改部分代碼再運(yùn)行
ie的濾鏡是必須要在觸發(fā)haslayout情況下才能生效的(ie8除外,它已經(jīng)拋棄了haslayout這個(gè)私有屬性),這就是為什么我們?cè)谀抢锛恿藗€(gè)zoom:1;
另外,當(dāng)使用dropShadow濾鏡做文字陰影時(shí),就不應(yīng)該使用background,否則陰影效果是對(duì)背景起作用了,所以我們將dropShadow濾鏡加在了span上而不是class=shadow層上。
做box-shadow效果,我們還多加了一層class=ieShadow,然后使用blur濾鏡來(lái)模擬的。其實(shí)濾鏡中還有個(gè)Shadow濾鏡,可以不需要這個(gè)額外層,但是效果并不好,所以我們并沒有采用。
下面,我們做一個(gè)兼容所有瀏覽器的demo。
提示:您可以先修改部分代碼再運(yùn)行
3. 解決ie6,7,8下漸變(Gradients)效果的不支持
自從有了gradient漸變這個(gè)css3屬性后,很多設(shè)計(jì)效果我們就不需要去切圖了,直接使用代碼就能實(shí)現(xiàn),并且相對(duì)圖片來(lái)說局限性更小。
為了彌補(bǔ)ie低版本下對(duì)gradient的不支持,我們可以使用Gradient濾鏡。
ie的Gradient濾鏡只支持線性漸變,且只能設(shè)置兩個(gè)漸變色,不過這里注意一下,這個(gè)漸變顏色可以設(shè)置alpha透明度。
提示:您可以先修改部分代碼再運(yùn)行
我們?cè)诳匆幌赂鳛g覽器兼容性的寫法,遺憾的是opera并未支持。
提示:您可以先修改部分代碼再運(yùn)行
4. 解決ie6,7,8下對(duì)rgba的不支持(一般用來(lái)做半透明層)
這第四個(gè)問題,非常普遍,而且ie低版本下的解決方法在網(wǎng)上也是隨處可見,就是半透明層的效果。
因?yàn)閕e不支持rgba色,所以我們一般都使用ie的alpha濾鏡來(lái)達(dá)到半透明效果,但是,同我們上面舉的box-shadow的模擬例子一樣,這個(gè)alpha濾鏡和上面的blur濾鏡都是針對(duì)層元素內(nèi)所有子元素且包括文本節(jié)點(diǎn)的。所以,一旦使用了alpha濾鏡,那么這個(gè)元素下面的所有東西都透明了,這常常和我們要的效果不一致。
網(wǎng)上一般的解決方法同上面的模擬box-shadow的blur濾鏡一樣,將透明層單獨(dú)提取成一個(gè)層。
提示:您可以先修改部分代碼再運(yùn)行
這種方法使用的比較普遍,但是多加的一層實(shí)在有些多余,并且有時(shí)候控制起來(lái)還比較麻煩。
我們可以換一個(gè)濾鏡方法:在上面的漸變的濾鏡里,我們提到了漸變色也可以使用alpha半透明值,并且這個(gè)漸變?yōu)V鏡是針對(duì)于元素背景的,元素內(nèi)容并不會(huì)受其影響。
那么我們可以這樣實(shí)現(xiàn):
提示:您可以先修改部分代碼再運(yùn)行
顯然結(jié)構(gòu),樣式簡(jiǎn)單多了,再做一下其他瀏覽器的兼容性:
提示:您可以先修改部分代碼再運(yùn)行
雖然我們以上解決了四種ie低版本下的不足,但在解決的過程中某些地方還是稍顯繁復(fù)了,且在具體應(yīng)用當(dāng)中的情況或許并沒有這么簡(jiǎn)單,讀者當(dāng)理解之后再做延伸。
除了以上四種問題被解決之外,還是有太多的css3效果在ie低版本下是無(wú)法實(shí)現(xiàn)的,我們不得不(在低版本瀏覽器中)放棄之,其中最最最遺憾的就是css3圓角效果了,當(dāng)然使用VML也是能解決,封裝的方法:Curved corner,同DD_belatedPNG一樣,我還是建議讀者謹(jǐn)慎采用。
ie各個(gè)Filters靜態(tài)濾鏡演示Demo:DXTidemo
相關(guān)文章
詳解CSS3 filter:drop-shadow濾鏡與box-shadow區(qū)別與應(yīng)用
這篇文章主要介紹了詳解CSS3 filter:drop-shadow濾鏡與box-shadow區(qū)別與應(yīng)用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友2020-08-24通過css3的filter濾鏡改變png圖片的顏色的示例代碼
本方法是通過CSS3濾鏡 filter 中的 drop-shadow 將png圖片的非透明部分生成任意顏色的投影,然后將原始圖片隱藏起來(lái),從而達(dá)到改變圖片顏色的目的,代碼簡(jiǎn)單易懂,對(duì)CSS改2020-05-06- 這篇文章主要介紹了CSS3 中filter(濾鏡)屬性使用,本文通過實(shí)例代碼截圖給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2020-04-07
jquery和CSS3圖片排序過濾搜索插件Filterizr
Filterizr是一個(gè)jquery和CSS3圖片排序過濾插件??蓪?duì)一組圖片進(jìn)行排序,按條件過濾和按關(guān)鍵字搜索,歡迎下載2017-07-19- 這篇文章主要介紹了詳解CSS3中強(qiáng)大的filter(濾鏡)屬性的相關(guān)資料,需要的朋友可以參考下2017-06-29
使用CSS3濾鏡的filter:blur屬性制作毛玻璃模糊效果的方法
CSS3的blur屬性可以將圖片加上模糊濾鏡的效果,下面我們就來(lái)詳細(xì)看一下使用CSS3濾鏡的filter:blur屬性制作毛玻璃模糊效果的方法,需要的朋友可以參考下2016-07-08css3背景圖片透明疊加屬性cross-fade簡(jiǎn)介及用法實(shí)例
據(jù)說iOS6系統(tǒng)(iPhone5)增加了兩個(gè)CSS3屬性,一個(gè)是CSS3 filters – CSS3濾鏡另外一個(gè)是CSS3 Cross-fade – CSS3交叉淡入淡出,接下來(lái)為您介紹cross-fade屬性,感興趣的朋友2013-01-08CSS3 濾鏡 webkit-filter詳細(xì)介紹及使用方法
CSS3 開始也有濾鏡(不是 IE 的那種濾鏡),這些濾鏡效果最初是用于 SVG 的,W3C 將其引入到 CSS3 中,然后制定了 CSS Filter Effects 1.0 的規(guī)范,Webkit 率先支持了它,需2012-12-27CSS3 filter(濾鏡)實(shí)現(xiàn)網(wǎng)頁(yè)灰色或者黑色模式的代碼
這篇文章主要介紹了CSS3 filter(濾鏡)實(shí)現(xiàn)網(wǎng)頁(yè)灰色或者黑色模式的代碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以2020-11-30