Css 在不影响子元素的情况下设置背景图像的不透明度

Css 在不影响子元素的情况下设置背景图像的不透明度,css,opacity,Css,Opacity,是否可以设置背景图像的不透明度而不影响子元素的不透明度 例子 页脚中的所有链接都需要自定义项目符号(背景图像),自定义项目符号的不透明度应为50% HTML 我试过的 我尝试将列表项的不透明度设置为50%,但是链接文本的不透明度也是50%,并且似乎没有办法重置子元素的不透明度: #footer ul li { background: url(/images/arrow.png) no-repeat 0 50%; /* will also set the opacity of th

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

例子 页脚中的所有链接都需要自定义项目符号(背景图像),自定义项目符号的不透明度应为50%

HTML 我试过的 我尝试将列表项的不透明度设置为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%;
}

如果必须只为项目符号设置不透明度,为什么不直接在图像中设置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; 
}
如果不希望透明度影响整个容器及其子容器,请选中此变通方法。必须有绝对定位的子级和相对定位的父级


> P>检查演示。如果你使用图像作为一个子弹,你可以考虑:在伪元素之前。
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;   
}
#页脚ul li{
}
#页脚ulli:之前{
内容:url(/images/arrow.png);
过滤器:α(不透明度=50);
过滤器:progid:DXImageTransform.Microsoft.Alpha(不透明度=0.5);
不透明度:.50;
}

仅添加到上述内容。您可以将alpha通道与新的颜色属性一起使用,例如rgba(0,0,0)ok,因此它是黑色的,但不透明度为零,因此作为父级,它不会影响子级。这只适用于Chrome、FF、Safari和…I thin O


将十六进制颜色转换为RGBA

将图像放入图像编辑器,降低不透明度,将其另存为.png并使用它。

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


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

要真正进行微调,我建议在浏览器目标包装中放置适当的选择。当我无法让IE7和IE8“与他人友好相处”时,这是唯一对我有效的方法(因为我目前在一家软件公司工作,该公司继续支持IE7和IE8)

/*所有浏览器的颜色或背景图像,当然*/
#我的背景{
背景色:#666;
}
/*在不中断IE7-8的情况下瞄准chrome和safari*/
@媒体屏幕和(-webkit最小设备像素比:0){
#我的背景{
-khtml不透明度:.50;
不透明度:.50;
}
}
/*在不中断IE的情况下瞄准firefox*/
@-moz文档url-前缀(){
#我的背景{
-moz不透明度:.50;
不透明度:0.5;
}
}
/*最后才不会爆炸*/
#我的背景{
不透明度:.50;
过滤器:α(不透明度=50);
过滤器:progid:DXImageTransform.Microsoft.Alpha(不透明度=0.5);
}
我可能在上面的代码中有冗余——如果有人希望进一步清理它,请随意

为了适用于IE7/8,“filter”属性需要一个整数来表示不透明度的百分比,而不是双精度

filter: progid:DXImageTransform.Microsoft.Alpha(opacity=50);

备注:我将此作为一个答案发布,因为这样,编辑至少需要6个更改的字符。

不幸的是,在撰写此答案时,没有直接的方法可以做到这一点。您需要:

  • 使用半透明图像作为背景(更容易)
  • 在需要不透明的子对象旁边添加一个额外的元素(如div),向其添加背景,使其半透明后,将其放置在所述子对象后面
  • Hack with opacity.99(小于1)创建z索引上下文,因此您不必担心全局z索引值。(尝试将其删除,并查看下一个演示中父包装具有正z索引时会发生什么情况。)
    如果您的元素已经有了z索引,那么您就不需要这种攻击


    .

    您可以将图像放在div:after或div:before中,并在“虚拟div”上设置不透明度

    在这里找到


    你可以试试这个代码。我想它会成功的。您可以访问您可以使用CSS
    linear-gradient()
    rgba()

    div{
    宽度:300px;
    高度:200px;
    背景:线性梯度(rgba(255255.5),rgba(255255.5)),url(“https://i.imgur.com/xnh5x47.jpg");
    }
    跨度{
    背景:黑色;
    颜色:白色;
    }
    Hello world.
    另一种方法是在其后面插入一个与原始元素大小相同的伪元素,以伪造我们正在寻找的不透明背景效果。有时需要为伪元素设置一个高度

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

    我们可以通过使用rgba颜色

    e、 g
    “背景色:rgba(0,0,0,0.5)”

    样本:

    以前的Css:

     .login-card {
      // .... others CSS
      background-color: #121e1b;
      opacity: 0.5;
    }
    
     .login-card {
          // .... others CSS
          background-color: rgba(0, 0, 0, 0.5);
        }
    
    至:

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

    过滤器只是IE解决方案,我认为这可能是最好的解决方案。这是一个纯CSS解决方案。还可以使用
    *zoom:expression(…)(请参阅),但IE7终于成为通行证。我认为您需要将“上述代码中的引号”更改为“以便在直接复制粘贴时工作。对于“如何使子元素不继承父元素的CSS不透明度值”这一问题,这仍然是人们找到的最佳解决方案吗"?  我需要这个孩子真正成为一个孩子。。在文档流中。。。而且也不想为此引入javascript/flash;更喜欢纯CSS。我有50%不透明的父级
  • ,包含我想要100%不透明的子级图像。将
  • 设置为
    位置:相对和img至
    位置:绝对
    不允许我覆盖img上继承的不透明度,并且我不能对
  • 本身使用绝对定位(这太乱了;-)。用Javascrip
     .login-card {
      // .... others CSS
      background-color: #121e1b;
      opacity: 0.5;
    }
    
     .login-card {
          // .... others CSS
          background-color: rgba(0, 0, 0, 0.5);
        }