2016-12-08 13 views
0

私は、CSSで前がコンテナの前にレンダリングされ、後がレンダリングされることを望みます。 Zインデックス= 0、コンテナ:前CSS before/after - スタッキングの順序。なぜ両方が上にあるのですか?

ようなz屈折率= 1、及び後:Zインデックス= 2

が、順序が前である:Zインデックス= 1、コンテナ:Z-インデックス= 0、及び後:Zインデックス= 2

HTML:

<div id=theDiv>DIV</div> 

CSS:

#theDiv{ 
    position:relative; 
    width:100px; height:100px; 
    background-color:red; 
    margin:50px; 
} 
#theDiv:before{ 
    content:"Before"; 
    position:absolute; top:-30px; left:-30px; 
    width:90px; height:90px; 
    background-color:blue; 
} 
#theDiv:after{ 
    content:"After"; 
    position:absolute; top:30px; left:30px; 
    width:90px; height:90px; 
    background-color:yellow; 
} 

https://jsfiddle.net/shprung/892y1gzc/

私の通常の解決策は、-1のz-インデックスの前に強制的にハックのようにすることです。

The specsは間接的で重なり順を言及していない私が望んでいたものを提案する:

...その名前が示すとおり、:擬似要素は、コンテンツの場所を指定 後:前と前と要素のドキュメント ツリーのコンテンツの後に...

Zインデックスを強制するよりも、任意のよりよい解決策:-1?

他の同様の質問は、新しいスタッキングコンテンツをセットアップすることが必要であると仮定したいと思いますが、そうではありません。たとえば、以下のコードのような各Zインデックスを与えても、正しく動作しません。 z-index:前の-1はいくつかのユニークなケースなので、私は困惑しています。

#theDiv{ 
    z-index:50; 
    position:relative; 
    width:100px; height:100px; 
    background-color:red; 
    margin:50px; 
} 
#theDiv:before{ 
    z-index:1; 
    content:"Before"; 
    position:absolute; top:-30px; left:-30px; 
    width:90px; height:90px; 
    background-color:blue; 
} 
#theDiv:after{ 
    z-index:100; 
    content:"After"; 
    position:absolute; top:30px; left:30px; 
    width:90px; height:90px; 
    background-color:yellow; 
} 
+0

[z-index of:beforeまたは:afterが要素の下にある可能性がありますか?](http://stackoverflow.com/questions/3032856/z-index-of-before-or-後でその要素の下にある可能性があります) – Daerik

+3

これはハックではなく、どのように動作するように設計されています。 – junkfoodjunkie

+2

':before'は実際の' div'の前ではなく '#theDiv'の_content_の前にレンダリングされます。しかし、確かに、 'z-index'に' -1'を使い、 'pointer-events:none'を使うこともできます。 – powerbuoy

答えて

4

::before::afterない兄弟として、子供選択された要素のとして擬似要素を作成します。だから、#theDiv::before::afterを追加して作成するようになります。

<div id="theDiv"> 
    <span id="theDiv_before"></span> 
    DIV 
    <span id="theDiv_after"></span> 
</div> 

子要素は親要素の上に積み重ね、および擬似要素はそのように表示される理由です。

詳細については、the stacking context in CSSを参照してください。

解決策は、divのコンテナに擬似要素を作成するか、またはz-index: -1をそのまま使用することです。

+0

解決策が含まれていれば、これは素晴らしい答えでした! –

関連する問題