説明を始める前に、要素が、、または(NOT )の値をレンダリングz-index
した場合にのみ影響があることに注意してください。これらのそれぞれにより、独自のスタック コンテキストが作成されるためです。つまり、状況に応じて、またはのような値が機能する場合と機能しない場合があります。position:relative
position:absolute
position:fixed
static
initial
inherit
また、この投稿では、最初の要素の最初の子の最初の子を選択していることを示すために、1.1.1 という形式を使用することに注意してください。2.1.1 は 2 番目の要素の最初の子の最初の子などになります。
z-index
サブリストを使用した類推で説明するのが最も適切だと思います。最も単純な例から始めましょう。
<div class="top-level"></div>
<div class="top-level sibling"></div>
これを次のようなリストで表すことができます。
- トップレベル
- トップレベルの兄弟
デフォルトでは、リストのさらに下にあるものは、その前のものの上にレンダリングされます。したがって、この場合、2 は 1 の上に配置されます。
z-index でできることは、基本的にこのリストを並べ替えることです (いくつかの範囲内で)。z-index が高いほど、要素はリストの下の方に位置します。
ここでは簡単に表示できるようにインライン CSS を使用しますが、実際のコードではインライン CSS を使用しないでください。
<div class="top-level" style="z-index: 1;"></div>
<div class="top-level sibling"></div>
これにより、サブ リストが次のように変更されます。
- トップレベルの兄弟
- 最上位 - z-index:1
すごい!これで、HTML の最初の要素が 2 番目の要素の上にレンダリングされます。
これがよりトリッキーになるのは、子 (ネストされた) 要素を扱う場合です。
この状況を考える簡単な方法は、要素のレンダリングが開始されると、要素のすべての子がレンダリングされてから、兄弟に移動すると考えることです。
また、サブリストはレベルを変更できないことに注意してください。つまり、サブリストは、親要素または子要素と同じレベルにあることはできません。
つまり、次の場合は次のようになります。
<div class="top-level">
<div class="sub-level" style="z-index: 1;"></div>
</div>
<div class="top-level sibling"></div>
レンダリング サブリストは次のようになります。
- トップレベル
- サブレベル - z-index1
- トップレベルの兄弟
したがって、トップ レベルを見て、どれがリストの一番下にあるかを確認します。この場合は2.0なので1.0の上になります。次に、サブリスト (子) があるかどうかを確認します。そうではないので、1.0 にします。
1.0 には子 1.1 があり、視覚的には 1.0 より上になりますが (z-index を指定しなかった場合と同様)、1.0 は 2.0 よりも小さいため、2.0 よりも下になります。
したがって、1.1 には兄弟がないため、ここでの z-index は役に立ちません。
もう少し複雑な例を見てみましょう:
<div class="top-level">
<div class="sub-level" style="z-index: 2;"></div>
<div class="sub-level sibling"></div>
<div class="sub-level sibling" style="z-index: 1;"></div>
</div>
<div class="top-level sibling">
<div class="sub-level"></div>
</div>
この例のサブ リストは何ですか?
お任せしますが、自分でやってみるのもいいですね。
- トップレベル
- 下級兄弟
- サブレベルの兄弟 - z-index1
- サブレベル - z-index2
- トップレベルの兄弟
- サブレベル
したがって、視覚的に上から下への順序は、2.1、2.0、1.3、1.2 になります。1.1、1.0。
そんなに悪くないですよね?
この動作は、兄弟の数や深さに関係なく当てはまります。
子が親の上に表示されるというルールの唯一の例外は、子に負の値がある場合z-index
です。負の z-index を指定すると、親要素の下に配置されます。
したがって、次の場合:
<div class="top-level">
<div class="sub-level" style="z-index: -1;"></div>
</div>
<div class="top-level sibling"></div>
サブリスト ツリーは次のようになります。
- サブレベル - z-index-1
- トップレベル
- トップレベルの兄弟
そして、上から下へのレイヤリングは 2.0、1.0、1.1 になります。
もう少し複雑な例:
<div class="top-level">
<div class="sub-level" style="z-index: -1;"></div>
<div class="sub-level sibling"></div>
</div>
<div class="top-level sibling"></div>
リスト表現:
- サブレベル - z-index-1
- トップレベル
- サブレベル
- トップレベルの兄弟
ただし、負のz-index
esは避ける必要があります。それらが必要だと思われる場合は、HTML の構造が不適切である可能性があります。
それはそれについてです!さらに詳しく知りたい場合は、仕様を読むことをお勧めします。
、、およびを含むがこれらに限定されない他のプロパティは、独自のスタック コンテキストを作成し、要素のレンダリング順序に影響を与える可能性があることに注意してください。opacity
transform
will-change
opacity
z-index と同様に機能します。子は親と同じくらい不透明にすることができますが、負の値を持つことはできません。