是否可以设置背景图像的不透明度而不影响子元素的不透明度?

例子

页脚中的所有链接都需要一个自定义项目符号(背景图像),自定义项目符号的透明度应该是50%。

HTML

<div id="footer">
    <ul>
        <li><a href="#">Link 1</a></li>
        <li><a href="#">Link 2</a></li>
        <li><a href="#">Link 3</a></li>
        <li><a href="#">Link 4</a></li>
        <li><a href="#">Link 5</a></li>
    </ul>
</div>  

CSS

#footer ul li {
    background: url(/images/arrow.png) no-repeat 0 50%;
}  

我的努力

我尝试将列表项的不透明度设置为50%,但随后链接文本的不透明度也是50% -似乎没有一种方法来重置子元素的不透明度:

#footer ul li {
    background: url(/images/arrow.png) no-repeat 0 50%;
    /* will also set the opacity of the link text */        
    opacity: 0.5;
}

我也尝试使用rgba,但这对背景图像没有任何影响:

#footer ul li {
    /* rgba doesn't apply to the background image */
    background: rgba(255, 255, 255, 0.5) url(/images/arrow.png) no-repeat 0 50%;
}

当前回答

关于这个问题,我找到了一个非常好的和简单的教程。我认为它很好用(虽然它支持IE,但我只是告诉我的客户使用其他浏览器):

CSS背景透明,不影响子元素,通过RGBa和过滤器

从那里你可以添加渐变支持,等等。

其他回答

我们可以通过使用rgba color来解决不透明度问题

例如"background-color: rgba(0,0,0,0.5)"

示例:

以前的Css:

 .login-card {
  // .... others CSS
  background-color: #121e1b;
  opacity: 0.5;
}

To :

 .login-card {
      // .... others CSS
      background-color: rgba(0, 0, 0, 0.5);
    }

另一种选择是CSS Tricks方法,在它后面插入一个与原始元素相同大小的伪元素,以伪造我们正在寻找的不透明背景效果。有时需要为伪元素设置高度。

div {
  width: 200px;
  height: 200px;
  display: block;
  position: relative;
}

div::after {
  content: "";
  background: url(image.jpg);
  opacity: 0.5;
  top: 0;
  left: 0;
  bottom: 0;
  right: 0;
  position: absolute;
  z-index: -1;   
}

如果你必须只设置项目符号的不透明度,为什么不直接在图像中设置alpha通道呢?顺便说一下,我不认为有一种方法可以通过css设置背景图像的不透明度而不改变整个元素(及其子元素)的不透明度。

这适用于所有浏览器

div {
 -khtml-opacity:.50; 
 -moz-opacity:.50; 
 -ms-filter:"alpha(opacity=50)";
  filter:alpha(opacity=50);
  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0.5);
  opacity:.50; 
}

如果您不希望透明度影响整个容器及其子容器,请检查此解决方案。你必须有一个绝对定位的子节点和一个相对定位的父节点。

在http://www.impressivewebs.com/css-opacity-that-doesnt-affect-child-elements/上查看演示

不幸的是,在写这个答案的时候,没有直接的方法来做到这一点。你需要:

使用半透明图像作为背景(容易得多)。 在你想要不透明的子元素旁边添加一个额外的元素(如div),添加背景,使其半透明后,将其定位在提到的子元素后面。