CSS透明屬性詳解代碼
更新時(shí)間:2013年11月07日 10:28:02 作者:
本文介紹一下關(guān)于CSS透明屬性詳解及背景透明繼承解決辦法hack,如果你在使用css透明背景之類的此文章可幫你解決許多不兼容問題
透明往往能產(chǎn)生不錯(cuò)的網(wǎng)頁視覺效果,先奉上兼容主流瀏覽器的CSS透明代碼:
.transparent_class {
filter:alpha(opacity=50);
-moz-opacity:0.5;
-khtml-opacity: 0.5;
opacity: 0.5;
}
上面的幾個(gè)屬性分別是:
opacity: 0.5; 這是最重要的,因?yàn)樗荂SS標(biāo)準(zhǔn).該屬性支持Firefox, Safari和 Opera.
filter:alpha(opacity=50); 這個(gè)是為IE6設(shè)的,可取值在0-100,其它三個(gè)0到1.
-moz-opacity:0.5; 這個(gè)是為了支持一些老版本的Mozilla瀏覽器。
-khtml-opacity: 0.5; 這個(gè)為了支持一些老版本的Safari瀏覽器。
CSS透明度繼承問題
但CSS的透明屬性涉及到一個(gè)繼承問題,當(dāng)為父級元素設(shè)置透明度后,子元素將自動(dòng)繼承其透明度,即使你又為子元素指定透明度為1也是無效的。
對于子元素是文字的情況,我的解決方法一般是如果多少還能夠看清,就不管。另一個(gè)折衷的方法是,為文本子元素指定一個(gè)相對更深的顏色。也就是說,當(dāng)子元素繼承透明度后,所得到的文本顏色正好就是你想要的。前提是,這個(gè)顏色還有加深的可能,和需要詳細(xì)的計(jì)算顏色和透明度的值。
還有"取消透明度繼承”的說法,這個(gè)說法是不太準(zhǔn)確的,據(jù)我個(gè)人所知,沒有任何取消透明度繼承的方法。只能說,當(dāng)想要實(shí)現(xiàn)"多個(gè)元素覆蓋,只讓指定的元素透明”時(shí),可以使用的一些Hack。
搜了一下,找到一個(gè)不錯(cuò)的實(shí)現(xiàn)這種效果的方法 – 一個(gè)關(guān)于透明繼承度的問題,有興趣的朋友可以看看。原理很簡單,添加一個(gè)空元素作為透明層,和不想透明但是要實(shí)現(xiàn)覆蓋效果的元素為同級元素。父級元素使用position:relative定位; 兩個(gè)子元素使用position:absolute定位,實(shí)現(xiàn)覆蓋。
html代碼:
<div class="div3"><div class="div4"></div>這里文字圖片都沒透明度了
<div class="div2">圖片</div>
</div>
CSS代碼
body {
background-image: url(./105247.png);
background-repeat: repeat;
}
.div2{ width:100px; height:100px; background: url(./testbok.png)}
.div3{ width:200px; height:200px; position:relative; margin-top:10px}
.div4{ position:absolute; top:0; height:200px; width:200px; z-index:-1; background:#FFFFFF;filter:alpha(opacity=70);opacity:0.7;}
如果你外面的容器高度是不定的,那么只要把div3的高度設(shè)置的足夠的高度就可以了
這個(gè)方法有個(gè)很不好的缺點(diǎn):多了一個(gè)空白的div
復(fù)制代碼 代碼如下:
.transparent_class {
filter:alpha(opacity=50);
-moz-opacity:0.5;
-khtml-opacity: 0.5;
opacity: 0.5;
}
上面的幾個(gè)屬性分別是:
opacity: 0.5; 這是最重要的,因?yàn)樗荂SS標(biāo)準(zhǔn).該屬性支持Firefox, Safari和 Opera.
filter:alpha(opacity=50); 這個(gè)是為IE6設(shè)的,可取值在0-100,其它三個(gè)0到1.
-moz-opacity:0.5; 這個(gè)是為了支持一些老版本的Mozilla瀏覽器。
-khtml-opacity: 0.5; 這個(gè)為了支持一些老版本的Safari瀏覽器。
CSS透明度繼承問題
但CSS的透明屬性涉及到一個(gè)繼承問題,當(dāng)為父級元素設(shè)置透明度后,子元素將自動(dòng)繼承其透明度,即使你又為子元素指定透明度為1也是無效的。
對于子元素是文字的情況,我的解決方法一般是如果多少還能夠看清,就不管。另一個(gè)折衷的方法是,為文本子元素指定一個(gè)相對更深的顏色。也就是說,當(dāng)子元素繼承透明度后,所得到的文本顏色正好就是你想要的。前提是,這個(gè)顏色還有加深的可能,和需要詳細(xì)的計(jì)算顏色和透明度的值。
還有"取消透明度繼承”的說法,這個(gè)說法是不太準(zhǔn)確的,據(jù)我個(gè)人所知,沒有任何取消透明度繼承的方法。只能說,當(dāng)想要實(shí)現(xiàn)"多個(gè)元素覆蓋,只讓指定的元素透明”時(shí),可以使用的一些Hack。
搜了一下,找到一個(gè)不錯(cuò)的實(shí)現(xiàn)這種效果的方法 – 一個(gè)關(guān)于透明繼承度的問題,有興趣的朋友可以看看。原理很簡單,添加一個(gè)空元素作為透明層,和不想透明但是要實(shí)現(xiàn)覆蓋效果的元素為同級元素。父級元素使用position:relative定位; 兩個(gè)子元素使用position:absolute定位,實(shí)現(xiàn)覆蓋。
html代碼:
復(fù)制代碼 代碼如下:
<div class="div3"><div class="div4"></div>這里文字圖片都沒透明度了
<div class="div2">圖片</div>
</div>
CSS代碼
復(fù)制代碼 代碼如下:
body {
background-image: url(./105247.png);
background-repeat: repeat;
}
.div2{ width:100px; height:100px; background: url(./testbok.png)}
.div3{ width:200px; height:200px; position:relative; margin-top:10px}
.div4{ position:absolute; top:0; height:200px; width:200px; z-index:-1; background:#FFFFFF;filter:alpha(opacity=70);opacity:0.7;}
如果你外面的容器高度是不定的,那么只要把div3的高度設(shè)置的足夠的高度就可以了
這個(gè)方法有個(gè)很不好的缺點(diǎn):多了一個(gè)空白的div
相關(guān)文章
CSS3實(shí)例分享之多重背景的實(shí)現(xiàn)(Multiple backgrounds)
對于背景屬性background-image大家應(yīng)該已經(jīng)很熟悉了,通過這些屬性來控制背景圖片在容器中如何顯示,但我們也只能為容器提供一張背景圖片,如果我們想讓一個(gè)容器的背景用多張圖片實(shí)現(xiàn),那么我們該如何去做呢?再在容器里添加一些無用的元素嗎?2014-05-05
CSS濾鏡示范(filter)附源代碼(靜態(tài)濾鏡)
CSS濾鏡示范(filter)附源代碼(靜態(tài)濾鏡)...2006-08-08

