FAQ・Q&A向けタブ切り替えの作り方【HTML/CSS/JavaScript・サンプルコード付き】

タブ切り替え

FAQ・Q&A向けタブ切り替えの作り方

FAQ・Q&A向けタブ切り替えの作り方を紹介します。このサンプルでは、施設についてよく確認される「営業時間」「利用料金」「予約方法」をタブとして表示し、クリックした項目に対応する回答へ切り替えます。複数の案内をひとつのエリアへまとめながら、必要な情報だけを表示できる構成です。

施設案内、店舗情報、サービス紹介など、同じ対象について複数の質問と回答をまとめたい場面に利用できます。最初は営業時間のタブを選択した状態で表示し、利用料金や予約方法のタブをクリックすると、それぞれの内容へ切り替わります。現在選択しているタブは背景色を変えて分かりやすく表示します。

HTMLでは施設名、タブ名、各回答の文章を変更でき、CSSでは全体の横幅、余白、背景色、枠線、角丸、タブの色などを調整できます。JavaScriptではクリックしたタブに対応する回答を表示します。画面幅が狭い場合にも表示しやすいよう調整しているため、スマートフォン・タブレット・PCで利用できます。

コードについて 本記事のコードはサンプルコードです。ご利用前に必ず動作確認を行ってください。
免責事項 本コードの利用により発生した損害について、当サイトは一切の責任を負いません。

デモ

サンプル施設について

確認したい項目をクリックすると、対応する回答へ切り替わります。

A. 営業時間は午前9時から午後6時までです。
A. 一般料金は1,000円です。利用内容によって料金が異なる場合があります。
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・Q&A全体 -->
  <div class="faq-tab-switch_wrap">

    <!-- 見出し -->
    <div class="faq-tab-switch_title">
      施設についてよくある質問
    </div>

    <!-- 説明文 -->
    <p class="faq-tab-switch_text">
      質問のタブをクリックすると、対応する回答へ切り替わります。
    </p>

    <!-- 質問タブ -->
    <div class="faq-tab-switch_tabs" role="tablist" aria-label="よくある質問">

      <button
        class="faq-tab-switch_tab is-active"
        id="faq-tab-switch-hours"
        type="button"
        role="tab"
        aria-controls="faq-tab-switch-panel-hours"
        aria-selected="true"
        data-tab="hours">
        営業時間
      </button>

      <button
        class="faq-tab-switch_tab"
        id="faq-tab-switch-holiday"
        type="button"
        role="tab"
        aria-controls="faq-tab-switch-panel-holiday"
        aria-selected="false"
        data-tab="holiday">
        定休日
      </button>

      <button
        class="faq-tab-switch_tab"
        id="faq-tab-switch-parking"
        type="button"
        role="tab"
        aria-controls="faq-tab-switch-panel-parking"
        aria-selected="false"
        data-tab="parking">
        駐車場
      </button>

    </div>

    <!-- 営業時間の回答 -->
    <div
      class="faq-tab-switch_panel is-active"
      id="faq-tab-switch-panel-hours"
      role="tabpanel"
      aria-labelledby="faq-tab-switch-hours"
      data-panel="hours">
      <span class="faq-tab-switch_answer-mark">A.</span>
      営業時間は10:00〜18:00です。
    </div>

    <!-- 定休日の回答 -->
    <div
      class="faq-tab-switch_panel"
      id="faq-tab-switch-panel-holiday"
      role="tabpanel"
      aria-labelledby="faq-tab-switch-holiday"
      data-panel="holiday">
      <span class="faq-tab-switch_answer-mark">A.</span>
      毎週水曜日が定休日です。
    </div>

    <!-- 駐車場の回答 -->
    <div
      class="faq-tab-switch_panel"
      id="faq-tab-switch-panel-parking"
      role="tabpanel"
      aria-labelledby="faq-tab-switch-parking"
      data-panel="parking">
      <span class="faq-tab-switch_answer-mark">A.</span>
      施設専用の無料駐車場を利用できます。
    </div>

  </div>

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

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

ファイル構成と設置方法

このサンプルはHTML・CSS・JavaScriptの3ファイルで構成されています。HTMLでは施設についてのよくある質問を「営業時間」「定休日」「駐車場」の3つのタブとして配置し、それぞれに対応する回答パネルを用意します。CSSではタブの横幅、余白、背景色、枠線、角丸、選択中の色、回答エリアの見た目などを設定し、JavaScriptではクリックしたタブに対応する回答だけを表示します。

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

各ファイルの役割
index.htmlはFAQ・Q&A向けタブ切り替え全体を構成するファイルです。「施設についてよくある質問」の見出し、説明文、「営業時間」「定休日」「駐車場」のタブ名、それぞれの回答内容を変更できます。各タブのdata-tabと回答パネルのdata-panelを同じ値にすることで、対応する質問と回答を関連付けています。

style.cssはタブ切り替え全体のデザインを設定するファイルです。全体の最大横幅、余白、背景色、枠線、角丸、タブの高さや文字サイズ、選択中の背景色、回答エリアの余白や文字色などを変更できます。

script.jsは質問タブをクリックしたときの切り替え処理を行うファイルです。クリックしたタブ以外からis-activeクラスを外し、選択されたタブと対応する回答パネルへis-activeクラスを追加します。あわせてaria-selectedも更新します。

設置方法・使い方
sampleフォルダへindex.html、style.css、script.jsを同じ階層で配置します。3つのファイルを保存したあと、sample/index.htmlをブラウザで開いてください。

初期状態では「営業時間」のタブが選択され、その回答が表示されます。「定休日」や「駐車場」をクリックすると、選択中のタブが切り替わり、対応する回答だけが表示されます。

カスタマイズできる内容
index.htmlでは見出し、説明文、タブ名、各回答の文章を変更できます。質問を追加する場合は既存と同じ構造でタブと回答パネルを追加し、data-tabdata-panelへ同じ値を設定します。

style.cssではFAQ全体の横幅、余白、背景色、枠線、角丸、タブの高さ、文字サイズ、選択中の背景色や文字色、回答エリアの余白、文字色、行間、「A.」の色などを変更できます。

script.jsではタブをクリックしたときの選択状態と回答表示の切り替えを制御しています。HTML側で追加したタブと回答パネルも、同じクラス名とdata属性を使用すれば既存の処理で切り替えられます。

数値調整
style.css
max-width:700px;
FAQ・Q&A全体の最大横幅です。値を大きくすると横に広がり、小さくするとコンパクトになります。

margin:40px auto;
全体の上下余白です。40pxを大きくすると上下の間隔が広がり、小さくすると狭くなります。

padding:32px;
全体の内側余白です。値を大きくすると内容と外枠の間隔が広がります。

border-radius:18px;
FAQ全体の角丸です。値を大きくすると丸みが強くなり、0にすると四角になります。

font-size:22px;
見出しの文字サイズです。値を大きくすると見出しが大きく表示されます。

margin:0 0 24px;
説明文の下側余白です。24pxを大きくすると説明文とタブとの間隔が広がります。

min-height:52px;
タブの最小高さです。値を大きくするとタブが高くなります。

padding:14px;
タブの内側余白です。値を大きくするとタブ内の余白が広がります。

border-radius:12px 12px 0 0;
タブ上部の角丸です。12pxを大きくすると上側の丸みが強くなります。

margin-left:6px;
2つ目以降のタブとの間隔です。値を大きくするとタブ同士の間隔が広がります。

transition:0.3s;
タブの背景色と文字色が切り替わる時間です。0.3秒で変化します。値を大きくするとゆっくり、小さくすると速く切り替わります。

outline:3px solid rgba(11,107,255,.22);
キーボード操作でタブへフォーカスしたときの強調線です。3pxを大きくすると線が太くなります。

outline-offset:2px;
フォーカス時の強調線とタブの間隔です。値を大きくすると外側へ離れます。

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

font-size:16px;
回答文の文字サイズです。値を大きくすると文字が大きくなります。

line-height:1.8;
回答文の行間です。値を大きくすると行間が広がり、小さくすると詰まった表示になります。

margin-right:8px;
「A.」と回答文の間隔です。値を大きくすると両者の間隔が広がります。

レスポンシブ対応
このサンプルはレスポンシブ対応です。style.cssではFAQ全体へwidth:100%max-width:700pxを指定しているため、画面幅に合わせて縮小されます。

また、画面幅640px以下では全体の内側余白を24px 18px、タブの最小高さを48px、内側余白を12px 8px、文字サイズを14pxへ調整しています。タブ同士の間隔も4pxへ縮小し、回答エリアの余白を20px 16pxへ変更しているため、スマートフォン・タブレット・PCで利用できます。


こちらもおすすめ


コメント