40

私たちが知っているように、子要素は現在opacity、その親のプロパティをオーバーライドできません。親のopacityプロパティは常に有効です。

これは、子が親の不透明度をオーバーライド (より小さな値でオーバーライド) しようとしている場合に意味があります。しかし、子がより大きな値でオーバーライドしようとしている場合はどうでしょうか? それは許されるべきではないのですか?半透明の親が不透明な子を持つことができないのはなぜですか? なぜそのような制限が CSS 設計の一部として決定されたのかについて、誰か考えを共有できますか?

誰かがこれの理論的な理由に光を当てることができれば、本当に感謝しています. 私は基本的に、これの一部ではない理由を見つけようとしています(回避策ではありません。それらはすでに何度も話されているためです)。これは、私のような多くの初心者 SO'ers が知りたいことだと確信しています。

4

1 に答える 1

47

私はそれを「オーバーライド」または「アンダーライディング」と見なしたことはありません。それは相対的な不透明度の問題です。親の不透明度が の0.5場合、子も (親のスタック コンテキストに関連して) 不透明度を持ちます。0子はとの間の独自の不透明度値を持つことができますが、1常に親の不透明度に相対的になります。そのため、子もopacity: 0.5設定されている場合は0.25、 opacity を持つ親の兄弟の一部の opacity になり1ます。

仕様では、不透明度のみを削除できるアルファ マスクとして扱います。要素は不透明であるか、ある程度の透明度を持っています (anything < 1):

不透明度は、後処理操作と考えることができます。概念的には、要素 (その子孫を含む) が RGBA オフスクリーン イメージにレンダリングされた後、不透明度設定はオフスクリーン レンダリングを現在の複合レンダリングにブレンドする方法を指定します。

そして後で:

オブジェクトがコンテナ要素である場合、マスクの各ピクセルの値が<alphavalue>

なぜそのように実装したのかというと、「それを禁止しよう」という意味での意図的なものではないと思います。おそらく、このアプローチは計算を簡単にするために選択されたものであり、後で別のものが実際に必要であることが認識されたのでしょう (その後rgba colorbackground-color導入されました。ここでのタイムラインについては間違っている可能性があります)。

于 2012-09-27T02:31:47.203 に答える