为什么子元素不能覆盖具有更大值的父元素的不透明度?

tec*_*bar 36 css opacity

众所周知,子元素现在不能覆盖opacity其父元素的属性.opacity父项的属性始终生效.

当孩子试图改写(用较小的值覆盖)父亲的不透明度时,这是有意义的.但是,如果孩子试图用更大的价值覆盖它呢?不应该被允许吗?为什么半透明的父母不能有一个不透明的孩子?任何人都可以分享为什么这样的限制被确定为CSS设计的一部分的想法?

如果有人能够阐明理论上的原因,我将非常感激.我基本上试图找出原因 - 不能解决这个问题(不是解决方法;因为已经讨论了很多次).我相信这是很多像我这样的新手想知道的东西.

bfa*_*tto 43

我从未将其视为"压倒一切"或"压倒一切".这是相对不透明的问题.如果父级具有不透明度0.5,则子级也具有该不透明度(与父级的堆叠上下文相关).孩子可以在0和之间拥有自己的不透明度值1,但它总是相对于父级的不透明度.因此,如果孩子也opacity: 0.5设置了,那么0.25父母的一些兄弟姐妹的不透明度就会变得不透明1.

规范将其视为一个alpha掩模,其中不透明度只能被移除.元素是不透明的,或具有一定程度的透明度(任何东西< 1):

不透明度可以被认为是后处理操作.从概念上讲,在将元素(包括其后代)渲染为RGBA屏幕外图像之后,不透明度设置指定如何将屏幕外渲染混合到当前复合渲染中.

后来:

如果对象是容器元素,则效果就好像容器元素的内容使用掩码与当前背景混合,其中掩码的每个像素的值是 <alphavalue>

至于为什么以这种方式实施,我认为这不是故意的"让我们禁止那样".也许选择这种方法进行更加简单计算,只是后来的东西不同的实际需要被认可(然后rgba colorbackground-color介绍-我可能是错的时间表这里).

  • 使用rgba颜色模式可以处理这种效果.例如,这有效:.parent {background:rgba(background:255,255,255,0.7);} .parent .child {background:rgba(255,255,255,1);} (5认同)