HTML/CSSだけで複数モーダルウインドウを切り替えて表示する方法
HTML/CSSだけで複数モーダルウインドウを切り替えて表示する方法を紹介します。このサンプルでは、「お知らせ」「プロフィール」「設定」の3つを用意し、選択した項目に対応するモーダルウインドウだけを画面中央へ表示します。JavaScriptは使用せず、HTMLのラジオボタンとCSSの:checkedを組み合わせて表示状態を切り替えます。
お知らせの詳細を表示するページ、会員サイトのプロフィール確認、管理画面の設定案内、ECサイトの商品情報や補足説明など、同じページから複数の内容を個別に表示したい場合に利用できます。それぞれのモーダルには「閉じる」を配置し、クリックするとモーダルが表示されていない状態へ戻ります。背景の暗転やぼかし、外側クリック、×ボタンなどは追加していないシンプルな構成です。
HTMLでは開く項目の文字や各モーダルのタイトル・本文を変更でき、CSSでは横幅、余白、背景色、角丸、影、ボタンのデザインなどを調整できます。640px以下では表示エリアとモーダルの内側余白を小さくするため、スマートフォン・タブレット・PCで利用できます。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-window_wrap">
<!-- タイトル -->
<div class="html-css-multiple-modal-window_title">
複数モーダルウインドウ
</div>
<!-- 説明文 -->
<p class="html-css-multiple-modal-window_text">
3つの項目から、それぞれ対応するモーダルウインドウを表示できます。
</p>
<!-- モーダルを開く項目一覧 -->
<div class="html-css-multiple-modal-window_buttons">
<!-- お知らせモーダルを開くラベル -->
<label
class="html-css-multiple-modal-window_open"
for="html-css-multiple-modal-window-notice">
お知らせ
</label>
<!-- プロフィールモーダルを開くラベル -->
<label
class="html-css-multiple-modal-window_open"
for="html-css-multiple-modal-window-profile">
プロフィール
</label>
<!-- 設定モーダルを開くラベル -->
<label
class="html-css-multiple-modal-window_open"
for="html-css-multiple-modal-window-settings">
設定
</label>
</div>
</div>
<!-- モーダルを閉じた状態にするラジオボタン -->
<input
type="radio"
name="html-css-multiple-modal-window-switch"
id="html-css-multiple-modal-window-close"
class="html-css-multiple-modal-window_check"
checked>
<!-- お知らせモーダルの表示状態を管理するラジオボタン -->
<input
type="radio"
name="html-css-multiple-modal-window-switch"
id="html-css-multiple-modal-window-notice"
class="html-css-multiple-modal-window_check">
<!-- プロフィールモーダルの表示状態を管理するラジオボタン -->
<input
type="radio"
name="html-css-multiple-modal-window-switch"
id="html-css-multiple-modal-window-profile"
class="html-css-multiple-modal-window_check">
<!-- 設定モーダルの表示状態を管理するラジオボタン -->
<input
type="radio"
name="html-css-multiple-modal-window-switch"
id="html-css-multiple-modal-window-settings"
class="html-css-multiple-modal-window_check">
<!-- お知らせモーダル -->
<div
class="html-css-multiple-modal-window_modal html-css-multiple-modal-window_notice"
role="dialog"
aria-labelledby="html-css-multiple-modal-window-notice-title">
<!-- モーダルタイトル -->
<div
class="html-css-multiple-modal-window_modal-title"
id="html-css-multiple-modal-window-notice-title">
お知らせ
</div>
<!-- モーダル本文 -->
<p class="html-css-multiple-modal-window_modal-text">
新しいお知らせを表示するモーダルウインドウです。
</p>
<!-- モーダルを閉じるラベル -->
<label
class="html-css-multiple-modal-window_close"
for="html-css-multiple-modal-window-close">
閉じる
</label>
</div>
<!-- プロフィールモーダル -->
<div
class="html-css-multiple-modal-window_modal html-css-multiple-modal-window_profile"
role="dialog"
aria-labelledby="html-css-multiple-modal-window-profile-title">
<!-- モーダルタイトル -->
<div
class="html-css-multiple-modal-window_modal-title"
id="html-css-multiple-modal-window-profile-title">
プロフィール
</div>
<!-- モーダル本文 -->
<p class="html-css-multiple-modal-window_modal-text">
プロフィール情報を表示するモーダルウインドウです。
</p>
<!-- モーダルを閉じるラベル -->
<label
class="html-css-multiple-modal-window_close"
for="html-css-multiple-modal-window-close">
閉じる
</label>
</div>
<!-- 設定モーダル -->
<div
class="html-css-multiple-modal-window_modal html-css-multiple-modal-window_settings"
role="dialog"
aria-labelledby="html-css-multiple-modal-window-settings-title">
<!-- モーダルタイトル -->
<div
class="html-css-multiple-modal-window_modal-title"
id="html-css-multiple-modal-window-settings-title">
設定
</div>
<!-- モーダル本文 -->
<p class="html-css-multiple-modal-window_modal-text">
設定内容を表示するモーダルウインドウです。
</p>
<!-- モーダルを閉じるラベル -->
<label
class="html-css-multiple-modal-window_close"
for="html-css-multiple-modal-window-close">
閉じる
</label>
</div>
</body>
</html>
コードをコピーする場合 使用するコードのタブを選び、「このタブをコピー」をクリックすると、現在表示中のコードをコピーできます。 サンプル一式を取得する場合 HTML・CSSなどすべてのファイルが必要な場合は、「サンプル一式をダウンロード」をクリックしてください。
Q ダウンロードしたけど、これをネット上で動かすにはどうするの?
Googleアカウントがあれば、InfinityFreeで無料サーバーを作成して、ダウンロードしたサンプルをネット上で動かせます。
InfinityFreeを初めて利用する場合は①から、すでにサーバーを作成している場合は②へ進んでください。
ファイル構成と設置方法
このサンプルはHTMLとCSSの2ファイルで構成されています。HTMLでは「お知らせ」「プロフィール」「設定」の3つの項目と、それぞれに対応する3つのモーダルウインドウを作成します。JavaScriptは使用せず、ラジオボタンの選択状態とCSSの:checkedを組み合わせることで、選択されたモーダルだけを画面中央へ表示します。
sample/
├── index.html
└── style.css
各ファイルの役割
index.htmlは複数モーダルウインドウ全体を構成するファイルです。「お知らせ」「プロフィール」「設定」の開くラベル、それぞれに対応するモーダル、表示状態を管理するラジオボタンを配置しています。各ラベルのforとラジオボタンのidを対応させることで、クリックした項目のラジオボタンを選択状態にします。index.htmlからstyle.cssを読み込んで使用します。
style.cssは表示エリア、開くラベル、各モーダルウインドウ、閉じるラベルのデザインと表示状態を設定するファイルです。モーダルは通常display:none;で非表示にし、対応するラジオボタンが:checkedになった場合だけdisplay:block;へ切り替えます。背景を暗くするオーバーレイやぼかしは設定していません。
設置方法・使い方
sampleフォルダへindex.htmlとstyle.cssを配置します。2つのファイルを同じ階層へ保存したあと、sample/index.htmlをブラウザで開いてください。「お知らせ」「プロフィール」「設定」のいずれかをクリックすると、対応するラジオボタンが選択され、その項目のモーダルウインドウだけが画面中央に表示されます。「閉じる」をクリックすると閉じた状態を管理するラジオボタンへ選択が切り替わり、表示中のモーダルが非表示になります。
カスタマイズできる内容
index.htmlでは表示エリアのタイトル・説明文、3つの項目名、各モーダルのタイトル・本文、「閉じる」の文字を変更できます。項目とモーダルの対応を変更する場合は、開くラベルのforと対応するラジオボタンのidを同じ値にします。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;
表示エリアとモーダルのタイトル文字サイズです。値を大きくすると文字が大きくなり、小さくすると小さくなります。
gap:12px;
3つの開く項目同士の間隔です。値を大きくすると項目同士が離れ、小さくすると近くなります。
padding:12px 24px;
モーダルを開くラベルの内側余白です。上下の12pxを大きくすると高さが増え、左右の24pxを大きくすると横に広がります。
font-size:16px;
モーダルを開くラベルの文字サイズです。値を大きくすると文字が大きくなり、小さくすると小さくなります。
top:50%;・left:50%;
モーダルを画面中央へ配置するための位置です。transform:translate(-50%,-50%);と組み合わせて縦横中央へ配置しています。
z-index:9999;
モーダルウインドウの重なり順です。値を大きくすると、より高い重なり順として扱われます。
width:calc(100% - 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で利用できます。
コメント