FAQ・Q&A向けモーダルウインドウの作り方
FAQ・Q&A向けモーダルウインドウの作り方を紹介します。このサンプルでは、よくある質問を一覧で表示し、確認したい質問をクリックすると、その質問と回答を画面中央のモーダルウインドウへ表示します。複数の回答を最初からすべて表示する必要がないため、質問の数が増えてもページをすっきりと整理できます。
店舗や施設の案内、サービスの利用方法、ECサイトの購入・配送についての質問、会員サイトの操作説明など、FAQやQ&Aを掲載するさまざまなページで利用できます。質問ごとに別々のモーダルウインドウを用意するのではなく、1つのモーダルウインドウへクリックした質問と回答をJavaScriptで差し替える構成にしているため、同じデザインで複数の質問を扱えます。
モーダルウインドウは基本形と同じく画面中央へ表示し、背景を暗くするオーバーレイや外側クリック、×ボタンによる閉じる処理は使用しません。HTMLでは質問と回答を設定し、CSSでは質問一覧やモーダルのデザイン、JavaScriptではクリックした質問と回答の取得・表示を行います。画面幅640px以下では余白を小さくするレスポンシブ対応も行っています。
免責事項 本コードの利用により発生した損害について、当サイトは一切の責任を負いません。
デモ
確認したい質問をクリックすると、回答がモーダルウインドウで表示されます。
A.
確認したい質問をクリックしてください。選択した質問と回答がモーダルウインドウに表示され、「閉じる」をクリックするとモーダルが閉じます。
コードをコピーして使おう!
<!DOCTYPE html>
<html lang="ja">
<head>
<!-- 文字コード -->
<meta charset="UTF-8">
<!-- スマートフォン対応 -->
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- ページタイトル -->
<title>FAQ・Q&A向けモーダルウインドウ</title>
<!-- CSSファイル -->
<link rel="stylesheet" href="style.css">
</head>
<body>
<!-- FAQ表示エリア -->
<div class="faq-modal_wrap">
<!-- タイトル -->
<div class="faq-modal_title">
施設についてよくある質問
</div>
<!-- 説明文 -->
<p class="faq-modal_text">
確認したい質問をクリックすると、回答がモーダルウインドウで表示されます。
</p>
<!-- 質問一覧 -->
<div class="faq-modal_list">
<!-- 質問1 -->
<button class="faq-modal_button" type="button" data-question="営業時間を教えてください" data-answer="営業時間は午前9時から午後6時までです。">
営業時間を教えてください
<span class="faq-modal_icon">?</span>
</button>
<!-- 質問2 -->
<button class="faq-modal_button" type="button" data-question="駐車場はありますか?" data-answer="施設の専用駐車場をご利用いただけます。">
駐車場はありますか?
<span class="faq-modal_icon">?</span>
</button>
<!-- 質問3 -->
<button class="faq-modal_button" type="button" data-question="予約は必要ですか?" data-answer="通常は予約なしで利用できます。">
予約は必要ですか?
<span class="faq-modal_icon">?</span>
</button>
</div>
</div>
<!-- モーダルウインドウ -->
<div class="faq-modal_modal" id="faq-modal" role="dialog" aria-modal="true" aria-labelledby="faq-modal-question">
<!-- 選択した質問 -->
<div class="faq-modal_question" id="faq-modal-question"></div>
<!-- 選択した質問の回答 -->
<p class="faq-modal_answer">
<span class="faq-modal_answer-mark">A.</span>
<span id="faq-modal-answer"></span>
</p>
<!-- 閉じるボタン -->
<button class="faq-modal_close" id="faq-modal-close" type="button">
閉じる
</button>
</div>
<!-- JavaScriptファイル -->
<script src="script.js"></script>
</body>
</html>
サンプル一式を取得する場合 HTML・CSSなどすべてのファイルが必要な場合は、「サンプル一式をダウンロード」をクリックしてください。
Q ダウンロードしたけど、これをネット上で動かすにはどうするの?
Googleアカウントがあれば、InfinityFreeで無料サーバーを作成して、ダウンロードしたサンプルをネット上で動かせます。
InfinityFreeを初めて利用する場合は①から、すでにサーバーを作成している場合は②へ進んでください。
ファイル構成と設置方法
このサンプルはHTML・CSS・JavaScriptの3ファイルで構成されています。HTMLではFAQの質問一覧と回答データ、モーダルウインドウを用意し、CSSでは質問一覧と基本形のモーダルウインドウをデザインします。JavaScriptではクリックした質問から質問文と回答文を取得し、1つのモーダルウインドウへ内容を差し替えて表示します。
sample/
├── index.html
├── style.css
└── script.js
各ファイルの役割
index.htmlはFAQのタイトル、説明文、質問一覧、各質問に対応する回答、モーダルウインドウを構成するファイルです。各質問ボタンのdata-questionへ質問文、data-answerへ回答文を設定します。質問を追加する場合は同じ形式のボタンを追加することで項目を増やせます。
style.cssはFAQ表示エリア、質問ボタン、?アイコン、モーダルウインドウ、「閉じる」ボタンのデザインを設定するファイルです。モーダルは基本形と同じく画面中央へ表示し、背景を暗くするオーバーレイや×ボタンは使用していません。
script.jsは質問ボタンとモーダルウインドウを連動させるファイルです。クリックされた質問のdata-questionとdata-answerを取得し、モーダル内の質問欄と回答欄へ設定してからis-activeクラスを追加します。
設置方法・使い方
sampleフォルダへindex.html、style.css、script.jsを配置します。3つのファイルを同じ階層へ保存したあと、sample/index.htmlをブラウザで開いてください。index.htmlからstyle.cssとscript.jsが読み込まれます。FAQ一覧から確認したい質問をクリックすると、その質問と対応する回答が画面中央のモーダルウインドウへ表示されます。「閉じる」ボタンをクリックするとモーダルが非表示になります。
カスタマイズできる内容
index.htmlではFAQのタイトルや説明文、質問、回答を変更できます。質問を増やす場合はfaq-modal_buttonを持つボタンを追加し、data-questionへ質問文、data-answerへ対応する回答文を設定します。style.cssではFAQ表示エリア、質問ボタン、?アイコン、モーダルウインドウ、閉じるボタンの横幅、余白、色、角丸などを変更できます。
数値調整
style.css
max-width:700px;
FAQ表示エリアの最大横幅です。値を大きくすると横に広がり、小さくするとコンパクトになります。
margin:40px auto;
FAQ表示エリアの上下余白です。40pxを大きくすると上下の間隔が広がり、小さくすると狭くなります。
padding:32px;
FAQ表示エリアの内側余白です。値を大きくすると内容と枠線の間隔が広がり、小さくすると狭くなります。
border-radius:18px;
FAQ表示エリアの角丸です。値を大きくすると丸みが強くなり、0にすると四角になります。
font-size:22px;
FAQタイトルとモーダルに表示する質問の文字サイズです。値を大きくすると文字が大きくなり、小さくすると小さくなります。
gap:14px;
FAQ一覧にある質問ボタン同士の間隔です。値を大きくすると質問同士の間隔が広がり、小さくすると狭くなります。
padding:16px 18px;
質問ボタンの内側余白です。上下の16pxを大きくするとボタンが高くなり、左右の18pxを大きくすると内容と左右端の間隔が広がります。
width:30px;・height:30px;
質問ボタン右側にある?アイコンの大きさです。両方を同じ値にすると円形を維持できます。
font-size:18px;
?アイコン内の文字サイズです。値を大きくすると?が大きくなり、小さくすると小さくなります。
width:calc(100% - 40px);
モーダルウインドウの横幅です。画面幅から40pxを引くことで左右に余白を確保しています。40pxを大きくすると左右の余白が広がります。
max-width:420px;
モーダルウインドウの最大横幅です。値を大きくするとモーダルが横に広がり、小さくするとコンパクトになります。
padding:28px;
モーダルウインドウの内側余白です。値を大きくすると内容と外周の間隔が広がり、小さくすると狭くなります。
border-radius:18px;
モーダルウインドウの角丸です。値を大きくすると丸みが強くなり、0にすると四角になります。
box-shadow:0 20px 40px ...
モーダルウインドウの影です。20pxは影の縦方向の位置、40pxはぼかし範囲です。値を大きくすると影の位置や広がりが大きくなります。
padding:10px 20px;
「閉じる」ボタンの内側余白です。上下の10pxを大きくするとボタンが高くなり、左右の20pxを大きくすると横に広がります。
レスポンシブ対応
このサンプルはレスポンシブ対応です。モーダルウインドウにはwidth:calc(100% - 40px)とmax-width:420pxを設定しているため、画面が狭くなると左右に余白を残しながら横幅が縮小されます。また、640px以下ではFAQ表示エリアをpadding:24px 18px;、質問ボタンをpadding:14px 16px;、モーダルウインドウをpadding:24px 18px;へ変更し、スマートフォンでも内容を確認しやすい余白に調整しています。
コメント