我不想从CSS中的父级继承子不透明度

Lio*_*ing 349 css

我不想从CSS中的父级继承子不透明度.

我有一个div是父,我在第一个div里面有另一个div,就是孩子.

我想在父div中设置opacity属性,但我不希望子div继承opacity属性.

我怎样才能做到这一点?

Dan*_*ows 573

不使用不透明度,而是使用rgba设置背景颜色,其中"a"是透明度级别.

所以代替:

background-color: rgb(0,0,255); opacity: 0.5;
Run Code Online (Sandbox Code Playgroud)

使用

background-color: rgba(0,0,255,0.5);
Run Code Online (Sandbox Code Playgroud)

  • 这仅适用于背景颜色,除非文本颜色支持alpha通道?另一个类似的背景解决方案当然是强大的`.p​​ng` :) (7认同)
  • @Madmartigan是的,如果您希望父div中的文本具有不透明度,则必须使用span设置文本的不透明度.您可以使用polyfill使其向后兼容,或者您​​可以使用png. (2认同)

Bor*_*sky 60

不透明度实际上并未在CSS中继承.这是一个后期渲染组变换.换句话说,如果a <div>具有不透明度设置,则将div及其所有子项渲染到临时缓冲区中,然后将整个缓冲区合成到具有给定不透明度设置的页面中.

你想在这里做什么取决于你正在寻找的确切渲染,这个问题并不清楚.

  • 如果它是遗传的,它们会变轻.尝试在所有后代上实际设置`opacity:0.7`以查看继承的外观.就像我说的那样,相反的是,不透明度被应用于整个"元素及其所有后代"组作为一个单元而不是继承. (49认同)
  • 在Chrome 26.0.1410.63中,这是错误的.在`div#container`上设置'opacity:.7;`会使每个子元素 - 从`ul` /`li`到`img`再到'p` - 也具有相同的不透明度.它肯定是继承的. (2认同)

小智 27

正如其他人在此和其他类似线程中提到的那样,避免此问题的最佳方法是使用RGBA/HSLA或使用透明PNG.

但是,如果你想要一个荒谬的解决方案,类似于在这个帖子(也是我的网站)的另一个答案中链接的解决方案,这里是我写的一个全新的脚本,它自动修复了这个问题,名为thatNotYoChild.js:

http://www.impressivewebs.com/fixing-parent-child-opacity/

基本上它使用JavaScript从父div中删除所有子元素,然后将子元素重新定位到它们应该的位置,而不再实际成为该元素的子元素.

对我而言,这应该是最后的手段,但我认为如果有人想这样做的话,写下这样做的东西会很有趣.


tsv*_*iko 18

如果您的父级是透明的并且您希望您的孩子是相同的,但只是定义(例如,覆盖选择下拉列表的用户代理样式),这是一个小技巧:

.parent {
     background-color: rgba(0,0,0,0.5);
}

.child {
     background-color: rgba(128,128,128,0);
}
Run Code Online (Sandbox Code Playgroud)


Ama*_*man 11

子元素的不透明度是从父元素继承的.

但我们可以使用css position属性来完成我们的成就.

文本容器div可以放在父div之外,但绝对定位可以预测所需的效果.

理想要求------------------ >>>>>>>>>>>>

HTML

            <div class="container">       
              <div class="bar">
                  <div class="text">The text opacity is inherited   from the parent div    </div>
              </div>
            </div>
Run Code Online (Sandbox Code Playgroud)

CSS

               .container{
                position:relative;
                                   }
           .bar{
               opacity:0.2;
               background-color:#000;
               z-index:3;
               position:absolute;
               top:0;
               left:0;
              }

              .text{
                color:#fff;

               }
Run Code Online (Sandbox Code Playgroud)

输出: -

文本的继承不透明度(文本颜色为#000;但不可见.)

由于从父div继承不透明度,因此文本不可见.

解决方案------------------- >>>>>>

HTML

       <div class="container">  
         <div class="text">Opacity is not inherited from parent div "bar"</div>
         <div class="bar"></div>
       </div>
Run Code Online (Sandbox Code Playgroud)

CSS

               .container{
                position:relative;
                                   }
           .bar{
               opacity:0.2;
               background-color:#000;
               z-index:3;
               position:absolute;
               top:0;
               left:0;
              }

              .text{
                color:#fff;
                z-index:3;
                position:absolute;
               top:0;
               left:0;  
               }
Run Code Online (Sandbox Code Playgroud)

输出:

不继承

文本与背景颜色相同,因为div不在透明div中


Ric*_*man 7

这个问题没有定义背景是颜色还是图像,但由于@Blowski 已经回答了彩色背景,下面的图像有一个技巧:

background: linear-gradient(rgba(0,0,0,.6), rgba(0,0,0,.6)), url('image.jpg');
Run Code Online (Sandbox Code Playgroud)

通过这种方式,您可以操纵不透明度的颜色,甚至可以添加漂亮的渐变效果。

background: linear-gradient(rgba(0,0,0,.6), rgba(0,0,0,.6)), url('image.jpg');
Run Code Online (Sandbox Code Playgroud)
.wrapper {
  width: 630px;
  height: 420px;
  display: table;
  background: linear-gradient(
    rgba(0,0,0,.8), 
    rgba(0,0,0,.8)), 
    url('http://cdn.moviestillsdb.com/sm/35bc3c6a2b791425de6caf8b9391026e/rambo-iii.jpg');
 }

h1 {
  display: table-cell;
  vertical-align: middle;
  text-align: center;
  color: #fff;
  }
Run Code Online (Sandbox Code Playgroud)


liv*_*dar 5

没有一种万能的方法,但我发现特别有用的一件事是为 div 的直接子级设置不透明度,除了您想要保持完全可见的那个。在代码中:

<div class="parent">
    <div class="child1"></div>
    <div class="child2"></div>
    <div class="child3"></div>
    <div class="child4"></div>
</div>
Run Code Online (Sandbox Code Playgroud)

和CSS:

div.parent > div:not(.child1){
    opacity: 0.5;
}
Run Code Online (Sandbox Code Playgroud)

如果父级上有背景颜色/图像,您可以通过应用 alpha 滤镜来修复 rgba 和背景图像的颜色不透明度