Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Css 为什么可以';t子元素用更大的值覆盖父元素的不透明度?_Css_Opacity - Fatal编程技术网

Css 为什么可以';t子元素用更大的值覆盖父元素的不透明度?

Css 为什么可以';t子元素用更大的值覆盖父元素的不透明度?,css,opacity,Css,Opacity,正如我们所知,子元素现在不能覆盖其父元素的opacity属性。父对象的opacity属性始终生效 当子对象试图降低父对象的不透明度(使用较小的值覆盖)时,这是有意义的。但是如果孩子试图用一个更大的值覆盖它呢?难道这不应该被允许吗?为什么半透明的父对象不能有不透明的子对象?有人能分享一下为什么这样一个限制是CSS设计的一部分吗 如果有人能解释一下这其中的理论原因,我会非常感激的。我基本上是想找出为什么不能成为其中一部分(不是解决办法;因为已经讨论了很多次了)。我相信这是很多像我这样的新手都想知道的

正如我们所知,子元素现在不能覆盖其父元素的
opacity
属性。父对象的
opacity
属性始终生效

当子对象试图降低父对象的不透明度(使用较小的值覆盖)时,这是有意义的。但是如果孩子试图用一个更大的值覆盖它呢?难道这不应该被允许吗?为什么半透明的父对象不能有不透明的子对象?有人能分享一下为什么这样一个限制是CSS设计的一部分吗

如果有人能解释一下这其中的理论原因,我会非常感激的。我基本上是想找出为什么不能成为其中一部分(不是解决办法;因为已经讨论了很多次了)。我相信这是很多像我这样的新手都想知道的。

我从来没有把这看作是“凌驾”或“凌驾”。这是一个相对不透明的问题。如果父对象的不透明度为
0.5
,则子对象也有不透明度(相对于父对象的堆叠上下文)。子对象可以在
0
1
之间有自己的不透明度值,但它始终与父对象的不透明度相对。因此,如果子级也设置了
opacity:0.5
,则它将是
0.25
不透明度
1
的父级兄弟级的不透明度

将其视为alpha遮罩,其中不透明度只能移除。元素要么不透明,要么具有一定程度的透明度(任何东西都可以):

不透明度可以看作是一种后处理操作。从概念上讲,将元素(包括其子体)渲染到RGBA屏幕外图像后,“不透明度”设置指定如何将屏幕外渲染混合到当前合成渲染中

后来:

如果对象是一个容器元素,那么效果就好像容器元素的内容是使用遮罩与当前背景混合的,其中遮罩的每个像素的值都是


至于为什么要这样实施,我不认为这是“让我们禁止那样做”的故意行为。也许选择这种方法是为了更简单地计算,只是后来才认识到对不同事物的实际需求(然后引入了
rgba
color
背景色
——我可能对这里的时间线错了)有一种方法可以实现这一点:在父对象中使用半透明背景(例如背景颜色:rgba(0,0,0,0.5);,其中父元素的背景是一种
rgba
颜色,它有一个alpha通道。是的,我知道。如果我在父元素和子元素中使用背景图像呢?此外,我实际上没有寻找解决方法。我想了解为什么在CSS中做出这样的设计决策。是的,那部分是清晰的。不透明度不透明度为0.5时,0.5与0.25类似。但是,我仍然感到困惑的是,为什么半透明的父对象不能有完全不透明的子对象?为什么不是设计的呢?因为子对象是父对象的一部分,它们的不透明度是固有的。这意味着如果我们指定子对象的不透明度为a,则可以在0.5不透明的父对象上有一个不透明的子对象s 2.0-但这并没有发生,是吗?我相信还有更多的理由不允许这样做。用一个可能的理由更新了我的答案。使用rgba颜色模式处理这种效果是可能的。例如,这是有效的:。parent{background:rgba(background:255,255,255,0.7);}.parent.child{background:rgba(255,255,255,1);}