したがって、z-index
を正しく理解すれば、この状況では完璧になります。
下の画像(タグ/カード)をその上のdivの下に配置したい。そのため、鋭いエッジが見えません。どうすればいいですか?
z-index:-1 // on the image tag/card
または
z-index:100 // on the div above
動作しません。また、このようなものの組み合わせも行いません。どうして?
位置をstatic
以外の値に設定しても、要素のz-index
がまだ機能しないように見える場合は、一部の親要素にz-index
が設定されている可能性があります。
スタッキングコンテキストには階層があり、各スタッキングコンテキストは、親のスタッキングコンテキストのスタッキング順序で考慮されます。
だから次のhtmlで
div { border: 2px solid #000; width: 100px; height: 30px; margin: 10px; position: relative; background-color: #FFF; }
#el3 { background-color: #F0F; width: 100px; height: 60px; top: -50px; }
<div id="el1" style="z-index: 5"></div>
<div id="el2" style="z-index: 3">
<div id="el3" style="z-index: 8"></div>
</div>
z-index
のel3
がどれだけ大きく設定されても、親のスタックコンテキストが低いため、常にel1
の下になります。 el3
のスタック順序が実際には3.8であり、5。
親要素のスタッキングコンテキストを確認する場合は、これを使用できます。
var el = document.getElementById("#yourElement"); // or use $0 in chrome;
do {
var styles = window.getComputedStyle(el);
console.log(styles.zIndex, el);
} while(el.parentElement && (el = el.parentElement));
要素には位置属性が必要です。 (例:絶対、相対、固定)またはz-indexは機能しません
多くの場合、z-index
が機能するには要素を配置する必要があります。
実際、問題の要素にposition: relative
を適用することで問題が解決する可能性があります(ただし、確実に知るには十分なコードが提供されていません)。
実際、position: fixed
、position: absolute
、およびposition: sticky
もz-index
を有効にしますが、これらの値はレイアウトも変更します。 position: relative
を使用すると、レイアウトは乱れません。
基本的に、要素がposition: static
(デフォルト設定)でない限り、配置されていると見なされ、z-index
が機能します。
「なぜz-indexが機能しないのか?」の質問に対する多くの回答は、z-index
onlyが配置された要素で機能すると主張しています。 CSS3の時点では、これはもはや真実ではありません。
flex items または グリッド項目 は、position
がstatic
であってもz-index
を使用できます。
仕様から:
Flexアイテムは、インラインブロックとまったく同じようにペイントします。ただし、未処理のドキュメント順序の代わりに順序が変更されたドキュメント順序が使用され、
auto
以外のz-index
値は、position
がstatic
であってもスタックコンテキストを作成します。グリッド項目の描画順序はインラインブロックとまったく同じです。ただし、未処理の文書順序の代わりに順序が変更された文書順序が使用され、
auto
以外のz-index
値はposition
がstatic
であってもスタックコンテキストを作成します。
以下は、z-index
が非位置指定フレックスアイテムで動作するデモです。 https://jsfiddle.net/m0wddwxs/