FAQ・Q&A向けドロップダウンメニューの作り方【HTML/CSS/JavaScript・サンプルコード付き】

ドロップダウンメニュー

FAQ・Q&A向けドロップダウンメニューの作り方

FAQ・Q&A向けドロップダウンメニューの作り方を紹介します。このサンプルでは、「質問を選ぶ」ボタンをクリックすると質問一覧がドロップダウン形式で表示され、確認したい質問を選択すると、その質問に対応する回答を下部へ表示します。複数の質問を常に並べて表示せず、必要な質問をメニューから選べるため、FAQをコンパクトにまとめられます。

施設案内やサービス紹介、会員サイト、ECサイトなど、複数の質問と回答を掲載したい場面で利用できます。サンプルでは「施設について」という見出しの下に、営業時間、駐車場、予約についての質問を用意しています。質問を選択するとメニューが閉じ、「A.」とともに対応する回答だけが表示されるため、利用者が確認したい情報へ絞って回答を表示できます。

HTMLでは見出しや説明文、質問項目を変更でき、JavaScriptでは各質問に対応する回答内容を設定できます。CSSではドロップダウンメニューの横幅、余白、背景色、文字色、角丸、影などを調整できます。画面幅が640px以下の場合は内側の余白を小さくするレスポンシブ対応も行っているため、スマートフォン・タブレット・PCで利用しやすいFAQ・Q&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-dropdown-menu_wrap">

    <!-- タイトル -->
    <div class="faq-dropdown-menu_title">
      施設について
    </div>

    <!-- 説明文 -->
    <p class="faq-dropdown-menu_text">
      確認したい質問をメニューから選択してください。
    </p>

    <!-- ドロップダウンメニュー全体 -->
    <div class="faq-dropdown-menu_group">

      <div class="faq-dropdown-menu_area">

        <!-- メニューを開くボタン -->
        <button
          class="faq-dropdown-menu_button"
          type="button"
          data-faq-dropdown-menu-button=""
          aria-expanded="false">
          質問を選ぶ
          <span class="faq-dropdown-menu_arrow">▼</span>
        </button>

        <!-- 質問一覧 -->
        <ul
          class="faq-dropdown-menu_list"
          data-faq-dropdown-menu-list="">

          <li>
            <button
              class="faq-dropdown-menu_question"
              type="button"
              data-answer="hours">
              営業時間を教えてください
            </button>
          </li>

          <li>
            <button
              class="faq-dropdown-menu_question"
              type="button"
              data-answer="parking">
              駐車場はありますか?
            </button>
          </li>

          <li>
            <button
              class="faq-dropdown-menu_question"
              type="button"
              data-answer="reservation">
              予約は必要ですか?
            </button>
          </li>

        </ul>

      </div>

    </div>

    <!-- 選択した質問の回答 -->
    <div
      class="faq-dropdown-menu_answer"
      data-faq-dropdown-menu-answer="">
    </div>

  </div>

  <!-- JavaScriptファイル -->
  <script src="script.js"></script>

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

ファイル構成と設置方法

このサンプルはHTML・CSS・JavaScriptの3ファイルで構成されています。HTMLで「施設について」の見出し、説明文、ドロップダウンメニューの質問項目、回答表示エリアを作成し、CSSでメニューや回答部分のデザインを設定します。JavaScriptでは「質問を選ぶ」ボタンによるメニューの開閉と、選択した質問に対応する回答の表示を行います。

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

各ファイルの役割
index.htmlはFAQ・Q&A全体を構成するファイルです。「施設について」のタイトル、説明文、「質問を選ぶ」ボタン、営業時間・駐車場・予約についての質問項目、回答を表示するエリアを記述しています。質問を変更したり追加したりする場合は、このファイルの質問一覧を編集します。

style.cssはFAQ全体とドロップダウンメニューの見た目を設定するファイルです。全体の横幅や余白、背景色、ボタンの色、質問一覧の角丸や影、回答エリアの枠線などを変更できます。質問一覧は初期状態では非表示になり、JavaScriptによってis-openクラスが付くと表示されます。

script.jsはドロップダウンメニューの開閉と回答表示を行うファイルです。「質問を選ぶ」ボタンをクリックすると質問一覧を開閉し、質問をクリックするとdata-answerの値に対応する回答を表示します。表示する回答内容はfaqDropdownMenuAnswersから変更できます。

設置方法・使い方
sampleフォルダへindex.html、style.css、script.jsを同じ階層で配置してください。そのあとsample/index.htmlをブラウザで開くと、FAQ・Q&A向けドロップダウンメニューが表示されます。

「質問を選ぶ」をクリックすると、営業時間・駐車場・予約についての質問一覧が表示されます。確認したい質問をクリックすると質問一覧が閉じ、メニューの下へ「A.」と対応する回答が表示されます。別の質問を確認するときは、もう一度「質問を選ぶ」をクリックして質問を選択します。

カスタマイズできる内容
index.htmlでは「施設について」のタイトル、説明文、「質問を選ぶ」のボタン文字、質問内容を変更できます。質問を変更する場合は、各質問ボタンのdata-answerとscript.jsの回答を対応させてください。質問項目を追加する場合も、同じ構成のボタンと対応する回答を追加できます。

script.jsではfaqDropdownMenuAnswersに設定している営業時間、駐車場、予約についての回答文章を変更できます。質問側のdata-answer="hours"などの値と、回答側のhoursなどの名前を一致させることで、選択した質問に対応する回答が表示されます。

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;
「施設について」のタイトルの文字サイズです。値を大きくするとタイトルが大きく表示されます。

margin:0 0 24px;
説明文の下側余白です。24pxを大きくすると説明文とドロップダウンメニューの間隔が広がります。

max-width:420px;
ドロップダウンメニューの最大横幅です。値を大きくするとメニューが横に広がり、小さくすると狭くなります。

min-height:52px;
「質問を選ぶ」ボタンの最小高さです。値を大きくするとボタンが高くなります。

padding:14px 18px;
「質問を選ぶ」ボタンの内側余白です。上下の14pxと左右の18pxを変更すると、文字とボタン端の間隔が変わります。

top:calc(100% + 10px);
質問一覧をボタンから10px離して表示します。10pxを大きくするとボタンと質問一覧の間隔が広がります。

padding:8px;
質問一覧の内側余白です。値を大きくすると質問と一覧の外枠との間隔が広がります。

box-shadow:0 10px 24px rgba(15,23,42,.12);
質問一覧に付ける影です。10pxや24pxを変更すると影の位置や広がりが変化します。

padding:12px 14px;
各質問ボタンの内側余白です。値を大きくすると各質問の表示領域が広がります。

margin-top:24px;
回答表示エリアの上側余白です。値を大きくするとドロップダウンメニューと回答の間隔が広がります。

padding:20px;
回答表示エリアの内側余白です。値を大きくすると回答文と枠線の間隔が広がります。

border-radius:10px;
回答表示エリアの角丸です。値を大きくすると丸みが強くなります。

レスポンシブ対応
このサンプルはレスポンシブ対応です。style.cssのwidth:100%max-width:700pxによってFAQ全体が画面幅に合わせて縮小され、ドロップダウンメニューもwidth:100%max-width:420pxによって利用できる横幅に合わせて調整されます。さらに画面幅640px以下ではFAQ全体の内側余白をpadding:24px 18px;へ変更しているため、スマートフォン・タブレット・PCで利用できます。


こちらもおすすめ


コメント