モーダルウインドウ内にモーダルウインドウを表示する方法【HTML/CSS/JavaScript・サンプルコード付き】

モーダルウインドウ

モーダルウインドウ内にモーダルウインドウを表示する方法

モーダルウインドウ内にモーダルウインドウを表示する方法を紹介します。最初のモーダルを開いた状態から、さらに別のモーダルウインドウを重ねて表示できるサンプルです。確認画面や詳細情報、注意事項などを段階的に表示したい場面で利用できます。

サンプルはHTML・CSS・JavaScriptのみで実装しており、1つ目のモーダル内のボタンをクリックすると2つ目のモーダルが表示されます。それぞれ独立して開閉できるため、複数の確認画面や補足情報を分かりやすく表示できます。背景やレイヤーも適切に管理しているため、どちらのモーダルが表示されているか迷わず操作できます。

管理画面や会員サイト、ECサイトなどで「詳細を確認する」「本当に実行しますか」といった段階的な確認画面を作りたい場合にも利用できます。タイトルやメッセージ、ボタン名は用途に合わせて自由に変更でき、さまざまな画面へ応用しやすい構成です。

コードについて 本記事のコードはサンプルコードです。ご利用前に必ず動作確認を行ってください。
免責事項 本コードの利用により発生した損害について、当サイトは一切の責任を負いません。

デモ

「モーダルを開く」をクリックすると1つ目のモーダルが表示されます。その中の「次のモーダルを開く」をクリックすると、さらに2つ目のモーダルウインドウが表示されます。

コードをコピーして使おう!

<!DOCTYPE html>
<html lang="ja">
<head>

  <!-- 文字コード -->
  <meta charset="UTF-8">

  <!-- スマートフォン表示対応 -->
  <meta name="viewport" content="width=device-width, initial-scale=1.0">

  <!-- ページタイトル -->
  <title>モーダルウインドウ内にモーダルウインドウを表示</title>

  <!-- CSSファイルを読み込み -->
  <link rel="stylesheet" href="style.css">

</head>
<body>

  <!-- 1つ目のモーダルを開く操作エリア -->
  <div class="modal-in-modal-window_wrap">

    <!-- 操作エリアのタイトル -->
    <div class="modal-in-modal-window_title">
      モーダル内にモーダルを表示
    </div>

    <!-- 操作エリアの説明文 -->
    <p class="modal-in-modal-window_text">
      1つ目のモーダルから2つ目のモーダルを表示できます。
    </p>

    <!-- 1つ目のモーダルを開くボタン -->
    <button
      class="modal-in-modal-window_button"
      type="button"
      data-modal-in-modal-open-first>
      モーダルを開く
    </button>

  </div>

  <!-- 1つ目のモーダル背景 -->
  <div
    class="modal-in-modal-window_overlay"
    data-modal-in-modal-first>

    <!-- 1つ目のモーダル本体 -->
    <div
      class="modal-in-modal-window_modal"
      role="dialog"
      aria-modal="true"
      aria-labelledby="modal-in-modal-first-title">

      <!-- 1つ目のモーダルタイトル -->
      <div
        class="modal-in-modal-window_modal-title"
        id="modal-in-modal-first-title">
        1つ目のモーダル
      </div>

      <!-- 1つ目のモーダル説明文 -->
      <p class="modal-in-modal-window_modal-text">
        このモーダル内からさらに別のモーダルを表示できます。
      </p>

      <!-- 2つ目のモーダルを開く操作エリア -->
      <div class="modal-in-modal-window_inner">

        <!-- 2つ目のモーダルを開くボタン -->
        <button
          class="modal-in-modal-window_button"
          type="button"
          data-modal-in-modal-open-second>
          次のモーダルを開く
        </button>

      </div>

      <!-- 1つ目のモーダルを閉じるボタン -->
      <button
        class="modal-in-modal-window_close"
        type="button"
        data-modal-in-modal-close-first>
        閉じる
      </button>

    </div>

  </div>

  <!-- 2つ目のモーダル背景 -->
  <div
    class="modal-in-modal-window_overlay-second"
    data-modal-in-modal-second>

    <!-- 2つ目のモーダル本体 -->
    <div
      class="modal-in-modal-window_modal"
      role="dialog"
      aria-modal="true"
      aria-labelledby="modal-in-modal-second-title">

      <!-- 2つ目のモーダルタイトル -->
      <div
        class="modal-in-modal-window_modal-title"
        id="modal-in-modal-second-title">
        2つ目のモーダル
      </div>

      <!-- 2つ目のモーダル説明文 -->
      <p class="modal-in-modal-window_modal-text">
        モーダルウインドウ内から表示されたモーダルです。
      </p>

      <!-- 2つ目のモーダルを閉じるボタン -->
      <button
        class="modal-in-modal-window_close"
        type="button"
        data-modal-in-modal-close-second>
        閉じる
      </button>

    </div>

  </div>

  <!-- JavaScriptファイルを読み込み -->
  <script src="script.js"></script>

</body>
</html>

ファイル構成と設置方法

このサンプルはHTML・CSS・JavaScriptの3ファイルで構成されています。HTMLには1つ目と2つ目のモーダルウインドウの構造、CSSには各モーダルや背景、ボタンのデザイン、JavaScriptにはモーダルを順番に開閉する処理を記述しています。1つ目のモーダルを表示した状態から、さらに2つ目のモーダルを前面へ重ねて表示できます。

1つ目のモーダル内にある「次のモーダルを開く」ボタンをクリックすると、2つ目のモーダルが1つ目より前面へ表示されます。2つ目のモーダルだけを閉じると1つ目のモーダルへ戻り、1つ目のモーダルを閉じると両方が非表示になります。

確認画面から詳細情報を表示する場合や、操作内容を確認した後に最終確認を重ねて表示する場合など、段階的な案内が必要な画面へ利用できます。各モーダルのタイトル、説明文、ボタン名、背景色、重なり順などはコード内で変更できます。

sample/
├── index.html
├── style.css
└── script.js

各ファイルの役割
index.html
1つ目のモーダルを開くボタン、1つ目と2つ目のモーダルウインドウ、各モーダルの閉じるボタンを管理します。タイトル、説明文、ボタン名を変更できます。

style.css
操作エリア、モーダル背景、モーダル本体、ボタン、余白、角丸、影、重なり順を管理します。2つ目のモーダルには1つ目より大きいz-indexを指定し、前面へ表示しています。

script.js
1つ目のモーダルを開く処理、2つ目のモーダルを開く処理、それぞれを閉じる処理を管理します。1つ目を閉じる際は、2つ目も同時に閉じる構成です。

設置方法・使い方
sampleフォルダへindex.html・style.css・script.jsを配置します。sample/index.htmlをブラウザで開き、「モーダルを開く」をクリックすると1つ目のモーダルが表示されます。その中の「次のモーダルを開く」をクリックすると、2つ目のモーダルが前面へ表示されます。

2つ目の「閉じる」をクリックすると2つ目だけが閉じ、1つ目のモーダルへ戻ります。1つ目の「閉じる」をクリックすると、表示中の2つ目のモーダルも含めて閉じます。

カスタマイズできる内容
index.htmlでは各モーダルのタイトル、説明文、開くボタンと閉じるボタンの表示内容を変更できます。style.cssではモーダルの横幅、背景色、ボタン色、余白、角丸、影、背景の濃さを変更できます。script.jsでは各ボタンをクリックしたときの開閉処理を編集できます。

数値調整
style.cssのmax-width:420px;を変更するとモーダルの最大横幅が変わります。padding:28px;を変更するとモーダル内部の余白が変わります。z-index:9998;とz-index:9999;はモーダルの重なり順を表し、値が大きい2つ目のモーダルが前面へ表示されます。background:rgba(0,0,0,.55);とbackground:rgba(0,0,0,.65);の小数値を変更すると背景の暗さが変わります。

レスポンシブ対応
style.cssではwidth:100%、max-width、padding、@media(max-width:640px)を使用してレスポンシブ対応しています。スマートフォンでは操作エリアとモーダル内部の余白が小さくなり、画面幅に合わせて表示されます。タブレット・PCでは最大横幅を保った状態で画面中央に表示されます。



コメント