カテゴリ: CSS 更新日: 2026/01/13

CSSで要素を重ねる方法を完全ガイド!Gridとz-indexの活用術

子要素を重ねる方法(grid内のz-indexとpositionの活用)
子要素を重ねる方法(grid内のz-indexとpositionの活用)

先生と生徒の会話形式で理解しよう

生徒

「Webサイトで画像の上に文字を載せたり、パネルを重ねたりしたいのですが、どうすればいいですか?」

先生

「CSSの『Gridレイアウト』や『Position』、そして『z-index』という機能を使うと、要素を自由に重ねることができますよ。」

生徒

「要素を重ねるのって難しそうですね。どちらを使えばいいんでしょうか?」

先生

「目的によって使い分けますが、最近はGridを使うと非常にシンプルに書けます。まずは基本的な仕組みから解説しますね!」

1. 要素が重なる仕組みとレイヤーの考え方

1. 要素が重なる仕組みとレイヤーの考え方
1. 要素が重なる仕組みとレイヤーの考え方

Webページ上の要素(画像やテキストの箱)は、通常は上から下、左から右へと順番に並んでいきます。これを専門用語で「通常のフロー」と呼びます。しかし、デザインによっては、写真の上にボタンを置いたり、背景の上に説明文を重ねたりしたいことがあります。

これを実現するには、要素を「レイヤー(層)」として考える必要があります。画像編集ソフトやアニメのセル画のように、透明なシートを何枚も重ねていくイメージです。手前に表示したいもの、奥に配置したいものを指定することで、奥行きのある立体的なレイアウトが作れるようになります。この奥行きの順番を管理するのが「z-index」というプロパティです。

2. Positionプロパティを使った伝統的な重ね方

2. Positionプロパティを使った伝統的な重ね方
2. Positionプロパティを使った伝統的な重ね方

最も古くから使われている方法が position を使う方法です。親要素(土台となる箱)に position: relative; を指定し、動かしたい子要素に position: absolute; を指定します。これにより、子要素は親要素の中を自由に飛び回れるようになり、他の要素を無視して重なることが可能になります。

例えば、写真の右上に「新着」というラベルを重ねたい時などに便利です。しかし、この方法は要素を浮かせている状態なので、全体の高さを計算し直す必要があったりと、少しコツが必要です。


<style>
    .container-pos {
        position: relative;
        width: 150px;
        height: 100px;
    }
    .base-image {
        width: 100%;
        height: 100%;
        object-fit: cover;
    }
    .label-abs {
        position: absolute;
        top: 10px;
        left: 10px;
        background: red;
        color: white;
        padding: 5px;
    }
</style>

<div class="container-pos">
    <img src="/img/sample150-100.jpg" alt="サンプル画像" class="base-image">
    <div class="label-abs">新着</div>
</div>
ブラウザ表示

3. Gridレイアウトで子要素を重ねる新しい手法

3. Gridレイアウトで子要素を重ねる新しい手法
3. Gridレイアウトで子要素を重ねる新しい手法

最近主流になりつつあるのが、 display: grid; を使った方法です。グリッドレイアウトは本来、マス目を作ってきれいに並べるためのものですが、実は同じマス目(セル)の中に複数の要素を配置すると、自動的に重なるという性質があります。

この方法の最大のメリットは、 position: absolute; のように要素を浮かせる必要がないため、レイアウトが崩れにくく、中央揃えなども簡単に行える点です。親要素を1マスだけのグリッドに設定し、その中に画像と文字を入れるだけで、きれいに重なります。

4. グリッドで画像の上に文字を中央配置する

4. グリッドで画像の上に文字を中央配置する
4. グリッドで画像の上に文字を中央配置する

具体的にグリッドで重ねるコードを見てみましょう。 grid-area: 1 / 1; という指定を子要素に書くことで、「1行目の1列目」という同じ場所に全員が集まるように指示します。これで、後から書いた要素が上に重なっていきます。


<style>
    .grid-stack {
        display: grid;
        width: 300px;
        height: 200px;
    }
    .grid-item {
        grid-area: 1 / 1; /* 同じマスに配置 */
    }
    .image-bg {
        width: 100%;
        height: 100%;
        object-fit: cover;
    }
    .text-overlay {
        display: flex;
        align-items: center;
        justify-content: center;
        color: white;
        font-weight: bold;
        background: rgba(0,0,0,0.4); /* 半透明の黒 */
    }
</style>

<div class="grid-stack">
    <img src="/img/sample150-100.jpg" alt="背景" class="grid-item image-bg">
    <div class="grid-item text-overlay">画像の上に重なる文字</div>
</div>
ブラウザ表示

5. 重なりの順番を制御するz-indexの使い方

5. 重なりの順番を制御するz-indexの使い方
5. 重なりの順番を制御するz-indexの使い方

複数の要素を重ねたとき、「どっちを一番手前に持ってくるか」を数字で指定するのが z-index プロパティです。通常、HTMLに書かれた順番が後のものほど手前に来ますが、このプロパティを使えば順番を自由に入れ替えることができます。

注意点として、 z-indexstatic(初期値)以外の position(relative, absoluteなど)が指定されている要素、またはグリッドアイテムに対して有効です。数字が大きいほど手前(上)に表示され、マイナスの値を指定すると奥(下)に隠れます。テレビのチャンネルボタンのように、「1番より2番が強い」と覚えるとわかりやすいですよ。

6. z-indexで3つのボックスを重ねる実践

6. z-indexで3つのボックスを重ねる実践
6. z-indexで3つのボックスを重ねる実践

実際に3つの要素を少しずつずらして重ね、 z-index で順序を変える例を見てみましょう。背景色を分けると重なり順がはっきり確認できます。重なりを指定することで、奥行きのあるモダンなデザインが作れます。


<style>
    .stack-wrapper {
        position: relative;
        height: 150px;
    }
    .box {
        position: absolute;
        width: 100px;
        height: 100px;
        display: flex;
        align-items: center;
        justify-content: center;
        color: white;
    }
    .box1 { background: blue; top: 0; left: 0; z-index: 3; }
    .box2 { background: green; top: 20px; left: 20px; z-index: 2; }
    .box3 { background: orange; top: 40px; left: 40px; z-index: 1; }
</style>

<div class="stack-wrapper">
    <div class="box box1">一番上(3)</div>
    <div class="box box2">真ん中(2)</div>
    <div class="box box3">一番下(1)</div>
</div>
ブラウザ表示

7. 初心者がハマりやすいスタック文脈の注意点

7. 初心者がハマりやすいスタック文脈の注意点
7. 初心者がハマりやすいスタック文脈の注意点

要素を重ねる際に多くの初心者が「z-indexを大きな数字にしたのに一番上に来ない!」というトラブルに直面します。これには「スタック文脈」というルールが関係しています。これは、ある親要素が強力な「重なりのグループ」を作ってしまうと、その中にある子要素はグループの外にいる要素を追い越せないというルールです。

例えば、親要素A(z-index: 1)の中にいる子要素が z-index: 999 だとしても、隣にある別の親要素B(z-index: 2)より手前に来ることはできません。マンションの1階の部屋の住人が、どれだけ背伸びしても2階の床を突き抜けて上にいけないのと同じです。重なりがおかしいと感じたら、一度親要素の設定を確認してみるのが解決の近道です。

8. GridとPositionの使い分けのコツ

8. GridとPositionの使い分けのコツ
8. GridとPositionの使い分けのコツ

最後に、どのような時にどちらの重ね方を使えばいいかを整理しましょう。背景画像の上にタイトルを載せるような、中心を合わせた「どっしりした重ね方」には、レイアウトが崩れにくい Grid が最適です。一方で、写真の端っこに小さなバッジを付けたり、画面の隅にボタンを固定したりする「自由な配置」には Position が向いています。

Webデザインの幅を広げるためには、この「重なり」の技術は必須です。最初は Grid で同じマスに入れる方法から試してみて、慣れてきたら z-index で細かい順序を調整してみてください。要素を自在に重ねられるようになれば、あなたの作るサイトも一気にプロのような仕上がりに近づきますよ!

2026年最新 スキルアップ・実践セミナー

【60分集中】Flexboxを完全攻略!最新CSS3で「崩れない・迷わない」モダンUI構築セミナー

「魅せる力」をコードで実現。CSS3でモダンWebデザインのプロトタイピングを。

本講座では、単に色を変えるだけではなく、「ユーザーを迷わせないUIデザイン」「崩れないレイアウト設計」の本質を学びます。最新のCSS3とモダンなレイアウト手法を通じて、プロの現場で通用する「美しさと機能性を両立した実装力」を最短距離で習得します。

具体的なワークショップ内容と環境

【つくるもの】
HTMLで作成した骨組みに対し、商用サイトでも採用される「スタイリッシュなカード型UI」や「レスポンシブなナビゲーション」を構築します。色の選定基準や余白(ホワイトスペース)の黄金比など、デザインの理論をコードに落とし込む工程を体験してください。

【開発環境】
フロントエンド開発の標準であるVisual Studio Code (VS Code)を継続使用。CSSの記述を効率化するプラグインや、ブラウザのデベロッパーツール(検証機能)を駆使して、リアルタイムでデザインを微調整するプロのワークフローを再現します。

この60分で得られる3つの技術資産

1. 現代のデファクトスタンダード「Flexbox」

要素の横並びや中央揃えを自由自在に操り、どんなデバイスでも崩れないレスポンシブな配置術を完全理解します。

2. メンテナンス性を高めるCSS設計の基礎

後から修正しやすい「壊れにくいコード」の書き方を伝授。プロの現場で必須となる命名規則の考え方を学びます。

3. パフォーマンスと美しさの両立

画像の最適化や軽量な装飾技法など、ページの表示速度を落とさずに高級感のある演出を行うテクニックを習得します。

※本講座は、HTMLの基礎を終えた後のステップアップ講座です。Webデザイナー、UIデザイナー、フロントエンドエンジニアへの道を切り開く「魅せる技術」を、モクモク独自のパーソナル指導で着実に定着させます。

【60分集中】Flexboxを完全攻略!最新CSS3で「崩れない・迷わない」モダンUI構築セミナー

リラックスしながら、学ぶことが大切です。しっかりと基礎を理解しましょう!

各回少人数・マンツーマン形式で徹底サポート

このセミナーの詳細・お申し込みはこちら
カテゴリの一覧へ
新着記事
New1
Bootstrap
Bootstrap 3から5への一気移行ガイド!初心者でもわかる段階的リファクタリングの進め方
New2
Bootstrap
Bootstrapのバージョン移行ガイド!v3からv4、そしてv5の違いを初心者向けに徹底解説
New3
CSS
CSSブレイクポイントの整理術!多すぎる設定をスッキリさせてレスポンシブを楽にする方法
New4
HTML
HTML iframeタグの使い方|外部ページ埋め込みの基本を初心者向けに解説
人気記事
No.1
Java&Spring記事人気No1
CSS
CSSで要素のサイズを自動調整!autoとfit-contentの使い方
No.2
Java&Spring記事人気No2
CSS
CSSのフレックスボックスで使うgapの使い方を完全ガイド!初心者でもわかる余白調整の基本
No.3
Java&Spring記事人気No3
Bootstrap
Bootstrap Iconsのライセンスと商用利用の注意点【著作権と表記を初心者向けに解説】
No.4
Java&Spring記事人気No4
CSS
CSSのメディアタイプ完全ガイド!画面表示と印刷用スタイルを切り替える方法
No.5
Java&Spring記事人気No5
CSS
CSSのmin-widthとmax-widthの違いを徹底解説!モバイルファースト設計の基本
No.6
Java&Spring記事人気No6
CSS
CSSで要素を消す方法を完全ガイド!display:noneとvisibility:hiddenの違い
No.7
Java&Spring記事人気No7
CSS
CSSでGoogle Fontsを使う方法を完全ガイド!初心者でもできるフォントの変更
No.8
Java&Spring記事人気No8
CSS
CSSのメディアクエリをネストする!最新の書き方とSCSS・PostCSS活用術