Css 强制绝对定位的图元继承透明度

Css 强制绝对定位的图元继承透明度,css,opacity,Css,Opacity,当元素被赋予不透明度时,该元素的所有静态子元素和相对子元素都以部分透明度渲染。但是,具有position:absolute(或position:fixed)的元素不会继承此属性,而是以完全不透明度渲染,除非另有明确说明 现在,我可以通过调用执行赋值的函数来替换对style.opacity的赋值,然后循环遍历所有子级,获取它们的计算样式,并查看它们的位置属性是否保证添加自己的style.opacity。。。但这有点像核武器 我还知道我可以向适当的元素添加opacity:inherit,但这仅在它们

当元素被赋予
不透明度时
,该元素的所有静态子元素和相对子元素都以部分透明度渲染。但是,具有
position:absolute
(或
position:fixed
)的元素不会继承此属性,而是以完全不透明度渲染,除非另有明确说明

现在,我可以通过调用执行赋值的函数来替换对
style.opacity
的赋值,然后循环遍历所有子级,获取它们的计算样式,并查看它们的位置属性是否保证添加自己的
style.opacity
。。。但这有点像核武器

我还知道我可以向适当的元素添加
opacity:inherit
,但这仅在它们是褪色元素的直接子元素时有效-如果它们是后代呢

我想知道是否有办法强制元素继承正确的透明度


旁注:当我使用过滤器时,IE以我想要的方式运行:alpha(…),这很有趣。

根据评论,它似乎只是IE的问题。这似乎也是一个你需要解决的问题。但是,仅在定位元素上设置

opacity: inherit; /* IE9 */
filter: inherit; /* IE8 */
…在继承
不透明度
绝对
元素的IE8-9中,假设这些子元素自己设置(;然而,显示
绝对
元素的孙子似乎在其自身也处于
位置:绝对
时保持隐藏)。任何其他位置的孩子都需要同样的。IE7(如果您愿意的话)在晚上让
inherit
处理
过滤器时失败

对于
#容器
,在
#contained
上未设置任何
继承
,但这可能会严重影响您对
绝对
子对象的定位(尽管不是
固定的
子对象)

如果您处理的是中的许多定位元素,那么我建议有条件地向IE9及以下版本提供数据(我没有测试IE10)


结果证明,答案只是“确保绝对元素有一个受透明度影响的相对容器”。我忘了。

我似乎无法复制你描述的任何行为。在IE上,我的绝对定位元素从未获得透明度,即使使用
过滤器
。在所有其他浏览器上,绝对定位元素的行为与所有其他子元素类似,渲染时的不透明度与在父元素上设置的不透明度相同。-刚刚在Chrome上测试过,你是对的,这似乎是IE特有的问题……当然它会传播到孩子们——这是因为IE8支持
inherit
。然而,除非他们也继承了遗产,否则它不会传播给孙辈等。如果让孙子继承,而不是子继承,则子继承将其
不透明度:1
传递给孙子,不会产生明显的效果。但是,fiddle并没有演示如何使用任意嵌套的子代(孙辈等)。另外,IE7不支持任何东西上的
inherit
。@BoltClock——第一小提琴中的
p
标记没有
位置
不透明度
设置,但它确实消失了,表明它接受了IE8-9中包含的母
元素的
不透明度
,直到
p
本身获得
位置(第二小提琴)。还有一点,它们都隐藏在原始的
absolute
容器继承
opacity
,正如(我在IE9中注意到的,它在
absolute
元素的
absolute
孙子辈身上起作用。)很好的发现!那也是我想要的。我相信这里已经解释清楚了,只要一个人能读懂:
#container * {
    opacity: 0;
    filter: alpha(opacity=0);    
}