複数モーダルウインドウを切り替えて表示する方法【HTML/CSS/JavaScript・サンプルコード付き】

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

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

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

複数モーダルウインドウを切り替えて表示する方法

複数モーダルウインドウを切り替えて表示する方法を紹介します。このサンプルでは、「お知らせ」「プロフィール」「設定」の3つのボタンを用意し、クリックしたボタンに対応するモーダルウインドウだけを画面中央へ表示します。基本のモーダルウインドウと同じ開閉方法を使用しながら、JavaScriptで複数のモーダルを選択して表示できるようにします。

お知らせの詳細を表示するページ、会員サイトのプロフィール確認、管理画面の設定案内、ECサイトの商品情報や補足説明など、同じページから複数の内容を個別に表示したい場面で利用できます。表示中のモーダルには「閉じる」ボタンを配置し、クリックすると非表示になります。背景の暗転やぼかし、外側クリック、×ボタンなどは追加せず、基本のモーダルウインドウと同じシンプルな構成で動作します。

HTMLでは開くボタンの文字や各モーダルのタイトル・本文を変更でき、CSSでは横幅、余白、背景色、角丸、影、ボタンのデザインなどを調整できます。JavaScriptでは各ボタンに設定した値を利用して、対応するモーダルへ表示状態のクラスを追加します。640px以下では表示エリアとモーダルの内側余白を小さくするため、スマートフォン・タブレット・PCで利用できます。

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

デモ

複数モーダルウインドウ

3つのボタンから、それぞれ対応するモーダルウインドウを表示できます。

「お知らせ」「プロフィール」「設定」をクリックすると、それぞれ対応するモーダルが画面中央に表示されます。「閉じる」をクリックすると表示中のモーダルを閉じます。

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

<!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="multiple-modal-window_wrap">

    <!-- タイトル -->
    <div class="multiple-modal-window_title">
      複数モーダルウインドウ
    </div>

    <!-- 説明文 -->
    <p class="multiple-modal-window_text">
      3つのボタンから、それぞれ対応するモーダルウインドウを表示できます。
    </p>

    <!-- モーダルを開くボタン一覧 -->
    <div class="multiple-modal-window_buttons">

      <!-- お知らせモーダルを開くボタン -->
      <button
        class="multiple-modal-window_open"
        type="button"
        data-modal-open="notice">
        お知らせ
      </button>

      <!-- プロフィールモーダルを開くボタン -->
      <button
        class="multiple-modal-window_open"
        type="button"
        data-modal-open="profile">
        プロフィール
      </button>

      <!-- 設定モーダルを開くボタン -->
      <button
        class="multiple-modal-window_open"
        type="button"
        data-modal-open="settings">
        設定
      </button>

    </div>

  </div>

  <!-- お知らせモーダル -->
  <div
    class="multiple-modal-window_modal"
    role="dialog"
    aria-modal="true"
    aria-labelledby="multiple-modal-window-notice-title"
    data-modal="notice">

    <!-- モーダルタイトル -->
    <div
      class="multiple-modal-window_modal-title"
      id="multiple-modal-window-notice-title">
      お知らせ
    </div>

    <!-- モーダル本文 -->
    <p class="multiple-modal-window_modal-text">
      新しいお知らせを表示するモーダルウインドウです。
    </p>

    <!-- モーダルを閉じるボタン -->
    <button
      class="multiple-modal-window_close"
      type="button"
      data-modal-close="">
      閉じる
    </button>

  </div>

  <!-- プロフィールモーダル -->
  <div
    class="multiple-modal-window_modal"
    role="dialog"
    aria-modal="true"
    aria-labelledby="multiple-modal-window-profile-title"
    data-modal="profile">

    <!-- モーダルタイトル -->
    <div
      class="multiple-modal-window_modal-title"
      id="multiple-modal-window-profile-title">
      プロフィール
    </div>

    <!-- モーダル本文 -->
    <p class="multiple-modal-window_modal-text">
      プロフィール情報を表示するモーダルウインドウです。
    </p>

    <!-- モーダルを閉じるボタン -->
    <button
      class="multiple-modal-window_close"
      type="button"
      data-modal-close="">
      閉じる
    </button>

  </div>

  <!-- 設定モーダル -->
  <div
    class="multiple-modal-window_modal"
    role="dialog"
    aria-modal="true"
    aria-labelledby="multiple-modal-window-settings-title"
    data-modal="settings">

    <!-- モーダルタイトル -->
    <div
      class="multiple-modal-window_modal-title"
      id="multiple-modal-window-settings-title">
      設定
    </div>

    <!-- モーダル本文 -->
    <p class="multiple-modal-window_modal-text">
      設定内容を表示するモーダルウインドウです。
    </p>

    <!-- モーダルを閉じるボタン -->
    <button
      class="multiple-modal-window_close"
      type="button"
      data-modal-close="">
      閉じる
    </button>

  </div>

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

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

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

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

ファイル構成と設置方法

このサンプルはHTML・CSS・JavaScriptの3ファイルで構成されています。HTMLでは「お知らせ」「プロフィール」「設定」の3つのボタンと、それぞれに対応する3つのモーダルウインドウを作成します。CSSでは基本のモーダルウインドウと同じ画面中央への配置やデザインを設定し、JavaScriptではクリックしたボタンに対応するモーダルだけを表示します。

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

各ファイルの役割
index.htmlは複数モーダルウインドウ全体を構成するファイルです。「お知らせ」「プロフィール」「設定」の開くボタンと、それぞれに対応するモーダルのタイトル・本文を変更できます。開くボタンのdata-modal-openと、対応するモーダルのdata-modalへ同じ値を設定することで、どのボタンからどのモーダルを表示するかを関連付けています。

style.cssは表示エリア、開くボタン、各モーダルウインドウ、閉じるボタンのデザインを設定するファイルです。モーダルは初期状態でdisplay:none;にし、is-activeクラスが追加されたモーダルだけをdisplay:block;で表示します。背景を暗くするオーバーレイやぼかしは設定していません。

script.jsはクリックされた開くボタンのdata-modal-openからモーダル名を取得し、同じ値を持つdata-modalのモーダルだけへis-activeクラスを追加するファイルです。閉じるボタンをクリックすると、そのボタンが配置されているモーダルからis-activeクラスを削除します。

設置方法・使い方
sampleフォルダへindex.html、style.css、script.jsを配置します。3つのファイルを同じ階層へ保存したあと、sample/index.htmlをブラウザで開いてください。index.htmlからstyle.cssとscript.jsを読み込む構成になっています。「お知らせ」「プロフィール」「設定」のいずれかをクリックすると、そのボタンに対応するモーダルウインドウが画面中央に表示されます。表示されたモーダル内の「閉じる」をクリックすると、そのモーダルが非表示になります。

カスタマイズできる内容
index.htmlでは表示エリアのタイトル・説明文、3つの開くボタンの文字、各モーダルのタイトル・本文、「閉じる」の文字を変更できます。ボタンとモーダルの対応を変更する場合は、開くボタンのdata-modal-openと対応するモーダルのdata-modalへ同じ値を設定します。style.cssでは表示エリアやモーダルの横幅、余白、背景色、角丸、影、開くボタンと閉じるボタンのデザインを変更できます。

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

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

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

border:1px solid #e5e7eb;
表示エリアの枠線です。1pxを大きくすると枠線が太くなり、小さくすると細くなります。

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

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

margin:0 0 12px;
タイトルの下側余白です。12pxを大きくすると次の文章との間隔が広がり、小さくすると狭くなります。

margin:0 0 24px;
説明文とモーダル本文の下側余白です。24pxを大きくすると次の要素との間隔が広がり、小さくすると狭くなります。

gap:12px;
3つの開くボタン同士の間隔です。値を大きくするとボタン同士が離れ、小さくすると近くなります。

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

border-radius:8px;
開くボタンと閉じるボタンの角丸です。値を大きくすると丸みが強くなり、0にすると四角になります。

font-size:16px;
開くボタンの文字サイズです。値を大きくすると文字が大きくなり、小さくすると小さくなります。

top:50%;・left:50%;
モーダルを画面中央へ配置するための位置です。transform:translate(-50%,-50%);と組み合わせて縦横中央へ配置しています。

z-index:9999;
モーダルウインドウの重なり順です。値を大きくすると、より高い重なり順として扱われます。

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

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

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

box-shadow:0 20px 40px rgba(0,0,0,.2);
モーダルウインドウの影です。20pxを大きくすると影が下方向へ移動し、40pxを大きくすると影のぼかしが広がります。

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

レスポンシブ対応
このサンプルはレスポンシブ対応です。style.cssのwidth:100%とmax-width:700pxによって表示エリアが画面幅に合わせて縮小されます。開くボタンの一覧にはflex-wrap:wrap;を設定しているため、横幅が不足するとボタンが折り返されます。モーダルはwidth:calc(100% - 40px)とmax-width:420pxで画面幅に合わせて調整されます。また、640px以下では表示エリアとモーダルのpaddingを24px 18pxへ変更しているため、スマートフォン・タブレット・PCで利用できます。


こちらもおすすめ


コメント