天天看點

css如何實作背景透明,文字不透明?

背景透明,文字不透明的解決方法:

  1. 為元素添加一個絕對定位的子元素,設定大小和該元素一樣,把半透明加在絕對定位元素上作為遮罩,z-index設定到最底部,達到背景半透明效果。
  2. 使用CSS3新屬性rgba。

實作透明的方法:

  • css3的opacity,取值從 0 到 1,如opacity : 0.5,IE9及以上版本和标準浏覽器都支援。IE8 以及更早的版本支援替代的 filter 屬性,例如:filter : Alpha(opacity=50)。
  • css3的rgba(red, green, blue, alpha),alpha的取值從 0 到 1,如background-color : rgba(255,255,255,0.5)。

谷歌浏覽器下測試各種屬性,如下圖。

<div style="width:150px;height:100px;float:left;background-color:#ff0000;"><div>沒有設定透明度</div></div>
<div style="width:150px;height:100px;float:left;margin-left:10px;background-color:#ff0000;opacity:0.5;"><div>用opacity設定透明度</div></div>
<div style="width:150px;height:100px;float:left;margin-left:10px;background-color:rgba(255,0,0,0.5);"><div>用rgba設定透明度</div></div>
<div style="width:150px;height:100px;float:left;margin-left:10px;background-color:#ff0000;filter:Alpha(opacity=50);"><div>IE專屬filter設定透明度</div></div>      
css如何實作背景透明,文字不透明?

                                                                             圖1

css3的opacity:

由圖1可以看出,使用opacity屬性的第二個方塊其子元素包含的文字也變成了半透明。

注釋:設定opacity元素的所有後代元素會随着一起具有透明性,一般用于調整圖檔或者子產品的整體不透明度,相容IE9及以上版本和标準浏覽器。

css3的rgba:

由圖1可看出,設定rgba的方塊可實作背景色透明,并且子元素包含的文字不透明。

注釋:IE9+、Firefox 3+、Chrome、Safari 以及 Opera 10+都支援。

IE的filter : Alpha(opacity=x):

  • 僅支援IE6、7、8、9,在IE10版本被廢除。
css如何實作背景透明,文字不透明?
  • 在IE6、7中,需要激活IE的haslayout屬性(如:*zoom:1或者*overflow:hidden),讓它讀懂filter:Alpha。
  • 在IE6、7、8中,設定了filter:Alpha的元素,父元素設定position : static(預設屬性),其子元素為相對定位position : relative,可讓子元素不透明。
css如何實作背景透明,文字不透明?
css如何實作背景透明,文字不透明?

全相容:

IE6 IE7 IE8 IE9 标準浏覽器
rgba
filter : Alpha

隻支援IE6、7、8浏覽器的css hack:

     /* 隻支援IE6、7、8 */

     @media \0screen\,screen\9 {...}

DEMO:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>背景透明,文字不透明</title>
<style>
*{
    padding: 0;
    margin: 0;
}
body{
    background-color: #ff7a74;
    padding: 100px;
}
.test-opacity{
    padding: 25px;
    background-color: rgba(255,255,255,0.5);/* IE9、标準浏覽器、IE6和部分IE7核心的浏覽器(如QQ浏覽器)會讀懂 */
}

/* 隻支援IE6、7、8 */
@media \0screen\,screen\9 {
    .test-opacity{
        background-color: #fff;
        filter: Alpha(opacity=50);
        *zoom:1;/* 激活IE6、7的haslayout屬性,讓它讀懂Alpha */
    }
    .test-opacity p{
        position: relative;/* 設定子元素為相對定位,可讓子元素不繼承Alpha值 */
    }
}
</style>
<body>

    <div class="test-opacity">
        <p>背景透明,文字不透明</p>
    </div>

</body>
</html>