【问题标题】:Disable opacity on child element when parent element has opacity当父元素具有不透明度时,禁用子元素的不透明度
【发布时间】:2020-09-19 17:15:18
【问题描述】:

我有一个不透明度为 0.8 的 容器。在背景中,我有一张通过内容 div 闪耀的图像。 现在,我在这个容器中有一张我客户的照片。问题是,它使用父元素的不透明度,因为此图像的不透明度只是相对于容器而不是相对于主体。

我有这个代码:

<div id="contentContainer" style="background: #FFFFFF; opacity: 0.8">
    Content ...
    <img src="..." style="opacity: 1.0" alt="Photo" />
</div>

这不起作用,如下所述。

有人有想法吗?

【问题讨论】:

  • 这是你的jsfiddle.net/yT6nG/134 ??你需要什么??
  • This 可能会也可能不会帮助你 ;-)
  • background: rgba(0, 0, 0, 0.5); 将是您最好的。 rgba 分解:0, 0, 0, => 颜色红色、绿色、蓝色值。 a 0.5 => 这是颜色 alpha 或 opacity。
  • 感谢 rgba 提示 - 只是将 rgb 值更改为白色,并将 alpha 替换为我的不透明度。查看我编辑的问题
  • 干得好伙伴,如果您关心,需要考虑的一件事是针对 IE 8 及以下用户。不支持 rgba 和不透明度。

标签: html css


【解决方案1】:

通过将其更改为以下内容解决了此问题:

<div id="contentContainer" style="background: rgba(255,255,255,0.8);">
    Content ...
    <img src="..." alt="Photo" />
</div>

仅使用 rgba alpha 而不是不透明度。 现在可以了。

【讨论】:

    【解决方案2】:

    正如其他答案所述,使用不透明度是不可能的,也就是说,使用这种方法。

    解决方法/破解方法是将position: relative; z-index:2; 添加到父元素contentContainer。然后添加另一个具有不透明度和其他内容的元素。如果您将图像作为背景,这将特别有用

    所以你的标记应该看起来像这样:

    HTML

    <div id="contentContainer">
        Content ...
        <img src="..." alt="Photo" />
        <span id="contentBackground"></span>
    </div>
    

    CSS

    #contentContainer { position: relative; z-index 2; }
    #contentBackground {
        position: absolute;
        display: block;
        z-index: 1;
        top: 0;
        right: 0;
        bottom: 0;
        left: 0;
        background: /* stuff */;
    }
    

    注意z-index 属性。这些对于确保背景元素位于父元素下方并且不与防止点击事件的内容重叠非常重要。

    此方法也可用于您需要为其添加 content: ''; 的伪元素(:before:after

    【讨论】:

      【解决方案3】:

      这可能有助于其他想要使用不透明度防止某个子元素变得不透明的人。

      您可以使用:not() 选择器。 拿这个样本。

      <style type="text/css">
          .redbg{
              background-color:red;
          }
          .sample1 :not(.NonOpaque){
              opacity:0.5;
          }
          .sample2:not(.NonOpaque){
              opacity:0.5;
          }
      </style>
      
      <div style="background-color:rgb(63,72,204); padding:15px; margin:15px;">
          <div class="redbg sample1">
              <div>
                  SAMPLE 1.
              </div>
              <div class="NonOpaque">
                  I am not Opaque.
                  Blah! Blah! Blah!
              </div>
              <div>
                  I am Opaque.
                  Blah! Blah! Blah!
              </div>
              <div>
                  I am Opaque.
                  Blah! Blah! Blah!
              </div>
          </div>
      </div>
      
      <div style="background-color:rgb(63,72,204); padding:15px; margin:15px;">
          <div>SAMPLE 2.</div>
          <div class="redbg sample2 NonOpaque">
              <div style="padding:5px; margin:3px;">
                  I am not Opaque.
                  Blah! Blah! Blah!
              </div>
          </div>
          <div class="redbg sample2">
              <div style="padding:5px; margin:3px;">
                  We are all Opaque.
              </div>
          </div>
      </div>
      

      输出:

      【讨论】:

      • 我不明白为什么这个解决方案没有更多的选票。 :not() 完全符合示例所显示的内容。这个解决方案对我有用。
      • 这不能回答问题。
      • @Gilbert:这不能回答问题。问题涉及子-父关系,特别是当父级具有该属性集时,子级无法表达其计算的样式不透明度。这个答案甚至没有承认问题,更不用说解决问题了。应该让选票下降,而不是上升。尝试设置最外层(蓝色)
        的“不透明度”,然后您就会看到问题所在。此外,作者似乎将“不透明”一词的含义颠倒过来也无济于事。好像它的意思是“透明”。
      • 我正在应用这个,但我的 div 元素的一半消失了,.enabled 仍然被禁用。有什么想法吗?
      【解决方案4】:

      这是不可能的——不透明度是针对一个元素而所有是它的内容,你不能“反转”它。

      0.8 乘以 1.0 仍然是 0.8,并且不透明度不可能大于 1 - 所以您唯一可以尝试做的就是将图像从具有不透明度的容器中取出,并且试着让它看起来好像它在里面(通过以某种方式将它放在它上面)。

      【讨论】:

        【解决方案5】:

        不透明度适用于元素和元素中的任何子项/内容。

        对于部分透明的颜色,请使用 RGBA bg 颜色。

        对于部分透明的背景图片,需要JS/JQ解决方案。

        【讨论】:

          【解决方案6】:

          使用背景:rgba(red,green,blue,alpha) 可能是一个很好的解决方案,但是,当您使用 disabled 属性时,您可能会发现它在 iPhone 中不再起作用。

          【讨论】:

            猜你喜欢
            相关资源
            最近更新 更多
            热门标签