div的不透明度会产生意想不到的结果,并将内容与图像混合在一起 [英] Opacity of div creates unexpected results and blends content with image

查看:100
本文介绍了div的不透明度会产生意想不到的结果,并将内容与图像混合在一起的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有人可以解释为什么第二个&以下代码段中的第三个div似乎与图像混合?为了清楚起见,这里的问题是关于为什么内容元素的不透明度似乎影响图层顺序。



该图像是一个不带透明度的动画gif。在上面的div里,一切看起来都像预期的那样。图像在它的白色背景上旋转,阻挡了它下面的div的文本内容。



在较低的两个div中,我减少了不透明度并以某种方式创建了文本被叠加在图像的上方。这在第三个div中进一步说明,我在包装上设置了背景颜色。整个事情只是让我感到困惑和意外。


$ b

div.wrapper {位置:相对;填充:15px; border:1px solid #ddd;} img.loader {position:absolute;左:calc(50% - 32px); top:calc(50% - 32px);} div.content-b,div.content-c {opacity:.5;} div.wrapper -c {background-color:#bbb;}

< div class =wrapper> < img class =loadersrc =// zuma-design.com/shared/so/loading-large.gif/> < div class =content-a> Sed sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium,totam rem aperiam,eaque ipsa quae ab iso inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo。 Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit,sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt。 Neque porro quisquam est,qui dolorem ipsum quia dolor sit amet,consectetur,adipisci velit,sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem。你是否真的希望能够实现这个目标? Quis au autem vel eum iure imure reind renderderit qui in a voluptate velit esse quam nihil molestiae consequatur,vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?< / div>< / div>< div class =wrapper> < img class =loadersrc =// zuma-design.com/shared/so/loading-large.gif/> < div class =content-b> Sed sed ut perspiciatis undecomnis iste natus error sit voluptatem accusantium doloremque laudantium,totam rem aperiam,eaque ipsa quae ab ilo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo。 Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit,sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt。 Neque porro quisquam est,qui dolorem ipsum quia dolor sit amet,consectetur,adipisci velit,sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem。你是否真的希望能够实现这个目标? Quis autem vel eum iure imure reind renderderit qui in ea voluptate velit esse quam nihil molestiae consequatur,vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?< / div>< / div>< div class =wrapper wrapper-c> ; < img class =loadersrc =// zuma-design.com/shared/so/loading-large.gif/> < div class =content-c> Sed sed ut perspiciatis undecomnis iste natus error sit voluptatem accusantium doloremque laudantium,totam rem aperiam,eaque ipsa quae ab iso inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo。 Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit,sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt。 Neque porro quisquam est,qui dolorem ipsum quia dolor sit amet,consectetur,adipisci velit,sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem。你是否真的希望能够实现这个目标? Quis autem vel eum iure repreurederit qui in ea voluptate velit esse quam nihil molestiae consequatur,vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?< / div>< / div>

这样说:


  1. 兄弟姐妹的顺序 - 基于这个顺序首先被考虑到


  2. 定位的同级元素堆叠在 static 元素上 - 所以 img 应该超过 div 的理想值。

  3. 包含 opacity transform


    请参阅 MDN:堆砌钢筋xt


    堆叠上下文在文档中的任何位置由任何元素$ b形成$ b这是根元素(HTML),



    • $ b

    • 定位(绝对或相对)z-index值,而不是auto,


    • 具有z-index值的flex项目而不是auto,即父元素显示:flex | inline-flex,


    • 元素的不透明度值小于1。不透明度),

    • 具有非无的变换值的元素,


    • 具有除normal之外的混合模式值的元素,


    • 元素的筛选值不是none,


    • 具有隔离性设置为隔离的元素的透视值而非无,


    • position:fixed


    • 指定任何attri即使你没有直接为这些属性指定值,bute也会改变上面的值(见这篇文章)。

    • 具有-webkit-overflow-scrolling的元素触摸



    您可以修复它通过将 img 放置在 div 下方 - 参见下面的演示:

    < pre class =snippet-code-css lang-css prettyprint-override> div.wrapper {position:relative;填充:15px; border:1px solid #ddd;} img.loader {position:absolute;左:calc(50% - 32px); top:calc(50% - 32px);} div.content-b,div.content-c {opacity:.5;} div.wrapper -c {background-color:#bbb;}

    < div class =wrapper> < div class =content-a> Sed sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium,totam rem aperiam,eaque ipsa quae ab iso inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo。 Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit,sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt。 Neque porro quisquam est,qui dolorem ipsum quia dolor sit amet,consectetur,adipisci velit,sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem。你是否真的希望能够实现这个目标? Quis autem vel eum iure repreenderit qui in ea voluptate velit esse quam nihil molestiae consequatur,vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?< / div> < img class =loadersrc =// zuma-design.com/shared/so/loading-large.gif/>< / div>< div class =wrapper> < div class =content-b> Sed sed ut perspiciatis undecomnis iste natus error sit voluptatem accusantium doloremque laudantium,totam rem aperiam,eaque ipsa quae ab ilo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo。 Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit,sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt。 Neque porro quisquam est,qui dolorem ipsum quia dolor sit amet,consectetur,adipisci velit,sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem。你是否真的希望能够实现这个目标? Quis autem vel eum iure repreenderit qui in ea voluptate velit esse quam nihil molestiae consequatur,vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?< / div> < img class =loadersrc =// zuma-design.com/shared/so/loading-large.gif/>< / div>< div class =wrapper wrapper-c> < div class =content-c> Sed sed ut perspiciatis undecomnis iste natus error sit voluptatem accusantium doloremque laudantium,totam rem aperiam,eaque ipsa quae ab iso inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo。 Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit,sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt。 Neque porro quisquam est,qui dolorem ipsum quia dolor sit amet,consectetur,adipisci velit,sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem。你是否真的希望能够实现这个目标? Quis autem vel eum iure repreenderit qui in ea voluptate velit esse quam nihil molestiae consequatur,vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?< / div> < img class =loadersrc =// zuma-design.com/shared/so/loading-large.gif/>< / div>


    Can someone please explain why the second & third divs in the following snippet appear to blend with the image? For clarity, the question here is about why the opacity of the content element seems to affect layer order.

    The image is an animated gif with no transparency. In the upper div everything seems to behave as expected. The image swirls around with it's white background blocking the text content of the div below it.

    In the lower two divs I've decreased opacity and somehow this creates the effect of the text being superimposed over the image. This is further illustrated in the third div where I've set a background color on the wrapper. The whole thing is just confusing and unexpected for me.

    div.wrapper {
      position: relative;
      padding: 15px;
      border: 1px solid #ddd;
    }
    img.loader {
      position: absolute;
      left: calc(50% - 32px);
      top: calc(50% - 32px);
    }
    div.content-b,
    div.content-c {
      opacity: .5;
    }
    div.wrapper-c {
      background-color: #bbb;
    }

    <div class="wrapper">
      <img class="loader" src="//zuma-design.com/shared/so/loading-large.gif" />
      <div class="content-a">Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas
        sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora
        incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate
        velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?</div>
    </div>
    <div class="wrapper">
      <img class="loader" src="//zuma-design.com/shared/so/loading-large.gif" />
      <div class="content-b">Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas
        sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora
        incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate
        velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?</div>
    </div>
    <div class="wrapper wrapper-c">
      <img class="loader" src="//zuma-design.com/shared/so/loading-large.gif" />
      <div class="content-c">Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas
        sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora
        incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate
        velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?</div>
    </div>

    解决方案

    The stacking along the z-axis rules say that:

    1. The order of sibling - based on which comes is first taken into consideration

    2. A positioned sibling element is stacked over the static element - so the img should be over the div ideally.

    3. Other properties like position which affects stacking context includes opacity, transform.

    See these excerpts from MDN: stacking context

    A stacking context is formed, anywhere in the document, by any element which is either

    • the root element (HTML),

    • positioned (absolutely or relatively) with a z-index value other than "auto",

    • a flex item with a z-index value other than "auto",that is the parent element display: flex|inline-flex,

    • elements with an opacity value less than 1. (See the specification for opacity),

    • elements with a transform value other than "none",

    • elements with a mix-blend-mode value other than "normal",

    • elements with a filter value other than "none",

    • elements with a perspective value other than "none",

    • elements with isolation set to "isolate",

    • position: fixed

    • specifying any attribute above in will-change even if you don't specify values for these attributes directly (See this post)

    • elements with -webkit-overflow-scrolling set to "touch"

    You can fix it by putting the img below the div - see demo below:

    div.wrapper {
      position: relative;
      padding: 15px;
      border: 1px solid #ddd;
    }
    img.loader {
      position: absolute;
      left: calc(50% - 32px);
      top: calc(50% - 32px);
    }
    div.content-b,
    div.content-c {
      opacity: .5;
    }
    div.wrapper-c {
      background-color: #bbb;
    }

    <div class="wrapper">
      
      <div class="content-a">Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas
        sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora
        incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate
        velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?</div>
      <img class="loader" src="//zuma-design.com/shared/so/loading-large.gif" />
    </div>
    <div class="wrapper">
    
      <div class="content-b">Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas
        sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora
        incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate
        velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?</div>
        <img class="loader" src="//zuma-design.com/shared/so/loading-large.gif" />
    </div>
    <div class="wrapper wrapper-c">
    
      <div class="content-c">Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas
        sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora
        incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate
        velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?</div>
        <img class="loader" src="//zuma-design.com/shared/so/loading-large.gif" />
    </div>

    这篇关于div的不透明度会产生意想不到的结果,并将内容与图像混合在一起的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆