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

モーダルウインドウ

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

複数モーダルウインドウを切り替えて表示する方法を紹介します。横並びに配置した3つのボタンから、それぞれ異なる内容のモーダルウインドウを表示できるサンプルです。クリックしたボタンに応じて、対応するモーダルだけを開けます。

このサンプルはHTML・CSS・JavaScriptのみで動作し、「お知らせ」「プロフィール」「設定」の3つのボタンを用意しています。各ボタンをクリックすると、タイトルや説明文が異なる専用モーダルが表示されます。モーダルは「閉じる」ボタン、右上の「×」ボタン、または背景部分のクリックで閉じられます。

管理画面の項目別説明、会員サイトのプロフィール表示、ECサイトの商品情報、サービス案内など、複数の内容を同じページ内で個別に表示したい場合に利用できます。ボタン名、モーダルタイトル、説明文、色はコード内で変更できるため、用途に合わせてカスタマイズできます。

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

デモ

複数モーダルウインドウ

3つのボタンから、それぞれ異なるモーダルウインドウを表示します。

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-buttons_wrap">

    <!-- 操作エリアのタイトル -->
    <div class="multiple-modal-buttons_title">
      複数モーダルウインドウ
    </div>

    <!-- 操作エリアの説明文 -->
    <p class="multiple-modal-buttons_text">
      3つのボタンから、それぞれ異なるモーダルウインドウを表示します。
    </p>

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

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

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

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

    </div>

  </div>

  <!-- すべてのモーダルで共通使用する背景 -->
  <div
    class="multiple-modal-buttons_overlay"
    data-multiple-modal-buttons-overlay>

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

      <!-- お知らせモーダル右上の閉じるボタン -->
      <button
        class="multiple-modal-buttons_close"
        type="button"
        data-multiple-modal-buttons-close
        aria-label="閉じる">
        ×
      </button>

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

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

      <!-- お知らせモーダル下部の閉じるボタン -->
      <button
        class="multiple-modal-buttons_button"
        type="button"
        data-multiple-modal-buttons-close>
        閉じる
      </button>

    </div>

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

      <!-- プロフィールモーダル右上の閉じるボタン -->
      <button
        class="multiple-modal-buttons_close"
        type="button"
        data-multiple-modal-buttons-close
        aria-label="閉じる">
        ×
      </button>

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

      <!-- プロフィールモーダルの説明文 -->
      <p class="multiple-modal-buttons_message">
        ユーザーのプロフィール情報を表示するモーダルウインドウです。
      </p>

      <!-- プロフィールモーダル下部の閉じるボタン -->
      <button
        class="multiple-modal-buttons_button"
        type="button"
        data-multiple-modal-buttons-close>
        閉じる
      </button>

    </div>

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

      <!-- 設定モーダル右上の閉じるボタン -->
      <button
        class="multiple-modal-buttons_close"
        type="button"
        data-multiple-modal-buttons-close
        aria-label="閉じる">
        ×
      </button>

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

      <!-- 設定モーダルの説明文 -->
      <p class="multiple-modal-buttons_message">
        各種設定内容を案内するモーダルウインドウです。
      </p>

      <!-- 設定モーダル下部の閉じるボタン -->
      <button
        class="multiple-modal-buttons_button"
        type="button"
        data-multiple-modal-buttons-close>
        閉じる
      </button>

    </div>

  </div>

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

</body>
</html>

ファイル構成と設置方法

このサンプルはHTML・CSS・JavaScriptの3ファイルで構成されています。HTMLには3つのボタンと3種類のモーダルウインドウの構造、CSSにはモーダルやボタンのデザイン、JavaScriptにはクリックしたボタンに応じて対応するモーダルだけを表示する処理を記述しています。ライブラリを使用せず、HTML・CSS・JavaScriptだけで動作するため、そのままコピーして利用できます。

3つのボタンはそれぞれ異なるモーダルと関連付けられており、クリックしたボタンに対応する内容だけが表示されます。1つの背景を共通で利用しながら複数のモーダルを管理できるため、ページ内に多くの情報を整理して表示したい場合に便利です。

管理画面の項目説明、サービス紹介、プロフィール表示、商品情報など、ボタンごとに異なる内容を表示したい場面へ簡単に組み込めます。ボタン名やモーダルの内容を変更するだけで、さまざまな用途へ応用できます。

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

各ファイルの役割
index.html
モーダルを開く3つのボタンと、それぞれに対応するモーダルウインドウのHTML構造を管理します。ボタン名やタイトル、説明文を変更できます。

style.css
ボタン、モーダルウインドウ、背景、余白、角丸、影などのデザインを管理します。

script.js
ボタンごとに対応するモーダルを表示する処理、モーダルを閉じる処理、背景クリック時の閉じる処理を管理します。

設置方法・使い方
sampleフォルダへindex.html・style.css・script.jsを配置します。sample/index.htmlをブラウザで開くと動作を確認できます。3つのボタンのいずれかをクリックすると対応するモーダルウインドウが表示され、「閉じる」「×」ボタン、または背景をクリックするとモーダルを閉じます。

カスタマイズできる内容
index.htmlではボタン名、モーダルタイトル、説明文を変更できます。モーダルを追加したい場合はHTMLへ新しいボタンとモーダルを追加します。style.cssではボタン色、モーダルサイズ、背景色、余白、角丸、影などを変更できます。script.jsでは表示するモーダルの切り替え処理や開閉処理を編集できます。

数値調整
style.cssのmax-width:420px;を変更するとモーダルの最大横幅が変わります。padding:48px 28px 28px;を変更するとモーダル内部の余白が変わります。gap:12px;を変更すると3つのボタンの間隔が変わります。border-radius:18px;を変更するとモーダルやボタンの角丸の大きさが変わります。

レスポンシブ対応
style.cssではwidth:100%、max-width、padding、@media(max-width:640px)を使用してレスポンシブ対応しています。スマートフォンでは3つのボタンが縦並びになり、モーダルも画面幅に合わせて表示されます。タブレット・PCでも中央に見やすく表示されます。



コメント