HTML/CSSだけで複数モーダルウインドウを切り替えて表示する方法
HTML/CSSだけで複数モーダルウインドウを切り替えて表示する方法を紹介します。横並びに配置した3つのボタンから、それぞれ異なる内容のモーダルウインドウを表示できるサンプルです。JavaScriptを使用せず、HTMLのラジオボタンとlabel要素、CSSの:checkedを組み合わせて表示を切り替えます。
このサンプルでは「お知らせ」「確認画面」「詳細情報」の3つのボタンを用意しています。クリックしたボタンに対応するモーダルだけが表示され、背景または「閉じる」ボタンをクリックすると元の画面へ戻ります。アンカーリンクを使用しないため、モーダルを閉じてもページ先頭へ移動せず、開く前のスクロール位置を維持できます。
管理画面の案内、会員サイトの確認画面、ECサイトの商品説明、サービス紹介など、同じページ内で複数の情報を個別に表示したい場面に利用できます。ボタン名、モーダルタイトル、説明文、背景色、ボタン色、横幅などはHTMLとCSSで変更できるため、JavaScriptを使わずにカスタマイズしやすい構成です。
免責事項 本コードの利用により発生した損害について、当サイトは一切の責任を負いません。
デモ
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 ダウンロードしたけど、これをネット上で動かすにはどうするの?
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で利用できます。
コメント