1、對於IE使用filter,對於非IE瀏覽器使用png背景圖填充
先請看如下代碼:
filter:alpha(opacity=50); /* IE */
-moz-opacity:0.5; /* Moz + FF */
opacity: 0.5; /* 支援CSS3的瀏覽器(FF 1.5也支援)*/
簡單解釋,IE使用私人屬性filter:alpha(opacity),Moz Family使用私人屬性-moz-opacity,而標準的屬性是opacity(CSS 3, Moz Family部分支援CSS3)。後面的數值是透明度,使用百分比或者小數(alpha(opacity))使用大於0小於100的數值,其實也是百分比,但是需要注意的是,IE下使其私人屬性生效必須觸發其hasLayout,比如設定容器寬度,最通用的方案是{zoom:1}。)。
從上面的代碼中你沒有看到Opera。沒錯,從Opera9開始支援CSS3的opacity了,也沒有其私人的可支援Alpha透明的屬性。
但是,我們知道,Opera是支援Alpha透明的PNG圖片的(當然Moz Family也支援)。所以我們可以使用背景圖片來實現Alpha透明效果。
例子:http://www.omemo.net/neo/lab/alpha/
關鍵在於:
background: transparent url(alpha80.png) left top repeat!important;
background: #ccc;
filter:alpha(opacity=50);
既然Moz Family支援Alpha透明的PNG,所以我們沒有必要使用其私人屬性了。當然,你可以使用標準的opacity,但別同時使用Alpha透明圖片和opacity,這樣的話就成了兩者的混合了。你可以把上面的例子下載過來,然後/*opacity: .5;*/的注釋看看。
這部分內容來自於:http://www.omemo.net/neo/blog/?p=87
2、如想實現父標籤透明,而子標籤不透明,採用對於採用png透明的父標籤來說不存在問題,如果採用alpha值無論ie還是非ie都存在這樣的問題,css聲明了position透明標籤包含的內容都透明。
例如:
<div id="out"><div id="in">不透明<div><div>
out{
position: absolute;
top:0;
left: 0;
width: 100%;
background:url(../img/alpha30.png);/*非ie*/
filter:alpha(opacity=30);/*ie*/
}
in{
background:#fff
}
這個時候看到in也是透明的
hack方法:增加一個子標籤,採用css hack 使其在ie下充滿整個父標籤,並使其透明,由於透明部分和不透明部分是兄弟關係,所以不影響。
<div id="out"><div id="in">不透明<div><div id="ie">不透明<div><div>
out{
position: absolute;
top:0;
left: 0;
width: 100%;
background:url(../img/alpha30.png);
z-index: 100;
}
in{
background:#fff
}
*html out{
background:out;
}
*html ie{
position: absolute;
top:0;
left: 0;
width: 100%;
height:100%;
background:url(../img/alpha30.png);
filter:alpha(opacity=30);
z-index: -1;/*讓其位於in的下面*/
}
該想法來自於http://www.webmasterworld.com/forum83/3529.htm