URLハッシュで開けるモーダルウインドウの作り方
URLハッシュで開けるモーダルウインドウの作り方を紹介します。このサンプルでは、URLの末尾に「#modal」を付けた状態でページを開くと、JavaScriptがハッシュを確認してモーダルウインドウを自動表示します。通常の「モーダルを開く」ボタンからも表示できるため、ページ内の操作とURLからの直接表示を両方確認できます。
特定のお知らせや案内をURLから直接表示したい場合に利用できます。たとえば、お問い合わせ画面の補足案内、会員サイトのお知らせ、ECサイトの商品説明、管理画面の詳細情報など、特定のモーダルを開いた状態へ誘導したい場面に適しています。URLハッシュを利用するため、同じページでも通常表示とモーダル表示をURLによって分けることができます。
HTMLではモーダルを開くボタンやモーダル内のタイトル・本文を変更でき、CSSでは横幅、余白、角丸、背景色、影などを調整できます。JavaScriptでは「#modal」のハッシュを判定し、該当するURLでアクセスした場合にモーダルを表示します。画面幅が狭い場合にも収まるようレスポンシブ対応しているため、スマートフォン・タブレット・PCで利用できます。
免責事項 本コードの利用により発生した損害について、当サイトは一切の責任を負いません。
デモ
URLの末尾に「#modal」がある場合、モーダルウインドウが自動で表示されます。
URLのハッシュが「#modal」のため、モーダルウインドウが表示されています。
「#modalで開く」をクリックするとURLへ「#modal」が追加され、モーダルウインドウが表示されます。「閉じる」をクリックするとハッシュを削除してモーダルを閉じます。
コードをコピーして使おう!
<!DOCTYPE html>
<html lang="ja">
<head>
<!-- 文字コード -->
<meta charset="UTF-8">
<!-- スマートフォン対応 -->
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- ページタイトル -->
<title>URLハッシュで開けるモーダルウインドウ</title>
<!-- CSSファイル -->
<link rel="stylesheet" href="style.css">
</head>
<body>
<!-- 操作エリア -->
<div class="url-hash-modal-window_wrap">
<!-- タイトル -->
<div class="url-hash-modal-window_title">
URLハッシュで開けるモーダルウインドウ
</div>
<!-- 説明文 -->
<p class="url-hash-modal-window_text">
URLの末尾に「#modal」がある場合、モーダルウインドウが自動で表示されます。
</p>
<!-- URLへ#modalを追加するボタン -->
<button class="url-hash-modal-window_open" type="button" data-hash-modal-open="">
#modalで開く
</button>
</div>
<!-- モーダルウインドウ -->
<div
class="url-hash-modal-window_modal"
role="dialog"
aria-modal="true"
aria-labelledby="url-hash-modal-window-title"
data-hash-modal="">
<!-- モーダルタイトル -->
<div
class="url-hash-modal-window_modal-title"
id="url-hash-modal-window-title">
URLハッシュから表示
</div>
<!-- モーダル本文 -->
<p class="url-hash-modal-window_modal-text">
URLのハッシュが「#modal」のため、モーダルウインドウが表示されています。
</p>
<!-- 閉じるボタン -->
<button class="url-hash-modal-window_close" type="button" data-hash-modal-close="">
閉じる
</button>
</div>
<!-- JavaScriptファイル -->
<script src="script.js"></script>
</body>
</html>
コードをコピーする場合 使用するコードのタブを選び、「このタブをコピー」をクリックすると、現在表示中のコードをコピーできます。 サンプル一式を取得する場合 HTML・CSSなどすべてのファイルが必要な場合は、「サンプル一式をダウンロード」をクリックしてください。
Q ダウンロードしたけど、これをネット上で動かすにはどうするの?
Googleアカウントがあれば、InfinityFreeで無料サーバーを作成して、ダウンロードしたサンプルをネット上で動かせます。
InfinityFreeを初めて利用する場合は①から、すでにサーバーを作成している場合は②へ進んでください。
ファイル構成と設置方法
このサンプルはHTML・CSS・JavaScriptの3ファイルで構成されています。HTMLではURLハッシュを追加するボタンとモーダルウインドウを配置し、CSSでは操作エリアとモーダルのデザインを設定します。JavaScriptではURLのハッシュを確認し、「#modal」の場合にモーダルを表示します。
sample/
├── index.html
├── style.css
└── script.js
各ファイルの役割
index.htmlは操作エリアとモーダルウインドウを構成するファイルです。「#modalで開く」ボタン、モーダルタイトル、本文、閉じるボタンなどを配置しています。
style.cssは操作エリアとモーダルウインドウのデザインを設定するファイルです。横幅、余白、背景色、角丸、文字サイズ、ボタン、モーダルの影などを変更できます。
script.jsはURLハッシュとモーダルの表示状態を連動させるファイルです。URLのハッシュが#modalの場合はモーダルへis-activeクラスを追加し、それ以外の場合は削除します。
設置方法・使い方
sampleフォルダへindex.html、style.css、script.jsを配置します。3つのファイルを同じ階層へ保存したあと、sample/index.htmlをブラウザで開いてください。index.htmlからstyle.cssとscript.jsが読み込まれます。通常のURLではモーダルは非表示ですが、URLの末尾へ#modalを付けて開くとモーダルウインドウが表示されます。「#modalで開く」ボタンをクリックした場合もURLへ#modalが追加されてモーダルが表示されます。閉じるボタンをクリックするとURLからハッシュが削除され、モーダルが閉じます。
カスタマイズできる内容
index.htmlでは「URLハッシュで開けるモーダルウインドウ」のタイトル、説明文、「#modalで開く」のボタン文字、モーダルタイトル、モーダル本文、閉じるボタンの文字を変更できます。style.cssでは操作エリアやモーダルの横幅、余白、背景色、角丸、文字サイズ、ボタン色、影などを変更できます。
script.jsでは#modalを判定することでモーダルを表示しています。別のハッシュ名を使用する場合は、JavaScriptのwindow.location.hash === "#modal"と、開くボタンで設定しているwindow.location.hash = "modal"の「modal」を同じ名前へ変更してください。
数値調整
style.css
max-width:700px;
操作エリアの最大横幅です。値を大きくすると横に広がり、小さくするとコンパクトになります。
margin:40px auto;
操作エリアの上下余白です。40pxを大きくすると上下の間隔が広がり、小さくすると狭くなります。
padding:32px;
操作エリアの内側余白です。値を大きくすると内容と枠線の間隔が広がり、小さくすると狭くなります。
border-radius:18px;
操作エリアの角丸です。値を大きくすると丸みが強くなり、0にすると四角になります。
font-size:22px;
タイトルの文字サイズです。値を大きくすると文字が大きくなり、小さくすると小さくなります。
margin:0 0 24px;
説明文の下側余白です。24pxを大きくするとボタンとの間隔が広がり、小さくすると狭くなります。
padding:12px 24px;
「#modalで開く」ボタンの内側余白です。上下の12pxを大きくするとボタンが高くなり、左右の24pxを大きくすると横に広がります。
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により操作エリアが画面幅に合わせて縮小され、モーダルにはwidth:calc(100% - 40px)とmax-width:420pxを設定しています。また、640px以下では操作エリアのpaddingを24px 18px、モーダルのpaddingも24px 18pxへ変更しているため、スマートフォン・タブレット・PCで利用できます。
コメント