css 實現層半透明,且塊內文字不透明(兼容ie6等各種瀏覽器)


兼容各瀏覽器且效果一致,有兩種方法:

一、使用 opacity + Alpha Filter

其實見到這個的時候,我們的第一想法當然是 background + opacity,在不支持 opacity 的 IE 再使用 filter 的 alpha 濾鏡來實現。但是如果僅僅只是如此,這個最外層,最內層和文字,都被設置了 opacity(alpha 也是使用 opacity )導致文字模糊 。當然,我們可以給各層設置 opacity 變回來,但這是很麻煩的事,所以我這里將文字放在外層的p標簽內,再給一個相對定位,(也可給絕對定位)讓其顯示在半透明的div里面。

代碼如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>無標題文檔</title>
<style type="text/css">
*{margin:0 auto;}
body{background:url(006.jpg)}
.div{
filter:Alpha(opacity=40); background:#000;/*實現IE背景透明*/
-moz-opacity:0.4;/*支持3.5以下低的火狐背景透明*/
opacity:0.4;/*支持3.5以上火狐遨游,opera等背景透明*/
width:500px;
height:200px;
border:1px solid #FF0;
font-size:18px;
text-align:center;
font-weight:bold;
margin-top:120px;
}
p{position:relative;width:500px;height:200px;top:-200px;left:0;color:#FFF;}
</style>
</head>
<body>
<div class="div"></div>
<p>第一種:opacity + Alpha Filter:我是里面不透明的文字</p>
</body>
</html>

 

兼容標准瀏覽器及ie的6.0-9.0版本,預覽的效果為:

 

二、最佳實踐:rgba色彩 +Alpha Filter

其實我們可以選用 background-color: rgba() 來實現,同樣可以實現透明效果,並且只應用於當前元素,不繼承。而 IE 的 filter 卻會使內部文字變透明(ie8-ie6),雖然ie的filter有很多濾鏡效果,例如

(/* 

  1.  * filter 漸變濾鏡詳細用法,[參見這里] 
  2.  * StartColorStr 和 EndColorStr: 
  3.  *    #4c000000 是 30% 透明度的 #000000 的意思 
  4.  *    組成: # + 透明度 + 顏色 
  5.  *    算法: Math.floor(0.6 * 255).toString(16); 
  6.  */  
  7. .div{  
  8.     background:rgba(0, 0, 0, 0.3);  
  9.     filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0, StartColorStr='#4c000000', EndColorStr='#4c000000');  

),來避免內部文字透明,但是這種方法不常見,也需要轉化,這里我們不用不常見的filter效果,還是用相對定位,避免文字的透明。

代碼如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>無標題文檔</title>
<style type="text/css">
*{margin:0 auto;}
body{background:url(006.jpg)}
.div{
background:rgba(0, 0, 0, 0.4) none repeat scroll 0 0!important;/*實現FF背景透明*/
filter:Alpha(opacity=40); background:#000;/*實現IE背景透明*/
width:500px;
height:200px;
border:1px solid #FF0;
font-size:18px;
text-align:center;
font-weight:bold;
margin-top:120px;
}
:root .div{filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0, StartColorStr='#00000000', EndColorStr='#00000000'); }  
p{position:relative;width:500px;height:200px;top:-200px;left:0;color:#FFF;}
</style>
</head>
<body>
<div class="div"></div>
<p>第二種:最佳實踐:rgba色彩 +Alpha Filter,我是里面不透明的文字</p> </body> </html>

預覽的效果為:

如果沒有

:root .div{ filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0, StartColorStr='#00000000', EndColorStr='#00000000');  }  

IE9 的透明度竟然有 80%!! 這顯然不是我們想法的。原因是:IE9 也支持 filter,使得 filter 的結果和 background-color 疊加,所以是 80%。

這里我們可以利用IE HACK,單獨把 IE9 的 filter 變成透明度為 0 即可。高級瀏覽器大部分支持 :root 偽類,但不支持 filter 屬性,而 IE 只有 IE9 支持,所以我們可以這樣寫。至於ie10以及更高的版本還有待繼續測試。

 

ps:借鑒於高手的博客和自己的測試,有不對的地方,歡迎大家指正批評!

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM