CSS Web制作

【CSS】z-indexが効かない主な原因3つとその対処方法

※ 当サイトではアフィリエイト広告を利用しています

z-indexが効かないけどなんで??

要素の重なり順を指定するz-indexですが、数値を指定しても順番が変わらないことがあります。

実はこれは誰もが通る道です。

今回はそんな避けては通れないz-indexが効かない問題の対処方法を解説していきます。

z-indexの使い方については以下の記事を参照下さい。

あわせて読みたい
【CSS】要素の重なり順を指定するz-indexの使い方
【CSS】要素の重なり順を指定するz-indexの使い方

続きを見る

 

完全無料のプログラミングスクール『ZeroPlus Gate』
30日間でWeb制作を学べる無料のプログラミングスクールがこちら
  • 30日間でWeb制作を学べる
  • 完全無料
  • 現役エンジニアへの質問無制限
  • オンラインの動画学習なので時間場所を問わず勉強可能
  • 最大4回の学習サポート面談
  • 受付は1日25名までの先着制
無料なのに専属のメンターが付き、現役エンジニアへの質問も無制限という破格のサービスです。
いきなり数十万するプログラミングスクールは厳しい・・・という人のお試しに最適。
現在は無料ですがいつ有料になるか分からないので、気になる方はお早めに👇

\ 完全無料 /

ZeroPlus Gate公式サイト

先着1日25名まで!

z-indexが効かない主な原因3つとその対処方法

z-indexが効かないケースは主に3つあります。

1つずつ解説していきます。

 

原因①:positionがstaticになっている

最も多いと思われる原因は『positionがstaticになっている』です。

position: static;なんて設定してないよ

と思うかも知れませんが、positionの初期値はstaticなので何も設定していなければpositionはstaticになっています。

そしてposition: static;には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;
}
.box01{
  z-index: 3;
}
.box02 {
  left: 70px;
  position: absolute;
  top: 70px;
  z-index: 2;
}
.box03 {
  left: 140px;
  position: absolute;
  top: 140px;
  z-index: 1;
}

それぞれの要素にz-indexを設定して、上から順に.box01.box02.box03になるようにしましたが、.box01にはpositionを設定していません。

それではどうなるか見てみます。

See the Pen
z-index(BOX01を一番上:失敗2)
by junpei (@junpei-sugiyama)
on CodePen.

z-indexの数値が一番大きい.box01が一番上に来ていません。

原因は先ほど書いたように.box01positionを設定していないからです。

つまり.box01のpositionはz-indexが効かない初期値のstaticです。

.box02position: absolute;なのでz-indexが効いて.box03より上に来ていますが、.box01にはz-indexは効いていないので一番上に来ていません。

どうすればいいかというと、.box01z-indexが効くようにpositionを初期値のstatic以外に設定すればOKです。

ただposition: absolute;position: fixed;だと位置の絶対値が変わったり固定されてしまうので、position: relative;を使うことが多いと思います。

ということで、上記の.box01position: relative;を設定したのがこちらです。

See the Pen
z-index(BOX01を一番上:成功2)
by junpei (@junpei-sugiyama)
on CodePen.

ちなみにz-indexを使わない場合は、以下のようにあとに書いた要素が上に重なっていきます。

See the Pen
z-index(未使用)
by junpei (@junpei-sugiyama)
on CodePen.

 

原因②:親要素のz-indexが小さい

次のHTMLはこちらです。

<div class="container">
  <div class="box box01">
    box01
    <div class="box box02">
      box02
    </div>
  </div>
  <div class="box box03">
    box03
  </div>
</div>

今回は.box01の子要素に.box02があります。

そしてCSSはこちらです。

.container {
  position: relative;
}
.box01 {
  position: relative;
  z-index: 1;
}
.box02 {
  left: 70px;
  position: absolute;
  top: 70px;
  z-index: 3;
}
.box03 {
  left: 140px;
  position: absolute;
  top: 140px;
  z-index: 2;
}

z-indexの数値が一番大きいのは.box02なので、.box02が一番上に来る・・・でしょうか?

See the Pen
z-index(BOX01を一番上:失敗3)
by junpei (@junpei-sugiyama)
on CodePen.

.box02は一番上には来ていませんね。

原因は『親要素のz-indexが小さいからです。

今回の場合、.box03z-indexが2に対して.box02z-indexは3ですが、.box02の親要素である.box01z-index1だからです。

つまり.box02z-indexは3ではなく1になり、.box03z-indexの2より上にはならないということです。

ちょっとややこしいかも知れませんが、見るべきポイントは.box02だけです。

  • box01:z-index 1
  • box02:z-index 3 → 親要素のbox01のz-indexが1なので、box02のz-indexも1
  • box03:z-index 2

なのでHTMLを変えずに.box02を一番上にしたい場合は、z-indexを以下のように変更すればOKです。

  • box01:z-index 1 → 3
  • box02:z-index 3 → 2
  • box03:z-index 2 → 1

これであれば.box02の親要素である.box01z-index.box03より大きいので、.box02.box03より上に来ます。

See the Pen
z-index(BOX01を一番上:成功3)
by junpei (@junpei-sugiyama)
on CodePen.

 

原因③:数値が正しくない

z-indexの数値には以下のような決まりがあります。

z-indexの数値について

・整数:−2147483647(最小値)〜2147483647(最大値)
・数値が大きいほうが上になる

 

最小値と最大値

z-indexには最小値と最大値があります。

そこまで大きな数値を指定することはないと思うので、極端に大きな数値にしなければ大丈夫です。

 

整数のみ

z-indexは整数のみなので、小数点にすると無効となります。

CSSのプロパティには小数点が使えるものも多いですが、z-indexは使えないので注意しましょう。

また、単位は不要なのでpxなどを付けないようにしましょう。

まとめ

z-indexは数値が大きい方が必ず上に来る・・・という単純なものではなく、いくつものトラップがあるので効かないと思ったらこの記事を思い出してみて下さい。

z-indexが効かない時の対処方法

・positionをstatic以外で設定
・親要素のz-indexが小さくないか確認
・整数かつ単位なしで設定

以上になります。

この記事が役に立ったと思ったら、シェアボタンからX(旧Twitter)などにシェアすると、いいねされてフォロワーが増えたりすることがあるよ!

 

Web制作おすすめ教材と案件獲得サービス
当ブログではWeb制作学習におすすめの教材を厳選してご紹介しています。
こちらの記事を参考に教材を購入して成果を出している人もたくさんいるので、自分に必要な教材を探してみて下さい。
また、学習面だけでなく営業面である案件獲得サービスもご紹介しています。
スキルが身についても仕事がなければ意味がないので、営業に不安がある人はこちらの記事をぜひ参考にしてみて下さい。
この記事を参考にスキルと営業力を身につけて稼げるようになりましょう!

-CSS, Web制作