代码之家  ›  专栏  ›  技术社区  ›  techfoobar

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

  •  41
  • techfoobar  · 技术社区  · 13 年前

    正如我们所知,子元素现在还不能覆盖 opacity 其母公司的财产。这个 不透明度 父项的属性始终生效。

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

    如果有人能阐明这其中的理论原因,我将不胜感激。我本质上是想找出为什么不能参与其中(而不是变通办法;因为这些已经被谈论了很多次)。我相信这是很多像我这样的新手都想知道的事情。

    1 回复  |  直到 13 年前
        1
  •  48
  •   bfavaretto    13 年前

    我从未将其视为“凌驾”或“低估”。这是一个问题 相对的 不透明。如果父对象的不透明度为 0.5 ,子代也有它(相对于父代的堆叠上下文)。子对象的不透明度值可以介于 0 1 ,但它将始终相对于父对象的不透明度。所以如果孩子也有 opacity: 0.5 设置,它将 0.25 具有不透明度的父对象的某些兄弟对象的不透明度 1.

    这个 spec 将其视为alpha遮罩,其中只能移除不透明度。元素要么不透明,要么具有一定程度的透明度(任何 < 1 )以下为:

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

    稍后:

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

    至于 为什么? 它是这样实施的,我不认为这是故意的,“让我们禁止这样做”。也许选择这种方法是因为计算更简单,直到后来才意识到对不同事物的实际需求(然后 rgba color background-color 被介绍了,我可能对这里的时间线错了)。