【问题标题】:CSS Background Opacity [duplicate]CSS背景不透明度[重复]
【发布时间】:2012-05-12 11:17:28
【问题描述】:

我正在使用类似于以下代码的内容:

<div style="opacity:0.4; background-image:url(...);">
    <div style="opacity:1.0;">
        Text
    </div>
</div>

我希望这会使背景的不透明度为 0.4,文本的不透明度为 100%。相反,它们的不透明度均为 0.4。

【问题讨论】:

  • 这是我的解决方案:&lt;div style="background-image: url(...);"&gt;&lt;div style="background-color: rgba(255, 255, 255, 0.7);"&gt;Text&lt;/div&gt;&lt;/div&gt;

标签: html css opacity


【解决方案1】:

儿童继承不透明度。如果他们不这样做会很奇怪和不方便。

您可以使用半透明的 PNG 文件作为背景图片,或使用 RGBa(a 表示 alpha)颜色作为背景颜色。

例如,50% 褪色的黑色背景:

<div style="background-color:rgba(0, 0, 0, 0.5);">
   <div>
      Text added.
   </div>
</div>

【讨论】:

  • 更深入的教程可以在这里找到:robertnyman.com/2010/01/11/…
  • 是否可以通过单独的css规则设置alpha?
  • 不是,是单通道的颜色值,颜色值是分配给css规则的。
  • @jayarjo rgba(255,255,255,0.6) 相当于颜色中性淡出背景。
  • 说“孩子继承不透明度”是不正确的。他们没有。只是如果一个孩子包含在具有不透明度的父母中,则孩子将具有不透明度:1,但父母将其不透明度应用于自身,包括它的所有孩子。
【解决方案2】:

您可以使用伪元素::before or ::after 来获得半透明背景,并且只需一个容器即可。使用这样的东西:

<article>
  Text.
</article>

然后应用一些 CSS:

article {
  position: relative;
  z-index: 1;
}

article::before {
  content: "";
  position: absolute;
  top: 0; 
  left: 0;
  width: 100%; 
  height: 100%;  
  opacity: .4; 
  z-index: -1;
  background: url(path/to/your/image);
}

例子:

body {
  background: red;
}

article {
  position: relative;
  z-index: 1;
}

article:before {
  content: " ";
  position: absolute;
  top: 0; 
  left: 0;
  width: 100%; 
  height: 100px;  
  opacity: .4; 
  z-index: -1;
  background: url(https://31.media.tumblr.com/8ec07e49f33088c2e32c158ca4262eb2/tumblr_n5wav6Tz4R1st5lhmo1_1280.jpg);
}
<article>
  Text.
</article>

注意:您可能需要调整 z-index 值。

【讨论】:

  • 实际上它适用于所有新浏览器和 IE 9 及更高版本。看看这里example
  • 我更喜欢这个解决方案而不是 rgba 解决方案,因为它适用于图像和背景颜色。
  • 接受的答案是正确的,但这个创造性的解决方案更直接地回答了 OP。将背景图像编辑为半透明的 png/gif/etc.. 更加正确。不透明度需要更多的汁液来渲染。
  • @dudewad OP 希望将不透明度应用于背景图像。
  • 这可行,但是如果您想通过 javascript 更改伪元素的背景颜色 - 您将无法这样做,因为它是 shadow-dom 的一部分。
【解决方案3】:

以下方法可用于解决您的问题:

  1. CSS alpha 透明度方法(在 Internet Explorer 8 中不起作用):

    #div{background-color:rgba(255,0,0,0.5);}
    
  2. 根据您的选择使用透明的PNG图像作为背景。

  3. 使用以下 CSS 代码 sn-p 创建跨浏览器的 alpha 透明背景。这是#000000 @ 0.4% 不透明度的示例

    .div {
        background:rgb(0,0,0);
        background: transparent\9;
        background:rgba(0,0,0,0.4);
        filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#66000000,endColorstr=#66000000);
        zoom: 1;
    }
    .div:nth-child(n) {
        filter: none;
    }
    

有关此技术的更多详细信息,请参阅this,它有一个在线 CSS 生成器。

【讨论】:

  • css标签被称为background-color而不是background
  • @Wilt css 规则 background-color 是背景的子规则。与边框、边距和内边距类似,所有背景子规则都可以在一行中设置在背景内,而不是单独设置。在这种情况下使用背景是您想要的,因此您可以覆盖其他背景子规则。
【解决方案4】:

我会做这样的事情

<div class="container">
  <div class="text">
    <p>text yay!</p>
  </div>
</div>

CSS:

.container {
    position: relative;
}

.container::before {
    position: absolute;
    top: 0;
    left: 0;
    bottom: 0;
    right: 0;
    background: url('/path/to/image.png');
    opacity: .4;
    content: "";
    z-index: -1;
}

它应该工作。这是假设您需要有一个半透明的图像顺便说一句,而不是颜色(您应该只使用 rgba)。还假设您不能只在 Photoshop 中预先更改图像的不透明度。

【讨论】:

  • 你必须在 #bgd 上设置 z-index: -1 吗?否则它会使整个事情变得透明
  • 不是z-index,而是bgd div 元素需要在text 元素之前
  • pointer-events: none; 而不是 z-index: -1 上的 ::before 伪元素将允许鼠标单击它到达实际元素,同时仍然在顶部显示伪元素。
【解决方案5】:

你可以使用Sass'transparentize

我发现它是最有用且易于使用的。

transparentize(rgba(0, 0, 0, 0.5), 0.1) => rgba(0, 0, 0, 0.4)
transparentize(rgba(0, 0, 0, 0.8), 0.2) => rgba(0, 0, 0, 0.6) 

查看更多:#transparentize($color, $amount) ⇒ Sass::Script::Value::Color

【讨论】:

    【解决方案6】:
    .transbg{/* Fallback for web browsers that don't support RGBa */
    background-color: rgb(0, 0, 0);
    /* RGBa with 0.6 opacity */
    background-color: rgba(0, 0, 0, 0.6);
    /* For IE 5.5 - 7*/
    filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000);
    /* For IE 8*/
    -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)";}
    

    【讨论】:

      【解决方案7】:

      这是因为内部 div 的不透明度是它所嵌套的 div 的 100%(不透明度为 40%)。

      为了规避它,你可以做一些事情。

      您可以像这样创建两个单独的 div:

      <div id="background"></div>
      <div id="bContent"></div>
      

      为背景设置所需的 CSS 不透明度和其他属性,并使用 z-index 属性 (z-index) 设置 bContent div 的样式和位置。有了这个,您可以将 div 置于背景 div 之上,而不会影响其不透明度。


      另一个选项是RGBa。这将允许您嵌套 div 并仍然实现 div 特定的不透明度。


      最后一个选项是在您选择的所需图像编辑器中简单地制作您想要颜色的半透明 .png 图像,将 background-image 属性设置为图像的 URL,然后您就不必担心了关于乱搞 CSS 并失去嵌套 div 结构的能力和组织。

      【讨论】:

        【解决方案8】:

        只要确保前景的宽度和高度与背景相同,或者尝试具有顶部、底部、左侧和右侧属性。

        <style>
            .foreground, .background {
                position: absolute;
            }
            .foreground {
                z-index: 1;
            }
            .background {
                background-image: url(your/image/here.jpg);
                opacity: 0.4;
            }
        </style>
        
        <div class="foreground"></div>
        <div class="background"></div>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-07-13
          • 2018-01-07
          • 2013-11-30
          • 2013-04-23
          • 2011-10-16
          • 2013-02-05
          • 2018-06-22
          • 2021-05-13
          相关资源
          最近更新 更多