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

モーダルウインドウ
無料ツール
モーダルウインドウを自由に作成

テキスト・表示ボタン・サイズ・余白・角丸・背景色・文字色・影などを設定して、HTML・CSS・JavaScriptを自動生成できます。

モーダルウインドウ作成ツールを使う
新しいタブで開きます

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

モーダルウインドウ内に、さらに別のモーダルウインドウを表示する方法を紹介します。このサンプルでは、最初の「モーダルを開く」ボタンをクリックすると1つ目のモーダルウインドウが画面中央に表示され、その中にある「次のモーダルを開く」ボタンをクリックすると2つ目のモーダルウインドウへ切り替わります。モーダルから別のモーダルへ内容を段階的に表示したい場合に利用できます。

会員サイトの設定確認、ECサイトの購入手順、管理画面の詳細設定、フォーム入力後の追加確認など、一度にすべての情報を表示せず、操作に合わせて次の内容を見せたい場面に適しています。1つ目のモーダルを表示したまま重ねるのではなく、2つ目を開くときに1つ目を非表示へ切り替えるため、基本のモーダルウインドウと同じシンプルな見た目を維持できます。

HTMLでは2つのモーダルウインドウを用意し、CSSでは基本形と同じ画面中央の配置、横幅、余白、角丸、影などを設定します。JavaScriptではボタン操作に合わせてis-activeクラスを付け外しし、表示するモーダルウインドウを切り替えます。背景を暗くするオーバーレイや外側クリックによる閉じる処理は使用せず、画面幅640px以下ではモーダル内の余白を小さくするレスポンシブ対応も行っています。

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

デモ

「モーダルを開く」をクリックし、1つ目のモーダル内にある「次のモーダルを開く」をクリックしてください。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>

  <!-- デモ表示エリア -->
  <div class="modal-in-modal_wrap">

    <!-- タイトル -->
    <div class="modal-in-modal_title">
      モーダルインモーダル
    </div>

    <!-- 説明文 -->
    <p class="modal-in-modal_text">
      1つ目のモーダルウインドウから、2つ目のモーダルウインドウを表示できます。
    </p>

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

  </div>

  <!-- 1つ目のモーダルウインドウ -->
  <div class="modal-in-modal_modal" id="modal-in-modal-first" role="dialog" aria-modal="true" aria-labelledby="modal-in-modal-first-title">

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

    <!-- 1つ目のモーダル説明文 -->
    <p class="modal-in-modal_modal-text">
      このモーダルウインドウから、次のモーダルウインドウを表示できます。
    </p>

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

      <!-- 2つ目のモーダルを開くボタン -->
      <button class="modal-in-modal_next" id="modal-in-modal-next" type="button">
        次のモーダルを開く
      </button>

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

    </div>

  </div>

  <!-- 2つ目のモーダルウインドウ -->
  <div class="modal-in-modal_modal" id="modal-in-modal-second" role="dialog" aria-modal="true" aria-labelledby="modal-in-modal-second-title">

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

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

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

  </div>

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

</body>
</html>
コードをコピーする場合 使用するコードのタブを選び、「このタブをコピー」をクリックすると、現在表示中のコードをコピーできます。
サンプル一式を取得する場合 HTML・CSSなどすべてのファイルが必要な場合は、「サンプル一式をダウンロード」をクリックしてください。
Q ダウンロードしたけど、これをネット上で動かすにはどうするの?
A

Googleアカウントがあれば、InfinityFreeで無料サーバーを作成して、ダウンロードしたサンプルをネット上で動かせます。

InfinityFreeを初めて利用する場合は①から、すでにサーバーを作成している場合は②へ進んでください。

ファイル構成と設置方法

このサンプルはHTML・CSS・JavaScriptの3ファイルで構成されています。HTMLでは最初に表示するボタンと2つのモーダルウインドウを配置し、CSSでは基本のモーダルウインドウと同じ画面中央の配置やデザインを設定します。JavaScriptではボタン操作に合わせて表示するモーダルウインドウを切り替えます。

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

各ファイルの役割
index.htmlは最初に表示するボタン、1つ目のモーダルウインドウ、2つ目のモーダルウインドウを構成するファイルです。各モーダルのタイトルや説明文、「次のモーダルを開く」「閉じる」などのボタン文字を変更できます。

style.cssはデモ表示エリア、2つのモーダルウインドウ、各ボタンのデザインを設定するファイルです。モーダルは基本形と同じく画面中央へ固定して表示し、背景を暗くするオーバーレイは使用していません。

script.jsは2つのモーダルウインドウの表示を切り替えるファイルです。最初の「モーダルを開く」をクリックすると1つ目へis-activeクラスを追加します。「次のモーダルを開く」をクリックすると1つ目からis-activeを削除し、2つ目へ追加することで表示を切り替えます。

設置方法・使い方
sampleフォルダへindex.html、style.css、script.jsを配置します。3つのファイルを同じ階層へ保存したあと、sample/index.htmlをブラウザで開いてください。index.htmlからstyle.cssとscript.jsが読み込まれます。「モーダルを開く」をクリックすると1つ目のモーダルウインドウが表示され、その中の「次のモーダルを開く」をクリックすると1つ目が非表示になり、2つ目のモーダルウインドウへ切り替わります。それぞれの「閉じる」ボタンからモーダルを閉じることができます。

カスタマイズできる内容
index.htmlでは表示エリアのタイトルや説明文、1つ目と2つ目のモーダルタイトル、説明文、各ボタンの文字を変更できます。style.cssでは表示エリアやモーダルウインドウの最大横幅、余白、角丸、背景色、影、ボタンの色などを変更できます。モーダルを追加する場合はHTMLへ新しいモーダルを用意し、JavaScriptで表示を切り替える処理を追加します。

数値調整
style.css
max-width:700px;
デモ表示エリアの最大横幅です。値を大きくすると横に広がり、小さくするとコンパクトになります。

margin:40px auto;
デモ表示エリアの上下余白です。40pxを大きくすると上下の間隔が広がり、小さくすると狭くなります。

padding:32px;
デモ表示エリアの内側余白です。値を大きくすると内容と枠線の間隔が広がり、小さくすると狭くなります。

border-radius:18px;
デモ表示エリアの角丸です。値を大きくすると丸みが強くなり、0にすると四角になります。

font-size:22px;
デモ表示エリアとモーダルのタイトルに使用している文字サイズです。値を大きくすると文字が大きくなり、小さくすると小さくなります。

padding:12px 24px;
「モーダルを開く」と「次のモーダルを開く」ボタンの内側余白です。上下の12pxを大きくするとボタンが高くなり、左右の24pxを大きくすると横に広がります。

width:calc(100% - 40px);
モーダルウインドウの横幅です。画面幅から40pxを引くことで左右に余白を確保します。40pxを大きくすると左右の余白が広がります。

max-width:420px;
モーダルウインドウの最大横幅です。値を大きくするとモーダルが横に広がり、小さくするとコンパクトになります。

padding:28px;
モーダルウインドウの内側余白です。値を大きくすると内容と外周の間隔が広がり、小さくすると狭くなります。

border-radius:18px;
モーダルウインドウの角丸です。値を大きくすると丸みが強くなり、0にすると四角になります。

box-shadow:0 20px 40px ...
モーダルウインドウの影です。20pxは影の縦方向の位置、40pxはぼかし範囲です。値を大きくすると影の位置や広がりが大きくなります。

gap:12px;
1つ目のモーダル内にある2つのボタンの間隔です。値を大きくするとボタン同士の間隔が広がり、小さくすると狭くなります。

padding:10px 20px;
「閉じる」ボタンの内側余白です。上下の10pxを大きくするとボタンが高くなり、左右の20pxを大きくすると横に広がります。

レスポンシブ対応
このサンプルはレスポンシブ対応です。モーダルウインドウにはwidth:calc(100% - 40px)とmax-width:420pxを設定しているため、画面が狭くなると左右に余白を残しながら横幅が縮小されます。また、640px以下ではデモ表示エリアをpadding:24px 18px;、モーダルウインドウをpadding:24px 18px;へ変更し、1つ目のモーダル内にあるボタンをflex-direction:column;で縦並びに切り替えています。


こちらもおすすめ


コメント