:before
および:after
疑似要素は、実際の要素がそうしなくても、inherit
値を使用して親から高さを継承できますか?
いいえ。疑似要素が生成要素の親から値を継承できる唯一の方法は、生成要素自体もその親から継承する場合です。
これは、継承が親から子へ、一度に1レベルずつ発生するためです。継承が子孫のいくつかのレベルにわたって機能するためには、すべての子孫が継承する必要があるです。
例として、次のHTMLを考えます。
<div class="parent">
<div class="child">
</div>
</div>
次のCSSの場合:
.parent {
width: 100px;
height: 100px;
}
.parent > .child:before, .parent > .child:after {
content: '';
position: absolute;
width: inherit;
height: inherit;
}
疑似要素の値がinherit
であっても、これを生成する要素、つまり.parent > .child
は.parent
を継承しないため、これは機能しません。代わりに、両方のプロパティのデフォルト値auto
を継承します。
これを機能させるには、.parent > .child
も継承する必要があります。
.parent {
width: 100px;
height: 100px;
}
.parent > .child {
width: inherit;
height: inherit;
}
.parent > .child:before, .parent > .child:after {
content: '';
position: absolute;
width: inherit;
height: inherit;
}
この質問はかなり古いことは承知していますが、今日私はそれを偶然見つけました。 http://www.w3.org/TR/CSS21/generate.html によると、受け入れられた答えは正確ではありません:
:before
および:after疑似要素は、それらが接続されているドキュメントツリーの要素から継承可能なプロパティを継承します。
幅を継承してみたところ、うまくいきました。
これらの答えに関して、私はただ変革の側面にぶつかっていました。それは継承に似ているかもしれません。誰かのお役に立てば幸いです。
これを持っている:
<div class="box">
<div class="frame"></div>
</div>
frame
のこの変換:
transform: rotate(10deg);
次に、frame:before
およびframe:after
も変換されます。しかし、これらはframe
やwidth
などのheight
のプロパティを持っていません。完全な例はここを参照してください:
http://jsfiddle.net/chafpgwt/1/
このフィドルでは、3つのネストされた正方形があり、それぞれ10度回転しますが、変換定義はframe
にのみ設定され、frame:after
にもframe:before
にも設定されません。
変換も「継承されない」と考えるのは落とし穴です。変化は別の状況で影響を及ぼします。