css 当父元素具有不透明度时,禁用子元素的不透明度

k75qkfdt  于 2023-06-25  发布在  其他
关注(0)|答案(7)|浏览(178)

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

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

这不起作用,如下所述。
有人有主意吗?

ttygqcqt

ttygqcqt1#

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

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

只使用了rgba alpha而不是opacity。现在起作用了

ux6nzvsh

ux6nzvsh2#

这可能会帮助其他想要使用opacity的人,防止某个子元素变得不透明。
您可以使用: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>

输出:

v6ylcynt

v6ylcynt3#

正如其他答案所述,这是不可能的,使用不透明度,也就是说,使用这种方法。
一个解决方法是将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属性。这些对于确保背景元素位于父元素之下并且不与内容重叠以防止点击事件非常重要。
此方法也可以用于伪元素(:before:after),您需要添加content: '';

mbskvtky

mbskvtky4#

这是不可能的--不透明度是针对元素和它的所有内容的,你不能“反转”它。
0.8乘以1.0仍然是0.8,并且不透明度不可能大于1-因此您可以尝试做的唯一事情就是将图像从具有不透明度的容器中取出,并尝试使其看起来好像它在里面(通过将其放置在它上面,以某种方式或另一种方式)。

ajsxfq5m

ajsxfq5m5#

不透明度应用于元素和元素中的任何子元素/内容。
对于部分透明颜色,使用RGBA bg颜色。
对于部分透明的背景图像,需要JS/JQ解决方案。

omvjsjqw

omvjsjqw6#

使用背景:rgba(红色,绿色,蓝色,阿尔法)可能是一个很好的解决方案,但是,当你使用禁用属性,你可能会发现它在iPhone中不再工作。

fruv7luv

fruv7luv7#

如果你想保持十六进制,你可以将你的颜色从#FFFFFF改为#FFFFFFCC。简单的方法,你可以转换rgba到十六进制在这个网址:
https://rgbacolorpicker.com/rgba-to-hex

相关问题