コーディングのデザインで写真とテキストの要素がずれて重なっている場合があると思います。
この場合はテキストが上で画像が下になっていますが、その重なり順を変更したい時にz-indexを使います。
今回はそのz-indexの使い方を解説していきます。
(有料になっていたらすいません🙇♂️)
要素の重なり順を指定するz-indexの使い方
早速ですがz-indexの書き方を見てみます。
例えば『box』というclass名の要素にz-index
を指定する場合は以下のように書きます。
.box {
z-index: 数字;
}
z-index
の数値には以下の決まりがあります。
z-indexの数値について
・数値が大きいほうが上になる
・初期値:auto(親要素と同じ階層)→ 親要素にz-indexを指定していなければ0
それでは実際に要素を重ねたものを見てみます。
まずはz-index
を指定しない場合がこちら(背景色やフォントサイズなど重要では無いCSSは省略)
<div class="container">
<div class="box box01">BOX1</div>
<div class="box box02">BOX2</div>
<div class="box box03">BOX3</div>
</div>
.container {
position: relative;
}
.box02 {
left: 70px;
position: absolute;
top: 70px;
}
.box03 {
left: 140px;
position: absolute;
top: 140px;
}
親要素にposition: relative;
を設定し、子要素の.box02
と.box03
にposition: absolute;
を設定して要素を重ねています。
そして.box01
は何も設定しないので左上、.box02
と.box03
はleft
とtop
を使ってズラしています。
See the Pen
z-index(未使用) by junpei (@junpei-sugiyama)
on CodePen.
z-index
を使わない場合、あとに書いた要素が上に重なっていきます。
まずは.box02
を一番上にしてみます。
See the Pen
z-index(BOX02を一番上) by junpei (@junpei-sugiyama)
on CodePen.
これは.box02
にz-index: 1;
を設定しただけです。
親要素である.container
にはz-indexを指定していないので.box01
と.box03
のz-indexは0、なので.box02
にz-index: 1;
に設定するだけで一番数値が大きくなるので一番上にきます。
それではこの状態で.box01
にz-index: 2;
を設定すれば.box01
が一番上に来るでしょうか?
See the Pen
z-index(BOX01を一番上に失敗) by junpei (@junpei-sugiyama)
on CodePen.
.box01
が上に来ません・・・
z-indexが効かない原因
z-indexが効かない問題は誰もが通る道ですが、最も多いと思われる原因は『positionがstaticになっている』です。
と思うかも知れませんが、positionの初期値はstaticなので何も設定していなければpositionはstaticになっています。
そして、position: static;にはz-indexが効きません。
なのでstatic以外に何かを設定すればOKです。
ただposition: absolute;
やposition: fixed;
だと位置の絶対値が変わったり固定されてしまうので、position: relative;
を使うことが多いと思います。
それでは先ほどz-indexが効かなかった.box01
にposition: relative;
を追記してみます。
See the Pen
z-index(BOX01を一番上) by junpei (@junpei-sugiyama)
on CodePen.
今度はちゃんと一番上に.box01
が来ました。
他にも原因は考えられるので、この方法で解決しない場合はこちらの記事を参照下さい。
【CSS】z-indexが効かない主な原因3つとその対処方法
続きを見る
z-indexは非常に使う機会が多いので、ぜひ使いこなせるようになっておきましょう。
以上になります。