タブ切り替え内にタブ切り替えを作る方法【HTML/CSS/JavaScript・サンプルコード付き】

タブ切り替え

タブ切り替え内にタブ切り替えを作る方法

タブ切り替え内にタブ切り替えを作る方法を紹介します。このサンプルでは、外側のタブでコンテンツを切り替え、そのコンテンツ内にさらに別のタブ切り替えを配置します。情報を大きな項目と細かな項目に分けて整理したい場合などに利用できます。

HTMLで外側と内側それぞれのタブとコンテンツを作成し、CSSで選択中のタブや表示エリアをデザインします。JavaScriptではクリックされたタブに対応するコンテンツだけを表示し、外側と内側のタブをそれぞれ独立して切り替えられるようにします。

タブ名や表示内容は自由に変更できます。外側のタブで大きなカテゴリーを分け、その中をさらに複数の項目へ分けられるため、ひとつの表示エリアへ多くの情報を整理して配置できます。

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

デモ

タブ切り替え内にタブ切り替えを表示

外側のタブを切り替え、その中にあるタブも個別に切り替えられます。

サービスについての情報を表示しています。

提供しているサービスの詳しい内容を表示します。
サービスを利用するときの方法を表示します。

料金についての情報を表示しています。

「サービス」タブ内の「サービス内容」「利用方法」をクリックすると、内側のコンテンツも個別に切り替えられます。

コードをコピーして使おう!

<!DOCTYPE html>
<html lang="ja">
<head>

  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">

  <title>タブ切り替え内にタブ切り替えを作る</title>

  <link rel="stylesheet" href="style.css">

</head>
<body>

  <!-- タブ切り替え全体 -->
  <div class="nested-tab-switch_wrap">

    <!-- タイトルと説明文 -->
    <div class="nested-tab-switch_title">
      タブ切り替え内にタブ切り替えを表示
    </div>

    <p class="nested-tab-switch_text">
      外側のタブを切り替え、その中にあるタブも個別に切り替えられます。
    </p>

    <!-- 外側のタブ -->
    <div class="nested-tab-switch_tabs" role="tablist" aria-label="外側のタブ">

      <button class="nested-tab-switch_tab is-active" type="button" data-outer-tab="service">
        サービス
      </button>

      <button class="nested-tab-switch_tab" type="button" data-outer-tab="price">
        料金
      </button>

    </div>

    <!-- 「サービス」タブの表示内容 -->
    <div class="nested-tab-switch_panel is-active" data-outer-panel="service">

      <p class="nested-tab-switch_panel-text">
        サービスについての情報を表示しています。
      </p>

      <!-- 外側のタブ内に配置する内側のタブ切り替え -->
      <div class="nested-tab-switch_inner">

        <!-- 内側のタブ -->
        <div class="nested-tab-switch_inner-tabs">

          <button class="nested-tab-switch_inner-tab is-active" type="button" data-inner-tab="content">
            サービス内容
          </button>

          <button class="nested-tab-switch_inner-tab" type="button" data-inner-tab="use">
            利用方法
          </button>

        </div>

        <!-- 「サービス内容」タブの表示内容 -->
        <div class="nested-tab-switch_inner-panel is-active" data-inner-panel="content">
          提供しているサービスの詳しい内容を表示します。
        </div>

        <!-- 「利用方法」タブの表示内容 -->
        <div class="nested-tab-switch_inner-panel" data-inner-panel="use">
          サービスを利用するときの方法を表示します。
        </div>

      </div>

    </div>

    <!-- 「料金」タブの表示内容 -->
    <div class="nested-tab-switch_panel" data-outer-panel="price">

      <p class="nested-tab-switch_panel-text">
        料金についての情報を表示しています。
      </p>

    </div>

  </div>

  <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は、タブ切り替え全体の構造を作るファイルです。外側には「サービス」「料金」のタブがあり、「サービス」のコンテンツ内には「サービス内容」「利用方法」の内側タブを配置しています。タブ名や各タブに表示する文章を変更したい場合は、このファイルを編集します。

style.cssは、外側と内側のタブ切り替えのデザインを設定するファイルです。全体の横幅や余白、枠線、角丸、背景色のほか、通常時と選択中のタブの色、コンテンツ部分の余白や文字サイズなどを変更できます。

script.jsは、タブをクリックしたときの切り替え処理を行うファイルです。外側では「サービス」と「料金」を切り替え、内側では「サービス内容」と「利用方法」を切り替えます。それぞれのタブに設定したdata属性を使って、対応するコンテンツへis-activeクラスを付け替えています。

設置方法・使い方
sampleフォルダを作成し、その中へindex.html、style.css、script.jsを同じ階層で配置します。index.htmlからstyle.cssとscript.jsを読み込んでいるため、ファイル名を変更せずに配置してください。

3つのファイルを配置したあと、sample/index.htmlをブラウザで開きます。「サービス」と「料金」をクリックすると外側の表示内容が切り替わります。「サービス」を表示している状態では、その中にある「サービス内容」と「利用方法」をクリックして内側の表示内容も切り替えられます。

カスタマイズできる内容
index.htmlでは、外側の「サービス」「料金」、内側の「サービス内容」「利用方法」というタブ名や、それぞれに対応する表示内容を変更できます。外側のタブとコンテンツはdata-outer-tabdata-outer-panel、内側はdata-inner-tabdata-inner-panelの値を対応させて使用します。

style.cssでは、全体の最大横幅や余白、背景色、枠線、角丸を変更できます。また、外側タブの通常時と選択中の背景色・文字色、内側タブの背景色・枠線色・文字色、各コンテンツの余白や文字サイズも変更できます。

script.jsでは、外側と内側のタブをクリックしたときに付け替えるis-activeクラスによって表示状態を管理しています。HTMLのdata属性と対応するコンテンツを取得し、選択した内容だけを表示する仕組みになっています。

数値調整
style.cssのmax-width:700px;はタブ切り替え全体の最大横幅です。値を大きくすると全体が横へ広がり、小さくするとコンパクトになります。

margin:40px auto;の40pxは全体の上下余白、padding:32px;は全体の内側余白です。値を大きくすると周囲や内容との間隔が広がります。border-radius:18px;は全体の角丸で、値を大きくすると丸みが強くなります。

外側のタブに設定したmin-height:52px;は最小の高さ、padding:14px;は内側余白です。margin-left:6px;は隣り合う外側タブの間隔を指定しています。transition.3sは背景色と文字色が切り替わる時間で、値を大きくするとゆっくり、小さくすると速く変化します。

外側コンテンツのpadding:24px;は内側余白です。内側のタブ切り替えではpadding:20px;border-radius:14px;を設定しています。内側タブのgap:8px;はタブ同士の間隔、margin-bottom:16px;はタブとコンテンツの間隔です。内側コンテンツのpadding:18px;border-radius:10px;を変更すると、コンテンツ内の余白と角丸を調整できます。

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

画面幅640px以下ではメディアクエリを使用し、全体の余白を24px 18px、外側タブの最小高さを48px、文字サイズを14pxへ変更します。外側コンテンツや内側タブ切り替えの余白、内側タブの文字サイズも小さくなるため、スマートフォン・タブレット・PCで利用できます。


こちらもおすすめ


コメント