はじめに
要素を重ねる時、z-indexの数字だけ意識していませんか?
スタックコンテキストを意識していないとz-indexの値をいくら大きくしても要素が思い通りに前面に来ない!という事があります。
今回は、そのスタックコンテキストを取り扱っていきます!
スタックコンテキストとは
positionプロパティの値がstatic以外で、z-indexプロパティの値がauto以外の場合に生成される文脈 だそうです。
うーん、わかりづらい!笑
実践
とりあえずベースとなるHTMLとCSSを作成
See the Pen
stack-context1 by Daichi Nabeshima (@nabeshi)
on CodePen.
次に.red
, .blue
, .green
にz-indexを付与する。
See the Pen
stack-context1 by Daichi Nabeshima (@nabeshi)
on CodePen.
z-indexが-100なのに最前面に来ているだと。。。
ここでもう一度スタックコンテキストの定義を思い出してみましょう。
positionプロパティの値がstatic以外で、z-indexプロパティの値がauto以外の場合に生成される文脈
.red
, .blue
, .green
はこの条件をクリアしているのでスタックコンテキストを生成している状態になります!
html要素はデフォルトでルートスタッックコンテキストを生成しています。
また、スタックコンテキストは必ずどこかのスタックコンテキストに所属します。
.red
と.blue
はルートスタックコンテキストに所属し、.green
は.blue
のスタックコンテキストに所属します。
z-indexは所属するスタックコンテキスト内での順番を指定するプロパティなので、-100の値を設定しても所属するコンテキストが異なるため順番に変動がなかったということになります。
まとめ
- positionプロパティの値が
static
以外のかつ、z-indexプロパティの値がauto
以外の要素がスタックコンテキストを生成する - html要素は上記の条件に該当せず、必ずルートスタックテキストとなる
- スタックコンテキストは必ずどこかのスタックコンテキストに所属する
- z-indexは所属するスタックコンテキスト内での順番を指定するプロパティ