网页技术交流
 
发新帖
楼主: 零五零八
查看: 696|回复: 0

[使用教程] 详解CSS-opacity子元素继承父元素透明度的解决方法

[复制链接]
零五零八 发表于 2020-11-18 20:03:57 | 显示全部楼层
本帖最后由 零五零八 于 2020-11-18 20:06 编辑

  在写项目页面的过程中,遇到子元素继承父元素透明度的问题,查找了好多文档给出的都是第一种方法,这种方法主要解决简单场景 的,而对于设置复杂的background时,该方法不再适用。.


分析原因:    

  父元素背景颜色设置透明度opacity:0.5,子元素会继承,给子元素设置opacity:1,子元素的透明度也是在父元素0.5的基础上设置的。


第一种方法:

  父元素背景颜色设置透明度时,避免使用background:#000;opacity:0.5,建议使用background:rgba(0,0,0,0.5)


第二种方法:

   如果设置背景色为渐变色等这种复杂背景,第一种方法就不在适用。




  1. background-image: linear-gradient(-180deg, rgba(20,20,20,0.00) 19%, #303030 100%);
  2. opacity: 0.5;


复制代码


  因为子元素会继承父元素的opacity属性,我们让它不成为子元素。新增一个子元素,将其绝对定位到父元素位置,然后在该元素上设置背景色与透明度。


  1. <div class="container">
  2.     <div class="content">
  3.         <p>我是class为content的DIV</p>
  4.         <p>我的背景是class为background的背景</p>
  5.         <p>通过相对定位和绝对定位,我把class为background的DIV移动到了我的位置。</p>
  6.         <p>同时通过我的较大的z-index浮在了它的上面。 :)</p>
  7.     </div>
  8.     <div class="background"></div>
  9. </div>
复制代码

  1. .container {
  2.     width: 300px;
  3.     height: 250px;
  4.     color: #fff;
  5.     position:relative;
  6. }
  7. .content {
  8.     position:relative;
  9.     z-index:5;
  10.     width: 100%;
  11.     height: 100%;
  12.     overflow: hidden;
  13. }
  14. .background {
  15.     background-color: #37a7d7;
  16.     position:absolute;
  17.     top:0px;
  18.     left:0px;
  19.     width:100%;
  20.     height:100%;
  21.     z-index:1;
  22.     /*兼容IE7、8 */
  23.        -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
  24.     filter: alpha(opacity=50);
  25.     opacity:.5;
  26. }
复制代码





快速回复 返回顶部 返回列表