DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> CSS入門知識 >> CSS詳解 >> IE下的背景半透明處理(濾鏡)
IE下的背景半透明處理(濾鏡)
編輯:CSS詳解     
現在做的網站首頁,導航條等使用了半透明效果,調試的時候鄙人使用了Chrome浏覽器,之前有考慮過IE的兼容性問題,但打算,網頁完全布局完成後一次性解決。因為只要求兼容到IE8,所以感覺並沒有什麼太大的問題。
但是當進入調試階段的時候,我徹底“崩潰了”IE簡直就是反人類的代名詞,但問題仍然需要解決。

首先,正常情況下,在高版本的浏覽器下,對一個盒子的背景使用半透明效果,我們只這樣做的:



body {
background: url(../images/background.jpg) no-repeat;
}

.box {
background: rgba( 0, 0, 0, 0.5);
}



IE9以上的IE浏覽器,以及其他大部分浏覽器的高版本都是支持“rgba”的,因此如期的在背景圖片之上會出現一層半透明的鋪蓋。
當使用低版本的IE查看的時候,半透明的效果就不復存在了。(預計當中應該是出現一大塊黑色的,當實際情況是背景色完全消失了。因為之前在《Html&CSS設計與構建網站》(jon duckett著)中講解到“rgba”屬性時提到,當浏覽器無法識別時會將其視作“rgb”所以,應當作為“rgb( 0, 0, 0)”處理了,理應是一塊黑色。沒有預期的效果,應當是浏覽器直接忽略了這個元素,所以在編寫CSS樣式時將rgb( 0, 0, 0)加在“rgba”元素之前,當浏覽器無法識別後面的元素時會采用之前的效果。)

於是就使用了IE的濾鏡來處理:



body {
background: url(../images/background.jpg) no-repeat;
}

.box {
background: rgb( 0, 0, 0);
background: rgba( 0, 0, 0, 0.5);
filter:alpha(opacity=50);
opacity:0.50;
}



效果也並沒有出來,後來查看文章了解到,使用濾鏡處理透明(opacity)效果的時候必須要給盒子設置應有的高度。
修改如下:



body {
background: url(../images/background.jpg) no-repeat;
}

.box {
width: 1024px;
height: 1024px;
background: rgb( 0, 0, 0);
background: rgba( 0, 0, 0, 0.5);
filter:alpha(opacity=50);
opacity:0.50;
}




有一張關於filter:alpha();opacity等的表格,可以解釋一些東西:

IE 使用 'filter:alpha(opacity=50);' 通過 Filter 的 alpha 通道濾鏡使元素半透明,但元素必須觸發 hasLayout 特性。
非 IE 浏覽器使用 'opacity:0.5;' 這個 CSS3 草案中的 'opacity' 特性使元素半透明。
所以同時使用 'filter:alpha(opacity=50);' opacity:0.5; 即可保證在所有浏覽器中呈現出半透明效果。


如期,得到了我想要的效果。
但並不應止於此,之前提到,為了在無法識別的浏覽器上得到背景,所以之前使用了“rbg”元素;可是有時候也會有些意想不到的結果。加之,這樣處理當樣式多達一定程度時,常常需要為IE單獨寫一份樣式,使用起來並沒有得到太大的方便。
在查找解決方法的時候還了解到一種方法,使用“DXImageTransform.Microsoft.gradIEnt濾鏡”來處理。這樣能在只需要小部分處理透明問題的時候更簡潔(僅個人意見,雖然寫的更多)。

代碼如下:



body {
background: url(../images/background.jpg) no-repeat;
}

.box {
width: 1024px;
height: 1024px;
filter: progid:DXImageTransform.Microsoft.gradIEnt(startColorstr='#99000000',endColorstr='#99000000');
/* IE6,IE7 */
-ms-filter:"progid:DXImageTransform.Microsoft.gradIEnt(startColorstr=#99000000, endColorstr=#99000000)";
/* IE8 */
background: rgba( 0, 0, 0, 0.5);
}



關於“FILTER:progid:DXImageTransform.Microsoft.GradIEnt濾鏡使用 ”的使用,查詢到相關:

語法:
filter:progid:DXImageTransform.Microsoft.GradIEnt(enabled=bEnabled,startColorStr=iWidth,endColorStr=iWidth)
屬性:
enabled:可選項。布爾值(Boolean)。設置或檢索濾鏡是否激活。 true false
true: 默認值。濾鏡激活。
false:濾鏡被禁止。

startColorStr:可選項。字符串(String)。設置或檢索色彩漸變的開始顏色和透明度。
其格式為 #AARRGGBB 。 AA 、 RR 、 GG 、 BB 為十六進制正整數。取值范圍為 00 - FF 。 RR 指定紅色值, GG 指定綠色值, BB 指定藍色值,參閱 #RRGGBB 顏色單位。 AA 指定透明度。 00 是完全透明。 FF 是完全不透明。超出取值范圍的值將被恢復為默認值。
取值范圍為 #FF000000 - #FFFFFFFF 。默認值為 #FF0000FF 。不透明藍色。
EndColorStr:可選項。字符串(String)。設置或檢索色彩漸變的結束顏色和透明度。參閱 startColorStr 屬性。默認值為 #FF000000 。不透明黑色。
特性:
Enabled:可讀寫。布爾值(Boolean)。參閱 enabled 屬性。
GradIEntType:可讀寫。整數值(Integer)。設置或檢索色彩漸變的方向。1 0
1:默認值。水平漸變。
0:垂直漸變。
StartColorStr:可讀寫。字符串(String)。參閱 startColorStr 屬性。
StartColor:可讀寫。整數值(Integer)。設置或檢索色彩漸變的開始顏色。 取值范圍為 0 - 4294967295 。 0 為透明。 4294967295 為不透明白色。
EndColorStr:可讀寫。字符串(String)。設置或檢索色彩漸變的結束顏色和透明度。參閱 startColorStr 屬性。默認值為 #FF000000 。不透明黑色。
EndColor:可讀寫。整數值(Integer)。設置或檢索色彩漸變的結束顏色。 取值范圍為 0 - 4294967295 。 0 為透明。 4294967295 為不透明白色。當在腳本中使用此特性時,也可以用十六進制格式: 0xAARRGGBB 。
說明:
在對象的背景和內容之間顯示定制的色彩層。
當此效果通過轉變顯示時,在漸變冊色彩層之上的文本程序性的初始化為透明的,當色彩漸變實現後,文本顏色會以其定義的值更新。

基本使用方法就是:“我們要為它設置起點色(startColorstr)和終點色(endColorstr)。在單色透明的情況下,這兩個值是相同的。它們的取值是一個八位的十六進制值,前兩位表示alpha通道值,00表示完全透明,FF表示完全不透明;後六位則是這個顏色的RGB值。”
XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved