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

モーダルウインドウ

HTML/CSSだけで複数モーダルウインドウを切り替えて表示する方法

HTML/CSSだけで複数モーダルウインドウを切り替えて表示する方法を紹介します。横並びに配置した3つのボタンから、それぞれ異なる内容のモーダルウインドウを表示できるサンプルです。JavaScriptを使用せず、HTMLのラジオボタンとlabel要素、CSSの:checkedを組み合わせて表示を切り替えます。

このサンプルでは「お知らせ」「確認画面」「詳細情報」の3つのボタンを用意しています。クリックしたボタンに対応するモーダルだけが表示され、背景または「閉じる」ボタンをクリックすると元の画面へ戻ります。アンカーリンクを使用しないため、モーダルを閉じてもページ先頭へ移動せず、開く前のスクロール位置を維持できます。

管理画面の案内、会員サイトの確認画面、ECサイトの商品説明、サービス紹介など、同じページ内で複数の情報を個別に表示したい場面に利用できます。ボタン名、モーダルタイトル、説明文、背景色、ボタン色、横幅などはHTMLとCSSで変更できるため、JavaScriptを使わずにカスタマイズしやすい構成です。

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

デモ

HTML/CSSだけで複数モーダルを切替

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

お知らせモーダル

これは1つ目のモーダルです。お知らせや案内文を表示する用途に使えます。

確認モーダル

これは2つ目のモーダルです。確認画面や注意喚起を表示する用途に使えます。

詳細情報モーダル

これは3つ目のモーダルです。詳細情報や補足説明を表示する用途に使えます。

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

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

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

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

  <!-- ページタイトル -->
  <title>HTML/CSSだけで複数モーダルウインドウを切り替えて表示</title>

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

</head>
<body>

  <!-- 複数モーダルウインドウを開く操作エリア -->
  <div class="html-css-multiple-modal-switch_wrap">

    <!-- 操作エリアのタイトル -->
    <div class="html-css-multiple-modal-switch_title">
      HTML/CSSだけで複数モーダルを切り替え
    </div>

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

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

      <!-- お知らせモーダルを開くボタン -->
      <label
        for="html-css-modal-1"
        class="html-css-multiple-modal-switch_open">
        お知らせ
      </label>

      <!-- 確認画面モーダルを開くボタン -->
      <label
        for="html-css-modal-2"
        class="html-css-multiple-modal-switch_open">
        確認画面
      </label>

      <!-- 詳細情報モーダルを開くボタン -->
      <label
        for="html-css-modal-3"
        class="html-css-multiple-modal-switch_open">
        詳細情報
      </label>

    </div>

  </div>

  <!-- モーダルを閉じた状態にするラジオボタン -->
  <input
    type="radio"
    name="html-css-modal-switch"
    id="html-css-modal-close"
    class="html-css-multiple-modal-switch_check"
    checked>

  <!-- お知らせモーダルを表示するラジオボタン -->
  <input
    type="radio"
    name="html-css-modal-switch"
    id="html-css-modal-1"
    class="html-css-multiple-modal-switch_check">

  <!-- 確認画面モーダルを表示するラジオボタン -->
  <input
    type="radio"
    name="html-css-modal-switch"
    id="html-css-modal-2"
    class="html-css-multiple-modal-switch_check">

  <!-- 詳細情報モーダルを表示するラジオボタン -->
  <input
    type="radio"
    name="html-css-modal-switch"
    id="html-css-modal-3"
    class="html-css-multiple-modal-switch_check">

  <!-- すべてのモーダルで共通使用する背景 -->
  <div class="html-css-multiple-modal-switch_overlay">

    <!-- 背景クリックでモーダルを閉じる領域 -->
    <label
      for="html-css-modal-close"
      class="html-css-multiple-modal-switch_background">
    </label>

    <!-- お知らせモーダル -->
    <div class="html-css-multiple-modal-switch_modal html-css-multiple-modal-switch_modal-1">

      <!-- お知らせモーダルのタイトル -->
      <div class="html-css-multiple-modal-switch_heading">
        お知らせ
      </div>

      <!-- お知らせモーダルの説明文 -->
      <p class="html-css-multiple-modal-switch_message">
        お知らせ用のモーダルウインドウです。
      </p>

      <!-- お知らせモーダルを閉じるボタン -->
      <label
        for="html-css-modal-close"
        class="html-css-multiple-modal-switch_close">
        閉じる
      </label>

    </div>

    <!-- 確認画面モーダル -->
    <div class="html-css-multiple-modal-switch_modal html-css-multiple-modal-switch_modal-2">

      <!-- 確認画面モーダルのタイトル -->
      <div class="html-css-multiple-modal-switch_heading">
        確認画面
      </div>

      <!-- 確認画面モーダルの説明文 -->
      <p class="html-css-multiple-modal-switch_message">
        確認メッセージを表示するモーダルウインドウです。
      </p>

      <!-- 確認画面モーダルを閉じるボタン -->
      <label
        for="html-css-modal-close"
        class="html-css-multiple-modal-switch_close">
        閉じる
      </label>

    </div>

    <!-- 詳細情報モーダル -->
    <div class="html-css-multiple-modal-switch_modal html-css-multiple-modal-switch_modal-3">

      <!-- 詳細情報モーダルのタイトル -->
      <div class="html-css-multiple-modal-switch_heading">
        詳細情報
      </div>

      <!-- 詳細情報モーダルの説明文 -->
      <p class="html-css-multiple-modal-switch_message">
        詳細説明を表示するモーダルウインドウです。
      </p>

      <!-- 詳細情報モーダルを閉じるボタン -->
      <label
        for="html-css-modal-close"
        class="html-css-multiple-modal-switch_close">
        閉じる
      </label>

    </div>

  </div>

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

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

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

ファイル構成と設置方法

このサンプルはHTMLとCSSの2ファイルで構成されています。HTMLではラジオボタンとlabel要素を利用して3種類のモーダルウインドウを切り替えて表示します。JavaScriptを使用せず、選択したラジオボタンに応じて対応するモーダルだけを表示する仕組みです。CSSではモーダル本体や背景、ボタンのデザイン、表示切り替え、レスポンシブ表示を設定しています。

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

各ファイルの役割
index.htmlはページ全体と3種類のモーダルウインドウを構成するファイルです。ボタン名、各モーダルのタイトル、説明文を変更できます。ラジオボタンとlabel要素を利用して、お知らせ・確認画面・詳細情報のモーダルを切り替えて表示します。

style.cssはページ全体やモーダルウインドウのデザインを設定するファイルです。背景色、文字色、ボタン、モーダル本体、背景の暗さ、角丸、影、余白などを変更できます。

設置方法・使い方
sampleフォルダへindex.htmlとstyle.cssを配置します。2つのファイルを同じ階層へ保存したあと、sample/index.htmlをブラウザで開いてください。「お知らせ」「確認画面」「詳細情報」のいずれかをクリックすると対応するモーダルウインドウが表示されます。背景または「閉じる」をクリックするとモーダルを閉じます。

カスタマイズできる内容
index.htmlではタイトル、説明文、各ボタンの文字、各モーダルのタイトル、本文、閉じるボタンの文字を変更できます。用途に合わせて、お知らせ、利用規約、商品説明、確認画面などさまざまな内容へ変更できます。

style.cssでは操作エリアの横幅、背景色、ボタンの色、モーダルの横幅、余白、背景の暗さ、角丸、影、スマートフォン表示時のレイアウトなどを自由に変更できます。

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

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

padding:32px;
操作エリアの内側余白です。値を大きくすると余白が広がり、小さくすると詰まった表示になります。

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

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

padding:36px 28px 28px;
モーダル本体の内側余白です。値を大きくすると内容と枠線の間隔が広がります。

background:rgba(0,0,0,.6);
モーダル表示時の背景の暗さです。.6を大きくすると背景が濃くなり、小さくすると明るくなります。

box-shadow:0 20px 50px rgba(0,0,0,.25);
モーダル本体の影です。数値を大きくすると影が広がり、小さくすると控えめになります。

margin-top:28px;
閉じるボタンの上側余白です。値を大きくすると本文との間隔が広がり、小さくすると近づきます。

レスポンシブ対応
このサンプルはレスポンシブ対応です。style.cssのwidth:100%とmax-widthにより、画面幅に合わせて操作エリアやモーダル本体が自動で縮小されます。また、640px以下ではflex-direction:column;によって3つのボタンを縦並びに変更し、padding:24px 18px;およびpadding:32px 18px 20px;で余白も調整しているため、スマートフォン・タブレット・PCで利用できます。


こちらもおすすめ


コメント