zoukankan      html  css  js  c++  java
  • rgba()与opacity的区别

    我们都知道在设置透明度的时候 ,IE低版本时,是不支持opacity的 ,只支持filter。所以一般在设置透明度时,我们会写上

    .opacity4 {
        opacity: 0.4;
        filter:alpha(opaity=40);
    }

    但是其实rgba()也可以设置透明度,那么rgba()到底是什么呢?

    rgba()表示 红 绿 蓝 alpha ,W3C指在原有的rgb颜色模型之后增加了 “alpha”参数,“可以让制定的颜色透明化”(rgb()上扩展的,其只可以设置颜色,而不能使设置的颜色透明化)

    例子:rgba(55,146,179,.5) ;   //rgb值为“55,146,179”,.5使设定的rgb值为50%透明,1为完全不透明,0为完全透明

    那么rgba()和opacity的区别是什么 ?

    rgba()和opacity都能实现透明效果,但最大的不同是opacity作用于元素,以及元素内的所有内容的透明度,而rgba()只作用于元素的颜色或其背景色。

    现在我们先来看一个 RGBA 和 Opacity 的对比实例,HTML 代码:

     1 <div class="example-opacity">
     2   <p>Opacity效果</p>
     3   <ul>
     4    <li class="opacity opacity1">100%</li>
     5    <li class="opacity opacity2">80%</li>
     6    <li class="opacity opacity3">60%</li>
     7    <li class="opacity opacity4">40%</li>
     8    <li class="opacity opacity5">20%</li>
     9    <li class="opacity opacity6">0</li>
    10   </ul>
    11   <p>CSS3的RGBA效果</p>
    12   <ul>
    13    <li class="rgba rgba1">1</li>
    14    <li class="rgba rgba2">0.8</li>
    15    <li class="rgba rgba3">0.6</li>
    16    <li class="rgba rgba4">0.4</li>
    17    <li class="rgba rgba5">0.2</li>
    18    <li class="rgba rgba6">0</li>
    19  </ul>
    20 </div>

    我们分别给这两上 ul 中的 li 应用相关样式, 在 li.opacity 中我用使用 CSS2 中的 Opacity 而在 li.rgba 中我们使用 CSS3 的 RGBA新属性。

    Opacity样式

     1 li.opacity{
     2   float: left;
     3   width: 50px;
     4   height: 50px;
     5 }
     6 li.opacity1 {
     7    background: rgb(255,255,0);
     8    opacity: 1;
     9    filter:alpha(opaity=100);
    10 }
    11 li.opacity2 {
    12   background: rgb(255,255,0);
    13   opacity: 0.8;
    14   filter:alpha(opaity=80);
    15 }
    16 li.opacity3 {
    17   background: rgb(255,255,0);
    18   opacity: 0.6;
    19   filter:alpha(opaity=60);
    20 }
    21 li.opacity4 {
    22   background: rgb(255,255,0);
    23   opacity: 0.4;
    24   filter:alpha(opaity=40);
    25 }
    26 li.opacity5 {
    27   background: rgb(255,255,0);
    28   opacity: 0.2;
    29   filter:alpha(opaity=20);
    30 }
    31 li.opacity6 {
    32   background: rgb(255,255,0);
    33   opacity: 0;
    34   filter:alpha(opaity=0);
    35 }

    RGBA样式:

    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);
    }

    来看看效果

    效果中我们可以看出,他们相同之处就是背景色完全是一样的,但区别就是一直让大家觉得头痛的问题,那就是opacity后代元素会随着一起具有透明性,所 以我们Opacity中的字随着透明值下降越来越看不清楚,而RGBA不具有这样的问题,但是其支持的浏览器中有一个占在大市场份额的IE不支持,这也就 是让我们需要去做兼容,(听到兼容二字大家是不是特烦,我也是的)希望IE早点能实现。

    那我们怎么解决IE下父元素用了opacity后子元素会所影响的问题呢?

    为了解决这样的问题我们需要增加一个空的div来专门放置使用透明的背景,然后通过使用绝对定位来实现我们需要的结果

    HTML结构

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

      现在我们需要提把 bg-content 和 bg 层重合起来,换句话说就是把透明背景层单独放在另外一个 div,然后把内容层和背景层重叠。换而言之,我们需要在 bg 这个 div 上设置透明色,而在 bg-content 这个 div 上放置内容,并且都使用定位,保证 bg 这个 div 在 bg-content 这个 div 下面。具体看看其 CSS 的变化:

     1 .bg-box {
     2   width: 200px;
     3   height: 100px;
     4   border: 1px solid #ccc;
     5   background: red;
     6   position: relative;
     7 }
     8 .bg {
     9   background: black;
    10   opacity: 0.5;
    11   filter:alpha(opaity=50);
    12   width: 100%;
    13   height: 50px;
    14   position: absolute;
    15   bottom: 0;
    16   left: 0;
    17   z-index: 1;
    18  }
    19  .bg-content {
    20    width: 100%;
    21    height: 50px;
    22    position: absolute;
    23    bottom: 0;
    24    left: 0;
    25    z-index: 10;
    26  }
    27  .bg-content p {
    28     padding: 5px 10px;
    29     color: white;
    30  }

      首先我们在 HTML 中把 bg 这个 div分 离出来了,让他和 bg-content 这个 div 变成兄弟关系,然后通过 CSS 把他们都定位在同一位置,只是 bg 放在了 bg-content 的下面(z-index)控制,另外在 bg 的 div 上应用了透明。看看这样一来我们有什么变化,效果如下:

  • 相关阅读:
    OpenVAS安装过程
    网络攻防环境搭建
    kali linux 安装过程
    20159217《网络攻防实践》第三周学习总结
    网络攻防实践第二周学习总结
    移动平台课程总结
    Android实践项目汇报
    性能测试四十六:Linux 从网卡模拟延时和丢包的实现
    性能测试四十五:性能测试策略
    性能测试四十四:性能优化思路
  • 原文地址:https://www.cnblogs.com/love0o/p/5010563.html
Copyright © 2011-2022 走看看