ドロワーメニュー内にドロワーメニューを表示する方法【HTML/CSS/JavaScript・サンプルコード付き】

ドロワーメニュー

ドロワーメニュー内にドロワーメニューを表示する方法

ドロワーメニュー内にドロワーメニューを表示する方法を紹介します。メインのドロワーメニューから別のドロワーメニューを開ける構成になっており、階層を分けながら多くのメニューを整理して表示できます。親メニューから子メニューへ切り替えるような操作を実装したい場合に利用できます。

このサンプルはHTML・CSS・JavaScriptのみで実装しており、メインのドロワーメニューを開いた後、ボタンをクリックすると内部のドロワーメニューが左側から重なるように表示されます。子ドロワーメニューを閉じると親ドロワーメニューへ戻り、親メニューを閉じると両方のドロワーメニューが閉じます。

ECサイトの商品カテゴリー、管理画面の機能一覧、サービス一覧など、階層構造のナビゲーションを分かりやすく表示したい場面に適しています。メニュー項目、配色、横幅、開閉速度などはコード内で変更できるため、サイトデザインに合わせてカスタマイズしやすい構成です。

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

デモ

ドロワーメニュー内にドロワーメニューを表示

メインメニューから各項目を選択すると、それぞれ専用の子ドロワーメニューが表示されます。

「メニューを開く」をクリックするとメインドロワーメニューが表示されます。各メニューをクリックすると対応する子ドロワーメニューが表示され、「戻る」でメインメニューへ戻れます。「閉じる」ボタンまたは背景をクリックすると、すべてのドロワーメニューを閉じられます。


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

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

  <!-- 文字コード・レスポンシブ設定 -->
  <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>

  <!-- デモエリア -->
  <div class="drawer-menu-inside-drawer_wrap">

    <!-- タイトル -->
    <div class="drawer-menu-inside-drawer_title">
      ドロワーメニュー内にドロワーメニューを表示
    </div>

    <!-- 説明文 -->
    <p class="drawer-menu-inside-drawer_text">
      メインメニューから別のドロワーメニューを表示できます。
    </p>

    <!-- ドロワーメニューを開くボタン -->
    <button
      class="drawer-menu-inside-drawer_open"
      type="button">
      メニューを開く
    </button>

  </div>

  <!-- 背景オーバーレイ -->
  <div class="drawer-menu-inside-drawer_overlay"></div>

  <!-- メインドロワーメニュー -->
  <aside class="drawer-menu-inside-drawer_main">

    <!-- メニュー見出し -->
    <div class="drawer-menu-inside-drawer_heading">
      メインメニュー
    </div>

    <!-- メニュー一覧 -->
    <div class="drawer-menu-inside-drawer_nav">

      <!-- カテゴリードロワーを開く -->
      <button type="button" data-child="category">
        カテゴリー
      </button>

      <!-- お知らせドロワーを開く -->
      <button type="button" data-child="news">
        お知らせ
      </button>

      <!-- お問い合わせドロワーを開く -->
      <button type="button" data-child="contact">
        お問い合わせ
      </button>

    </div>

    <!-- メインドロワーを閉じるボタン -->
    <button
      class="drawer-menu-inside-drawer_close"
      type="button">
      閉じる
    </button>

  </aside>

  <!-- カテゴリードロワーメニュー -->
  <aside class="drawer-menu-inside-drawer_child" data-panel="category">

    <div class="drawer-menu-inside-drawer_heading">
      カテゴリー
    </div>

    <div class="drawer-menu-inside-drawer_nav">

      <button type="button">HTML</button>
      <button type="button">CSS</button>
      <button type="button">JavaScript</button>

    </div>

    <!-- メインメニューへ戻る -->
    <button
      class="drawer-menu-inside-drawer_back"
      type="button">
      戻る
    </button>

  </aside>

  <!-- お知らせドロワーメニュー -->
  <aside class="drawer-menu-inside-drawer_child" data-panel="news">

    <div class="drawer-menu-inside-drawer_heading">
      お知らせ
    </div>

    <div class="drawer-menu-inside-drawer_nav">

      <button type="button">新着情報</button>
      <button type="button">イベント</button>
      <button type="button">更新情報</button>

    </div>

    <!-- メインメニューへ戻る -->
    <button
      class="drawer-menu-inside-drawer_back"
      type="button">
      戻る
    </button>

  </aside>

  <!-- お問い合わせドロワーメニュー -->
  <aside class="drawer-menu-inside-drawer_child" data-panel="contact">

    <div class="drawer-menu-inside-drawer_heading">
      お問い合わせ
    </div>

    <div class="drawer-menu-inside-drawer_nav">

      <button type="button">メール</button>
      <button type="button">電話</button>
      <button type="button">資料請求</button>

    </div>

    <!-- メインメニューへ戻る -->
    <button
      class="drawer-menu-inside-drawer_back"
      type="button">
      戻る
    </button>

  </aside>

  <!-- JavaScript読み込み -->
  <script src="script.js"></script>

</body>
</html>

ファイル構成と設置方法

このサンプルはHTML・CSS・JavaScriptの3ファイルで構成されています。メインドロワーメニューを開き、その中のメニューをクリックすると対応する子ドロワーメニューが表示される構成です。子ドロワーは複数用意されていますが、一度に表示されるのは選択した1つだけです。

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

各ファイルの役割
index.htmlではメニューを開くボタン、メインドロワーメニュー、カテゴリー・お知らせ・お問い合わせの各子ドロワーメニューを配置しています。メニュー項目や表示する内容を変更したい場合は、このファイルを編集します。

style.cssではドロワーメニュー全体のデザインを設定しています。幅、余白、文字サイズ、背景色、ボタンデザイン、アニメーション速度など見た目を変更できます。

script.jsではドロワーメニューの開閉や、選択した子ドロワーメニューへの切り替え処理を行っています。メニューを閉じた際は、開いている子ドロワーメニューもまとめて閉じる仕様です。

設置方法・使い方
sampleフォルダ内へ3ファイルを配置し、index.htmlをブラウザで開くと利用できます。画面の「メニューを開く」をクリックするとメインドロワーメニューが表示され、各メニューをクリックすると対応する子ドロワーメニューへ切り替わります。「戻る」でメインメニューへ戻り、「閉じる」または背景クリックでドロワーメニューを閉じられます。

カスタマイズできる内容
index.htmlではメニュー名や子ドロワーメニュー内の項目を自由に変更できます。子ドロワーメニューを追加したい場合は、data-childとdata-panelを対応させることで増やせます。style.cssではドロワーの横幅、背景色、文字サイズ、ボタンデザイン、余白などを変更できます。

数値調整
style.cssの「width:320px」はドロワーメニューの横幅です。値を変更するとドロワーの幅が変わります。
「transition:.3s」は開閉アニメーションの時間です。0.3秒で開閉し、値を大きくするとゆっくり、小さくすると素早く表示されます。
「max-width:90%」は小さい画面での最大幅です。画面サイズに応じてドロワーが収まるよう調整されています。

レスポンシブ対応
style.cssでレスポンシブ対応しています。max-width:90%と640px以下のメディアクエリにより、スマートフォンではドロワーメニューが画面幅いっぱいに表示されます。PC・タブレット・スマートフォンのいずれでも操作しやすいレイアウトで利用できます。



コメント