CSS3 rgba

时间:2021-05-29 16:56:58

复制粘贴:

<!DOCTYPE html > <html > <head> <meta charset="utf-8"> <title>标题</title> <script type="text/javascript" src="../js/jquery-1.4.min.js"></script>
<style type="text/css">
textarea{display: block; width:500px;height:500px; margin:100px auto; }
ul{list-style: none;}
li.opacity {float: left; width: 50px; height: 50px; }
li.opacity1{background: rgb(255,255,0); opacity: 1 ; filter:alpha(opacity=100); }
li.opacity2{background: rgb(255,255,0); opacity: 0.8; filter:alpha(opacity=80); }
li.opacity3{background: rgb(255,255,0); opacity: 0.6; filter:alpha(opacity=60); }
li.opacity4{background: rgb(255,255,0); opacity: 0.4; filter:alpha(opacity=40); }
li.opacity5{background: rgb(255,255,0); opacity: 0.2; filter:alpha(opacity=20); }
li.opacity6{background: rgb(255,255,0); opacity: 0 ; filter:alpha(opacity=0); }

li.rgba {float: left; width: 50px; height: 50px; }
li.rgba1 {background: rgba(255,255,0,1); }
li.rgba2 {background: rgba(255,255,0,0.8); }
li.rgba3 {background: rgba(255,255,0,0.6); }
li.rgba4 {background: rgba(255,255,0,0.4); }
li.rgba5 {background: rgba(255,255,0,0.2); }
li.rgba6 {background: rgba(255,255,0,0); }

p {padding: 5px 10px; color: white; }
/*问题的传在*/
.bg-box {top: 200px; width: 200px; height: 100px; border: 1px solid #ccc; background: red; position: relative; }
.bg {background: black; opacity: 0.5; filter:alpha(opacity=50); width: 100%; height: 70px; position: absolute; bottom: 0; left: 0; }

/*问题的解决1:
在html中把bg这个div分离出来了,让他和bg-content这个div变成兄弟关系,然后通过CSS把他们都定位在同一位置,只是bg放在了bg-content的下面(z-index)控制,另外在bg的div上应用了透明
*/
.bg-box2 {top: 200px; width: 200px; height: 100px; border: 1px solid #ccc; background: red; position: relative; }
.bg2 {background: black; opacity: 0.5; filter:alpha(opacity=50); width: 100%; height: 50px; position: absolute; bottom: 0; left: 0; z-index: 1; }
.bg-content2 {width: 100%; height: 70px; position: absolute; bottom: 0; left: 0; z-index: 10; }

/*问题的解决2:
只要在bg-content中应用一个background:rgba();就能有上面那种效果了
*/
.bg-box3 {top: 200px; width: 200px; height: 100px; border: 1px solid #ccc; background: red; position: relative; }
.bg-content3 {width: 100%; height: 70px; position: absolute; bottom: 0; left: 0; background: rgb(0,0,0); background: rgba(0, 0, 0,0.5);
/*下面是ie兼容*/
-ms-filter: "progid:DXImageTransform.Microsoft.gradient(GradientType=1,startColorstr=#80000000,endColorstr=#80000000)"; /*Filter for IE8 */
filter: progid:DXImageTransform.Microsoft.gradient(GradientType=1,startColorstr=#80000000, endColorstr=#80000000); /*Filter for older IEs */
}

</style><script type="text/javascript">
</script>
</head> <body>
<div class="example-opacity">
<p>Opacity效果</p>
<ul>
<li class="opacity opacity1">100%</li>
<li class="opacity opacity2">80%</li>
<li class="opacity opacity3">60%</li>
<li class="opacity opacity4">40%</li>
<li class="opacity opacity5">20%</li>
<li class="opacity opacity6">0</li>
</ul>
<p>CSS3的RGBA效果</p>
<ul>
<li class="rgba rgba1">1</li>
<li class="rgba rgba2">0.8</li>
<li class="rgba rgba3">0.6</li>
<li class="rgba rgba4">0.4</li>
<li class="rgba rgba5">0.2</li>
<li class="rgba rgba6">0</li>
</ul>
</div>

<div class="bg-box">
<div class="bg">
<div class="bg-content">
<p>我是bg的后代元素,我不想我的前景有任何透明!怎么办?</p>
</div>
</div>
</div>

<div class="bg-box2">
<div class="bg2"></div>
<div class="bg-content2">
<p>我解决了前景有透明!</p>
</div>
</div>

<div class="bg-box3">
<div class="bg-content3">
<p>我是用rgba()解决了前景有透明</p>
</div>
</div>

<textarea style="">
效果中我们可以看出,他们相同之处就是背景色完全是一样的,但区别就是一直让大家觉得头痛的问题,那就是opacity后代元素会随着一起具有透明性,所以我们Opacity中的字随着透明值下降越来越看不清楚,而RGBA不具有这样的问题,但是其支持的浏览器中有一个占在大市场份额的IE不支持,这也就是让我们需要去做兼容,(听到兼容二字大家是不是特烦,我也是的)希望IE早点能实现。
那为什么不使用opacity而要使用rgba呢????
在RGBA还没有出世前,我们都是使用opacity来做透明,但这里存在一个问题,就是我们在父元素中使用了opacity,那么其垢代元素都会受其影响,我想这个问题大家都有碰到过,为了解决这样的问题我们需要增加一个空的div来专门放置使用透明的背景,然后通过使用绝对定位来实现我们需要的结果。为了更好的理解我们在这里来看一个使用opacity的实例

综合上面的所述,我们规纳一个RGBA在实际应用中的模式
.rgba {
background: rgb(0,0,0); /*The Fallback color,这里也可以使用一张图片来代替*/
background: rgba(0, 0, 0,0.5);
-ms-filter: "progid:DXImageTransform.Microsoft.gradient(GradientType=1,startColorstr=#80000000,endColorstr=#80000000)"; /*Filter for IE8 */
filter: progid:DXImageTransform.Microsoft.gradient(GradientType=1,startColorstr=#80000000, endColorstr=#80000000); /*Filter for older IEs */
}

</textarea>
</body>
</html>