众所周知,子元素现在不能覆盖其父元素的opacity
属性。父级的opacity
属性始终生效。
当孩子试图强调(用较小的值覆盖)父亲的不透明度时,这是有意义的。但是,如果孩子试图用更大的价值覆盖它呢?不应该被允许吗?为什么半透明的父母不能有一个不透明的孩子?任何人都可以分享为什么这样的限制被确定为CSS设计的一部分的想法吗?
如果有人能够阐明理论上的原因,我们真的很感激。我基本上试图找出原因 - 不能解决这个问题(不是解决方法;因为已经讨论了很多次)。我确信这是很多像我这样的新手想知道的东西。
答案 0 :(得分:43)
我从未将其视为“压倒一切”或“压倒一切”。这是相对不透明的问题。如果父级的不透明度为0.5
,则子级也具有该级别(与父级的堆叠上下文相关)。孩子可以在0
和1
之间拥有自己的不透明度值,但它始终相对于父级的不透明度。因此,如果孩子也设置了opacity: 0.5
,那么父亲的一些兄弟姐妹的不透明度将为0.25
1
。
spec将其视为alpha蒙版,只能删除不透明度。元素是不透明的,或具有一定程度的透明度(任何< 1
):
不透明度可以被认为是后处理操作。从概念上讲,在将元素(包括其后代)渲染为RGBA屏幕外图像后,不透明度设置指定如何将屏幕外渲染混合到当前复合渲染中。
以及后来:
如果对象是容器元素,则效果就好像容器元素的内容使用掩码与当前背景混合,其中掩码的每个像素的值为
<alphavalue>
至于为什么以这种方式实施,我认为这不是故意的“让我们禁止那样”。也许选择这种方法是为了更容易计算,并且只有在以后才能识别出不同的东西的实际需要(然后引入rgba
color
和background-color
- 我可能错了时间表在这里。)