2017-10-21 4 views
0

これは私には意味がありません。すべきではない:前にスパンの前にレンダリングされる?子要素に相対的な位置を追加すると動作します。なぜdiv :: beforeはchildren要素の上に表示されますか?

これはスタッキングのコンテキストと関係する可能性がありますが、正確にはわかりません。

https://www.w3.org/TR/CSS21/visuren.html#layers

それは位置の子孫だから、この場合のスパンは#6の前に::それは非位置付けていますので、#3に該当すると?

div { position:relative; } 
 

 
div:before { 
 
    content: ''; 
 
    width: 100%; 
 
    height: 100%; 
 
    background: red; 
 
    position: absolute; 
 
    top: 0; 
 
    left: 0; 
 
} 
 

 
/* Adding this works: */ 
 
/* span { position: relative; } */
<div> 
 
    <span>Test</span> 
 
</div>

+0

'position:absolute'を使用していますので、あなたが指定した場所、つまり左上隅に正確に配置されています。 – FluffyKitten

+0

これは、例えば '-1'のように' auto'以外の 'z-index'の値を宣言すると、スタック化コンテキストと関係があります。例えば、スタック化コンテキストを作成し、':pseudo-element 'が兄弟の' span'要素の下に現れます。 'z-index'値が宣言されていなければ、絶対配置された要素は常に、"配置されていない "要素または' static'要素の上に表示されます(*例: 'position:static' *)。素子。 – UncaughtTypeError

答えて

1

アイテムにpositionが設定されていない場合は、レイアウトがかなり低く設定されています。要素をabsoluteのように配置する場合は、すべての兄弟要素にpositionを与える必要があります。この例では::beforespanは兄弟であり、::before以来位置を持ち、span::before

:pseudo CSSクラスの仕組み
+0

私はすべての答えがそのように私に説明されたいと思います。テクニカル専門用語なしで簡単に理解できます。 私はしばらくの間、CSSをやっていました。これは、:: beforeを使用するときに明示的にposition:relativeを宣言しなければならないことが初めてであると思います。 – chh

0

あなたは、その位置を指定したので、それは別のフローレベルにあるように、コンテンツになりabsoluteです。 z-indexを指定することはできますが、それでも必ずしも機能しない場合もあります。たとえば、absolute/relativeの要素がある場合は、static以上の任意の数のz-インデックスがあります。

0

要素が要素の前と内を追加されますされ、より「重要」ではありません。私は:beforeがあるので、非常にあなたが達成することが、あなたの疑問を説明するために必要なものを、あなたのdiv要素にposition:relativeを追加した後、現在の結果を生産している理由はありませんよ

<div> 
    :before 
    <span>Test</span> 
</div> 

:そうのような

position:absoluteで設定します。これにより、::before要素を現在のhtml階層から取り出し、div { position:relative; }を設定した最も近い要素に相対的な位置に配置します。

前が階層から引き出されているので、<span>は利用可能な空き領域(aka overlay by:before)を埋めます。

関連する問題