タブ切り替え機能付きドロワーメニューを作る方法【HTML/CSS/JavaScript・サンプルコード付き】

タブ切り替え

タブ切り替え機能付きドロワーメニューを作る方法

タブ切り替え機能付きドロワーメニューを作る方法を紹介します。このサンプルでは、ドロワーメニュー内へタブ切り替え機能を実装し、「メニュー」「SNS」「設定」などのタブをクリックすると表示内容だけを切り替えられます。HTML・CSS・JavaScriptだけで実装でき、ページ遷移せずに複数の情報を整理して表示できます。

通常のドロワーメニューより多くの情報を見やすく整理できるため、企業サイト、管理画面、会員サイト、ECサイトなどでカテゴリごとにメニューを分けたい場合に便利です。ドロワーメニューを閉じることなく必要な情報へ切り替えられるため、操作性も向上します。

タブ名、表示内容、メニュー項目、リンク先URL、配色、横幅、余白、角丸、影、アニメーション速度などを自由に変更できます。画面幅640px以下ではスマートフォン向けレイアウトへ切り替わるため、スマートフォン・タブレット・PCで利用できます。

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

デモ

タブ切り替え機能付きドロワーメニュー

タブを切り替えると、ドロワーメニュー内の表示内容だけが切り替わります。

「メニューを開く」をクリックするとドロワーメニューが表示されます。タブをクリックすると表示内容が切り替わり、「閉じる」ボタンまたは背景部分をクリックするとドロワーメニューを閉じます。

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

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

<head>

  <!-- 文字コードをUTF-8に設定する -->
  <meta charset="UTF-8">

  <!-- スマートフォンで適切な表示サイズにする -->
  <meta name="viewport" content="width=device-width, initial-scale=1.0">

  <!-- ブラウザのタブに表示するページタイトル -->
  <title>タブ切り替え機能付きドロワーメニュー</title>

  <!-- CSSファイルを読み込む -->
  <link rel="stylesheet" href="style.css">

</head>

<body>

  <!-- ページの案内エリア -->
  <main class="tab-drawer-menu_wrap">

    <!-- 案内エリアのタイトル -->
    <h1 class="tab-drawer-menu_title">
      タブ切り替え機能付きドロワーメニュー
    </h1>

    <!-- ドロワーメニューの説明文 -->
    <p class="tab-drawer-menu_text">
      タブを切り替えると、ドロワーメニュー内の表示内容だけが切り替わります。
    </p>

    <!-- ドロワーメニューを開くボタン -->
    <button
      class="tab-drawer-menu_open"
      type="button"
      data-tab-drawer-open>
      メニューを開く
    </button>

  </main>

  <!-- ドロワーメニュー表示時の背景 -->
  <div
    class="tab-drawer-menu_overlay"
    data-tab-drawer-overlay
    aria-hidden="true">

    <!-- ドロワーメニュー本体 -->
    <aside
      class="tab-drawer-menu_drawer"
      role="dialog"
      aria-modal="true"
      aria-label="タブ切り替え機能付きドロワーメニュー">

      <!-- タブボタンを並べるエリア -->
      <div
        class="basic-tab-switch_tabs"
        role="tablist"
        aria-label="ドロワーメニューの表示切り替え">

        <!-- 初期表示するメニュータブ -->
        <button
          class="basic-tab-switch_tab is-active"
          id="tab-menu"
          type="button"
          role="tab"
          aria-selected="true"
          aria-controls="panel-menu"
          data-tab="menu">
          メニュー
        </button>

        <!-- SNSタブ -->
        <button
          class="basic-tab-switch_tab"
          id="tab-sns"
          type="button"
          role="tab"
          aria-selected="false"
          aria-controls="panel-sns"
          data-tab="sns">
          SNS
        </button>

        <!-- 設定タブ -->
        <button
          class="basic-tab-switch_tab"
          id="tab-setting"
          type="button"
          role="tab"
          aria-selected="false"
          aria-controls="panel-setting"
          data-tab="setting">
          設定
        </button>

      </div>

      <!-- メニュータブに対応する表示内容 -->
      <div
        class="basic-tab-switch_panel is-active"
        id="panel-menu"
        role="tabpanel"
        aria-labelledby="tab-menu"
        data-panel="menu">

        <!--
          href属性の#をホームページのURLへ変更する
          「ホーム」を表示したいメニュー名へ変更できる
        -->
        <a href="#">ホーム</a>

        <!--
          href属性の#をサービスページのURLへ変更する
          「サービス」を表示したいメニュー名へ変更できる
        -->
        <a href="#">サービス</a>

        <!--
          href属性の#をお問い合わせページのURLへ変更する
          「お問い合わせ」を表示したいメニュー名へ変更できる
        -->
        <a href="#">お問い合わせ</a>

      </div>

      <!-- SNSタブに対応する表示内容 -->
      <div
        class="basic-tab-switch_panel"
        id="panel-sns"
        role="tabpanel"
        aria-labelledby="tab-sns"
        data-panel="sns">

        <!--
          href属性の#をXのURLへ変更する
          「X」を表示したいリンク名へ変更できる
        -->
        <a href="#">X</a>

        <!--
          href属性の#をInstagramのURLへ変更する
          「Instagram」を表示したいリンク名へ変更できる
        -->
        <a href="#">Instagram</a>

        <!--
          href属性の#をYouTubeのURLへ変更する
          「YouTube」を表示したいリンク名へ変更できる
        -->
        <a href="#">YouTube</a>

      </div>

      <!-- 設定タブに対応する表示内容 -->
      <div
        class="basic-tab-switch_panel"
        id="panel-setting"
        role="tabpanel"
        aria-labelledby="tab-setting"
        data-panel="setting">

        <!--
          href属性の#をプロフィールページのURLへ変更する
          「プロフィール」を表示したいメニュー名へ変更できる
        -->
        <a href="#">プロフィール</a>

        <!--
          href属性の#を通知設定ページのURLへ変更する
          「通知設定」を表示したいメニュー名へ変更できる
        -->
        <a href="#">通知設定</a>

        <!--
          href属性の#をログアウト先のURLへ変更する
          「ログアウト」を表示したいメニュー名へ変更できる
        -->
        <a href="#">ログアウト</a>

      </div>

      <!-- ドロワーメニューを閉じるボタン -->
      <button
        class="tab-drawer-menu_close"
        type="button"
        data-tab-drawer-close>
        閉じる
      </button>

    </aside>

  </div>

  <!-- JavaScriptファイルを読み込む -->
  <script src="script.js"></script>

</body>

</html>

ファイル構成と設置方法

このサンプルはHTML・CSS・JavaScriptの3ファイルで構成されています。「メニューを開く」ボタンをクリックすると画面左側からドロワーメニューが表示され、ドロワーメニュー内のタブをクリックすると表示内容だけを切り替えられます。HTMLでレイアウトを作成し、CSSでドロワーメニューとタブのデザインを設定、JavaScriptでドロワーメニューの開閉とタブ切り替えを行っています。

ドロワーメニュー内へ複数のカテゴリをまとめて表示できるため、通常メニュー、SNSリンク、設定などを整理して配置できます。ページ遷移せずに表示内容だけを切り替えられるため、管理画面や会員サイト、企業サイトなどでも利用しやすい構成です。

タブ名、各タブの表示内容、リンク先URL、ドロワーメニューの横幅、配色、余白、影、背景の暗さ、表示アニメーションの速度などを変更できます。画面幅640px以下ではスマートフォン向けレイアウトへ切り替わるため、スマートフォン・タブレット・PCで利用できます。

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

各ファイルの役割
index.html
ドロワーメニュー全体の構造を定義しています。タブ名、各タブに表示するリンク、リンク先URL、ボタンの文字などを編集できます。タブを追加したい場合は、タブボタンと対応する表示パネルを同じ形式で追加します。

style.css
ドロワーメニュー、背景オーバーレイ、タブボタン、表示パネル、リンク、ボタン、表示アニメーション、レスポンシブ表示を設定しています。配色、横幅、余白、角丸、影、背景色、表示速度などを変更できます。

script.js
ドロワーメニューの開閉処理とタブ切り替え処理を行っています。クリック時の動作や初期表示するタブを変更できます。

設置方法・使い方
sampleフォルダ内へindex.htmlstyle.cssscript.jsを同じ階層へ配置します。

sample/index.htmlをブラウザで開くとサンプルを確認できます。「メニューを開く」をクリックするとドロワーメニューが表示され、タブをクリックすると表示内容が切り替わります。

カスタマイズできる内容
index.htmlでは、タイトル、説明文、タブ名、各タブのリンク、リンク先URL、ボタンの文字を変更できます。表示内容を増やしたい場合は、新しいタブボタンと表示パネルを追加してください。

style.cssでは、ドロワーメニューの横幅、背景色、ボタン色、タブの配色、文字サイズ、余白、角丸、影、背景オーバーレイの暗さ、アニメーション速度を変更できます。

script.jsでは、ドロワーメニューの開閉処理やタブ切り替え処理を変更できます。

数値調整
style.csswidth:360px;はドロワーメニューの横幅です。値を大きくすると広くなり、小さくすると狭くなります。

padding:24px;はドロワーメニュー内側の余白です。値を大きくすると余白が広くなり、小さくすると詰まった表示になります。

border-radius:12px;はタブボタンの角丸です。値を大きくすると丸みが強くなります。

background:rgba(0,0,0,.45);.45は背景の暗さです。値を大きくすると暗くなり、小さくすると背景が透けます。

animation:tab-drawer-menu-slide .35s ease forwards;.35sは表示アニメーション時間です。値を大きくするとゆっくり表示され、小さくすると速く表示されます。

レスポンシブ対応
style.cssではwidth:100%max-width:100%overflow-y:auto@media screen and (max-width:640px)を使用してレスポンシブ対応しています。

スマートフォンではドロワーメニューを画面幅いっぱいに表示し、タブボタンや開くボタンも画面サイズに合わせて調整されます。タブレット・PCでもレイアウトが崩れず利用できます。


こちらもおすすめ


コメント