CSSで要素を重ねたとき、「z-index: 9999;にしたのに最前面に出ない」「ヘッダーやモーダルが他の要素の下に隠れる」と困ったことはありませんか?z-indexは、数値を大きくすれば必ず勝つように見えますが、positionの指定やスタッキングコンテキストの影響で、思った通りに前面へ出ないことがあります。
z-indexを最前面にしたいときは、数値を大きくする前に、positionの指定とスタッキングコンテキストを確認することが重要です。この記事では、z-indexの基本、効かない原因、最前面に出す実務コード、モーダルや固定ヘッダーでの使い分けまで解説します。
CSSのz-indexとは?
z-indexとは、要素が重なったときの前後関係を指定するCSSです。
.modal {
position: fixed;
z-index: 1000;
}
数値が大きいほど前面に表示されやすくなります。
z-indexは「奥行き」の順番を決める
Webページは横方向・縦方向だけでなく、要素が重なる「奥行き」の方向もあります。z-indexはこの奥行き方向の順番を決めるために使います。
| 指定 | 表示イメージ |
|---|---|
z-index: 1; |
低めの前面 |
z-index: 10; |
より前面 |
z-index: 1000; |
ヘッダーやモーダルなど強く前面に出す |
z-indexは、重なっている要素の前後関係を調整するためのCSSです。
関連記事:「CSSのrelativeとabsoluteの使い方を解説」
z-indexを最前面にする基本コード
要素を最前面に出したい場合は、まずpositionとz-indexをセットで指定します。
.front-box {
position: relative;
z-index: 10;
}
固定ヘッダーやモーダルなら、次のように書くことが多いです。
.modal {
position: fixed;
inset: 0;
z-index: 1000;
}
positionを指定していないと効かないことがある
z-indexは、主にpositionが指定された要素や、flex/gridの子要素などで効果を発揮します。
.box {
z-index: 9999;
}
.box {
position: relative;
z-index: 9999;
}
z-indexが効かないときは、まずpositionがstaticのままになっていないか確認しましょう。
原因1:positionが指定されていない
最も基本的な原因は、positionが指定されていないことです。
position: static;は初期値です。この状態では、z-indexを指定しても期待通りに効かない場合があります。
.target {
position: relative;
z-index: 20;
}
z-indexを使うときは、position: relative;、absolute、fixed、stickyなどを指定しているか確認しましょう。
原因2:親のスタッキングコンテキストに閉じ込められている
z-indexで一番つまずきやすいのが、スタッキングコンテキストです。
スタッキングコンテキストとは、要素の重なり順を管理する独立したグループのようなものです。ある親要素がスタッキングコンテキストを作ると、その子要素のz-indexは親の中だけで比較されます。
z-index: 9999でも勝てない例

<div class="parent-a">
<div class="child-a">z-index: 9999</div>
</div>
<div class="parent-b">
<div class="child-b">前面に見える要素</div>
</div>
.parent-a {
position: relative;
z-index: 1;
}
.child-a {
position: absolute;
z-index: 9999;
}
.parent-b {
position: relative;
z-index: 2;
}
この場合、.child-aがz-index: 9999;でも、親の.parent-aがz-index: 1;なので、z-index: 2;の.parent-bより前に出られません。
z-indexは、親の重なりグループを超えて自由に最前面へ出られるわけではありません。
原因3:transformやopacityで新しい重なりグループができている
transformやopacityなどが指定された要素は、新しいスタッキングコンテキストを作ることがあります。
.card {
transform: translateZ(0);
}
.badge {
position: absolute;
z-index: 9999;
}
このような場合、.badgeが思ったほど前面に出ないことがあります。
スタッキングコンテキストを作りやすい指定
代表的なものは次の通りです。
positionとz-indexの組み合わせposition: fixed;やposition: sticky;opacityが1未満transformがnone以外filterやperspectiveisolation: isolate;
z-indexが効かないときは、対象要素だけでなく親や祖先要素のtransform、opacity、filterも確認しましょう。
原因4:後から読み込まれたCSSに上書きされている
z-indexの指定自体は正しくても、後から読み込まれたCSSに上書きされている場合があります。
.modal {
z-index: 1000;
}
.theme-modal {
z-index: 10;
}
WordPressテーマやプラグインでは、テーマ側のCSSが後から読み込まれ、意図しない値で上書きされることがあります。
対策:開発者ツールで実際の値を確認する
実務では、ブラウザの検証機能で対象要素を選び、最終的にどのz-indexが効いているか確認します。z-indexを大きくする前に、そもそも指定が上書きされていないかを確認しましょう。
モーダル・ヘッダー・固定ボタンのz-index設計例
z-indexを場当たり的に9999にしていくと、あとで管理しづらくなります。実務では、役割ごとに段階を決めておくと安全です。
| UI | z-index例 | 考え方 |
|---|---|---|
| 通常の装飾バッジ | 10 |
カード内で少し前面に出す |
| 固定ヘッダー | 100 |
本文より前面 |
| 固定CTA・トップボタン | 200 |
ヘッダーより下か同程度 |
| モーダル背景 | 900 |
ページ全体を覆う |
| モーダル本体 | 1000 |
最前面に出す |
モーダルを最前面にするコード例
.modal-overlay {
position: fixed;
inset: 0;
z-index: 900;
background: rgba(0, 0, 0, 0.6);
}
.modal-content {
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
z-index: 1000;
background: #fff;
}
z-indexは大きい数字を乱用するより、役割ごとに段階を決めて管理する方が安全です。
z-indexを最前面にしたいときのチェックリスト
| 確認項目 | 見るポイント | 対策 |
|---|---|---|
| position | staticのままではないか | position: relative;などを指定 |
| 親のz-index | 親が低い階層にいないか | 親側のz-indexも見直す |
| スタッキングコンテキスト | transformやopacityがないか | 不要な指定を外す、構造を変える |
| 上書き | テーマや別CSSに負けていないか | 開発者ツールで確認する |
| 数値設計 | 9999を乱用していないか | 役割ごとに段階を決める |
公式ドキュメントも確認する
z-indexやスタッキングコンテキストを正確に確認したい場合は、公式情報も参考になります。
- HTML・CSSを学んで自分だけのスキルを身につけたい
- HTML・CSSのスキルを身につけてwebクリエイターとして活躍したい
- サポートが充実しているプログラミングスクールを知りたい
そんな思いを持った方は忍者CODEのWeb制作コースがおすすめです!
忍者CODEは未経験からでもプロのエンジニアを目指せるオンラインプログラミングスク―ルです。
期間制限なく動画を視聴できるので、自分のペースで学習することができます!
まとめ:z-indexを最前面にするには親の階層まで確認しよう
この記事では、CSSのz-indexを最前面にする方法を解説しました。
z-indexが効かないときは、数値だけでなく、position、親のz-index、スタッキングコンテキスト、CSSの上書きを確認しましょう。
最前面にしたいからといって、毎回9999を指定すると管理が難しくなります。ヘッダー、固定ボタン、モーダルなど、役割ごとに数値のルールを作ると、実務でも扱いやすくなります。
忍者CODEマガジンは、未経験からでもプロのエンジニアを目指せるプログラミングスクール「忍者CODE」が運営しているプログラミング情報サイトです。
- プログラミングの効果的な学習方法
- プログラミング用語の解説
- エンジニアのキャリアに関する情報
など、プログラミングを始めたばかりの初学者に役立つ記事を幅広く公開しています。




