2012-07-23 4 views
5

要素にopacityが指定されると、要素の静的および相対的な子はすべて部分的に透明にレンダリングされます。しかし、position: absolute(またはposition: fixed)の要素はこれを継承せず、別の方法で特に指示されていない限り完全な不透明度でレンダリングされます。絶対配置された要素を透明に継承するように強制する

さて、私は割り当てを実行する関数を呼び出してstyle.opacityへの割り当てを置き換えることができ、その後、その計算されたスタイルを取得し、その位置プロパティがstyle.opacity、独自の追加を保証されている場合は見て、すべての子をループ...しかし、それは少しの核です。

opacity: inheritを適切な要素に追加することもできますが、これは退色した要素の直接の子である場合にのみ機能します。子孫の場合はどうなりますか?

要素に正しい透明性を継承させる方法があるかどうかを知りたいと思います。

サイドノート:興味深いことに、filter:alpha(...)を使用すると、IEは私が望むやり方を実行します。

+1

あなたが説明している動作を複製することはできません。 IE上では、私の絶対配置された要素は 'filter'を使っても決して透明性を受けません。他のすべてのブラウザでは、絶対配置要素は他のすべての子要素と同様に動作し、親要素に設定されているものと同じ不透明度でレンダリングされます。 – BoltClock

+0

[Made a Fiddle](http://jsfiddle.net/2Zqd6/) - ちょうどChromeでテストされていますが、これはIE固有の問題です... –

答えて

8

答えたように、答えは単純に「絶対要素に透明性の影響を受ける相対的なコンテナがあることを確認してください」でした。忘れた。

+0

ニースが見つかりました!それも私が探していたものです。人間だけがそれを読むことができるのなら、ここではすべて説明していると確信しています:http://www.w3.org/TR/css3-color/#opacity –

0

コメントごとに、それはIEの問題であるようです。それはまたあなたが回避する必要があるバグであるようです。しかし、a later experiment in IE9があることを示した;しかしdo not have positioneven position: relative for IE8を設定し、それらの子供自身を仮定し、opacityを継承absolute要素のIE8-9 does propagate to childrenに...位置決め要素のみ...

opacity: inherit; /* IE9 */ 
filter: inherit; /* IE8 */ 

に設定absolute要素の孫は、それ自体がposition: absoluteだったときに隠れているように見えました。他の子どもには同じものが必要です。あなたが気遣っていれば、inheritfilterで働くことを夕方にしたIE7(気にするならば)。

#containedに設定された任意のinheritなし#containerIE9 could be resolved by having position: relative set、それは真剣にabsolute子供(ではないがfixedもの)のあなたの位置に影響を与える可能性があります。

あなたは内の多くの位置のエレメントを扱っている場合は、私はは条件付きでIE9へthis codeを供給し、(私はIE10をテストしていない)の下をお勧めしますが。

#container * { 
    opacity: 0; 
    filter: alpha(opacity=0);  
} 
+0

もちろん、それは子供に伝播します - IE8は '継承'をサポートしているからです。しかし、彼らが継承しない限り、孫に伝わることはありません。孫を継承するが、子どもを継承しないようにすると、子どもたちは「不透明度:1」を孫に渡し、明らかな効果はない。しかし、このフィドルは、任意にネストされた子孫(孫など)の使用を示していません。また、IE7は何でも 'inherit'をサポートしていません。 – BoltClock

+0

@ BoltClock - 最初のフィドルの 'p'タグは' position'も 'opacity'も設定されていませんが、IE8-9の親' contained'要素から 'opacity'を受け入れたことを示しています'p'自体が' position'(2番目のフィドル)を得ました。ここでは、「不透明」を継承したオリジナルの絶対コンテナの中に隠れている、もう少し数多くの「恣意的に入れ子にされたgrand-children」(http://jsfiddle.net/2Zqd6/9/)があります。 IE8での 'position'(http://jsfiddle.net/2Zqd6/10/)(私はIE9で気付いた、' absolute'要素の '絶対'孫に働きました)。 – ScottS

関連する問題