看完w3cschool《css 教程》中的《css 圖像透明/不透明》,你對(duì) CSS 中的半透明顏色可能已經(jīng)有了基礎(chǔ)的了解,CSS透明算得上是一種相當(dāng)流行的技術(shù),但在跨瀏覽器支持上,對(duì)于開發(fā)者來說,可以說是一件令人頭疼的事情。目前還沒有一個(gè)通用方法,以確保透明度設(shè)置可以在目前使用的所有瀏覽器上有效,但是總得來說它是一個(gè)巨大的變革。關(guān)于CSS 透明度,有一點(diǎn)需要注意的是,它雖然使用了很多年,但它一直以來都不是一個(gè)標(biāo)準(zhǔn)屬性,它是一種非標(biāo)準(zhǔn)技術(shù),應(yīng)該是CSS3規(guī)范的一部分。
<div class="box"></div>
<style>
.box{width:300px; height:200px; margin:0 auto; boxder:1px solid #ccc; background:#000; filter:alpha(opacity:30); opacity:0.3; -moz-opacity:0.3;-khtml-opacity: 0.3}
</style>
其中background:#000; filter:alpha(opacity:30); opacity:0.3;為關(guān)鍵代碼,當(dāng)opacity值為1時(shí),表示完全不透明,為0時(shí)表示完全透明。如何用CSS實(shí)現(xiàn)背景半透明效果?我們一般的做法是用兩個(gè)層,一個(gè)用于放文字,另一個(gè)用于做透明背景,因?yàn)橥该鳛V鏡的效果會(huì)影響到里面的內(nèi)容。
不過如果你只需求在IE下實(shí)現(xiàn),使用CSS實(shí)現(xiàn)透明度有很多方案,這里只是介紹大家通用的方法:
1. .transparent_class {
2. filter:alpha(opacity=50);//標(biāo)準(zhǔn)的css透明度,在大部分的標(biāo)準(zhǔn)瀏覽器Firefox, Safari, and Opera都有效
3. opacity:0.5;//兼容IE解決方案
4. -moz-opacity:0.5;//老的Mozilla browsers如NetscapeNavigator.幾乎沒有可以不需要
5. -khtml-opacity:0.5;//兼容老的Safari (1.x) 版本,很少可以不用
6. }
1. <html>
2. <head>
3. <title></title>
4. <metahttp-equiv="Content-Type"content="text/html;charset=UTF-8">
5. <style>
6. div{width:100px;height:100px;background-color:red}
7. </style>
8. <script>
9. window.onload =function(){
10. var myDiv = document.getElementById("transparent_div");
11. myDiv.onclick =function(){
12. myDiv.style.opacity =".4";//針對(duì)所有通用瀏覽器
13. myDiv.style.filter ="alpha(opacity=40)";//針對(duì)IE瀏覽器
14. }
15. }
16. </script>
17. </head>
18. <body>
19. <divid="transparent_div">this istransparent div</div>
20. </body>
21.</html>
1. $("#transparent_div").css({ opacity:.4});
使用jQuery還可以輕松實(shí)現(xiàn)動(dòng)畫效果:1. $("#transparent_div").click(function(){
2. $("#transparent_div").animate({
3. opacity:.4
4. },1000,function(){
5. alert("動(dòng)畫完成");
6. });
7. });
一、舊的Opacity設(shè)置
#myElement { -khtml-opacity: .5; -moz-opacity: 0.5; }
-khtml-opacity設(shè)置是針對(duì)舊版本的Webkit渲染引擎,這種專用屬性現(xiàn)在已經(jīng)過時(shí)了,除非你還有需要兼容Safari 1.x.的用戶。
第二行使用專用屬性 -moz-opacity是 為了兼容Mozilla渲染引擎的早期版本,以及追溯到Netscape Navigator。 Firefox 0.9以后就不要求使用-moz-opacity屬性,F(xiàn)irefox 3.5(現(xiàn)在使用Gecko引擎)已經(jīng)不在支持這個(gè)屬性。#myElement { opacity: .7; }
上述語法將設(shè)置一個(gè)元素為70%不透明(或30%透明)。設(shè)置opacity:1將使元素不透明,而設(shè)置opacity:0將使得元素完全不可見。你 只要記住“opacity”等同于“不透明”就很容易記住了,opacity值越小就越接近透明。#myElement { filter: alpha(opacity=40); }
上面的CSS使用專用的filter屬性來設(shè)置IE6-8透明度。對(duì)于IE6和IE7需要注意:為了使得透明設(shè)置生效,元素必須是“有布局”。一個(gè)元素 可以通過使用一些CSS屬性來使其被布局,有如width和position。#myElement { filter: progid:DXImageTransform.Microsoft.Alpha(opacity=40);
/* 第一行在IE6, IE7和IE8下有效 */
-ms-filter: “progid:DXImageTransform.Microsoft.Alpha(opacity=40)”;
/*第二行僅在IE8下有效 */}
第一行代碼針對(duì)當(dāng)前所有IE版本,第二行僅針對(duì)IE8。<div style="opacity:0.4; background-image:url(...);">
<div style="opacity:1.0;">
顯示文字
</div>
</div>
文字元素的透明度也會(huì)是0.4。于是想一想,如果有方法只改變背景的透明度就能解決此問題了。div style="background-color:rgba(0, 0, 0, 0.4)">
<div>
顯示文字
</div>
</div>
opacity: 0.8;
-moz-opacity: 0.8;
filter: alpha(opacity=80);
但在此層里面的層都透明了,怎么讓里面的層不透明?filter:Alpha(Opacity="0",FinishOpacity="75",Style="2")
但是因?yàn)闉V鏡的兼容性問題,最好是不要用,可以用ps做圖的時(shí)候,把背景調(diào)一下透明度后導(dǎo)成png格式的圖片就行了,如果透明的背景顏色一樣的話,那么你可以切成1px*1px大小的png圖片平鋪,gif只支持透明度100%也就是完全透明的圖片,半透明的不支持,而png格式的圖片則不存在什么問題,唯一會(huì)有問題的地方就只是IE6不兼容透明png格式而已。