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

ドロワーメニュー

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

ドロワーメニュー内に、さらに別のドロワーメニューを表示する方法を紹介します。このサンプルでは、画面右側から開く外側のドロワーメニューの中にボタンを配置し、そのボタンをクリックすると内側のドロワーメニューがさらに表示される入れ子構造を作成します。

外側のメニューには「サービス」「料金」「お問い合わせ」などの項目を配置し、「サービス詳細」をクリックすると、その上に内側のドロワーメニューが開きます。階層の異なるメニューを段階的に表示できるため、項目数が多いナビゲーションや、カテゴリーから詳細項目へ移動するメニューなどに利用できます。

HTMLでは外側と内側それぞれのドロワーメニューを配置し、CSSでは横幅、背景色、余白、枠線、影、開閉位置などを調整できます。JavaScriptではボタンのクリックに合わせてクラスを切り替え、それぞれのドロワーメニューを個別に開閉します。レスポンシブにも対応しているため、スマートフォン・タブレット・PCで利用できます。

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

デモ

ドロワーメニュー

外側のドロワーメニューから、さらに内側のドロワーメニューを表示できます。

メニュー

「メニューを開く」をクリックすると左側から外側のドロワーメニューが表示され、「サービス詳細」をクリックすると内側のドロワーメニューをさらに表示できます。

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

<!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="nested-drawer-demo">

    <!-- 通常表示する内容 -->
    <div class="nested-drawer-demo_content">

      <!-- タイトル -->
      <div class="nested-drawer-demo_title">
        ドロワーメニュー
      </div>

      <!-- 説明文 -->
      <p class="nested-drawer-demo_text">
        外側のドロワーメニューから、さらに内側のドロワーメニューを表示できます。
      </p>

      <!-- 外側ドロワーを開くボタン -->
      <button
        class="nested-drawer-demo_open"
        type="button">
        メニューを開く
      </button>

    </div>

    <!-- ドロワー表示時のオーバーレイ -->
    <div class="nested-drawer-demo_overlay"></div>

    <!-- 外側のドロワーメニュー -->
    <div class="nested-drawer-demo_outer">

      <!-- 外側ドロワーの見出し -->
      <div class="nested-drawer-demo_heading">

        <strong>メニュー</strong>

        <!-- 外側ドロワーを閉じるボタン -->
        <button
          class="nested-drawer-demo_close nested-drawer-demo_outer-close"
          type="button">
          閉じる
        </button>

      </div>

      <!-- 外側ドロワーのメニュー一覧 -->
      <ul class="nested-drawer-demo_list">

        <!-- お知らせ -->
        <li>
          <a class="nested-drawer-demo_link" href="#">
            お知らせ
          </a>
        </li>

        <!-- 内側ドロワーを開く項目 -->
        <li>
          <button
            class="nested-drawer-demo_link nested-drawer-demo_inner-link"
            type="button">
            サービス詳細
          </button>
        </li>

        <!-- 料金 -->
        <li>
          <a class="nested-drawer-demo_link" href="#">
            料金
          </a>
        </li>

        <!-- お問い合わせ -->
        <li>
          <a class="nested-drawer-demo_link" href="#">
            お問い合わせ
          </a>
        </li>

      </ul>

    </div>

    <!-- 内側のドロワーメニュー -->
    <div class="nested-drawer-demo_inner">

      <!-- 内側ドロワーの見出し -->
      <div class="nested-drawer-demo_heading">

        <strong>サービス詳細</strong>

        <!-- 内側ドロワーを閉じるボタン -->
        <button
          class="nested-drawer-demo_close nested-drawer-demo_inner-close"
          type="button">
          閉じる
        </button>

      </div>

      <!-- 内側ドロワーのメニュー一覧 -->
      <ul class="nested-drawer-demo_list">

        <!-- Webサイト制作 -->
        <li>
          <a class="nested-drawer-demo_link" href="#">
            Webサイト制作
          </a>
        </li>

        <!-- サイト運用 -->
        <li>
          <a class="nested-drawer-demo_link" href="#">
            サイト運用
          </a>
        </li>

        <!-- サポート -->
        <li>
          <a class="nested-drawer-demo_link" href="#">
            サポート
          </a>
        </li>

      </ul>

    </div>

  </div>

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

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

ファイル構成と設置方法

このサンプルはHTML・CSS・JavaScriptの3ファイルで構成されています。HTMLでは通常表示する内容、外側のドロワーメニュー、さらにその中から表示する内側のドロワーメニューを作成します。CSSでは各ドロワーの横幅や背景色、余白、開閉時の位置、オーバーレイなどの見た目を設定し、JavaScriptではボタン操作による2段階の開閉処理を行います。

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

各ファイルの役割
index.htmlはドロワーメニュー全体を構成するファイルです。「メニューを開く」ボタン、外側ドロワーのメニュー項目、「サービス詳細」から表示する内側ドロワーのメニュー項目、それぞれの「閉じる」ボタンを記述しています。メニュー名やリンク先、表示する項目はこのファイルから変更できます。

style.cssはドロワーメニューのデザインと表示位置を設定するファイルです。全体のサイズ、外側・内側ドロワーの横幅、背景色、余白、角丸、影、オーバーレイの色、開閉アニメーションなどを変更できます。外側と内側のドロワーは初期状態で左側へ隠し、表示時に左端からスライドして現れるように設定しています。

script.jsはドロワーメニューの開閉を制御するファイルです。「メニューを開く」をクリックすると外側ドロワーとオーバーレイを表示し、「サービス詳細」をクリックすると内側ドロワーを表示します。それぞれの「閉じる」ボタンをクリックすると対応するドロワーを閉じます。

設置方法・使い方
sampleフォルダへindex.html、style.css、script.jsを配置します。3つのファイルを同じ階層へ保存したあと、sample/index.htmlをブラウザで開いてください。「メニューを開く」をクリックすると画面左側から外側のドロワーメニューが表示されます。

外側ドロワーの「サービス詳細」をクリックすると、その上へ内側のドロワーメニューが左側から表示されます。内側の「閉じる」をクリックすると内側だけを閉じることができ、外側の「閉じる」をクリックすると外側と内側のドロワー、およびオーバーレイが非表示になります。

カスタマイズできる内容
index.htmlではタイトル、説明文、外側ドロワーの見出し、メニュー項目、内側ドロワーの見出し、メニュー項目、各リンク先を変更できます。「お知らせ」「料金」「お問い合わせ」「Webサイト制作」「サイト運用」「サポート」などの文章を用途に合わせて変更できます。

style.cssでは全体の横幅と高さ、外側・内側ドロワーの横幅、背景色、文字色、余白、角丸、影、オーバーレイの色と透明度を変更できます。外側ドロワーは白、内側ドロワーは水色に設定されているため、2段階のメニューを見た目でも区別できます。また、transitionの値を変更すると、ドロワーが開閉する速度を調整できます。

数値調整
style.css
max-width:900px;
ドロワーメニューを表示するエリア全体の最大横幅です。値を大きくすると横に広がり、小さくするとコンパクトになります。

height:560px;
表示エリア全体の高さです。値を大きくすると縦方向の表示範囲が広がり、小さくすると低くなります。

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

padding:32px;
通常表示する内容の内側余白です。値を大きくすると画面端との間隔が広がります。

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

width:360px;
外側ドロワーの横幅です。値を大きくすると外側メニューが横に広がり、小さくすると狭くなります。

max-width:88%;
外側ドロワーが表示エリアに対して使用できる最大横幅です。画面が狭い場合にドロワーが広がりすぎることを防ぎます。

padding:28px 24px;
外側ドロワーの内側余白です。上下28px、左右24pxを変更すると、ドロワーの端と内容との間隔が変わります。

width:310px;
内側ドロワーの横幅です。値を大きくすると内側メニューが横に広がり、小さくすると狭くなります。

max-width:82%;
内側ドロワーが表示エリアに対して使用できる最大横幅です。値を変更すると、狭い画面での最大サイズが変わります。

padding:28px 22px;
内側ドロワーの内側余白です。上下28px、左右22pxを変更すると、内側メニューと端との間隔が変わります。

background:rgba(15,23,42,.28);
オーバーレイの色と透明度です。末尾の.28を大きくすると背景が濃くなり、小さくすると薄くなります。

transition:transform .3s ease;
ドロワーが開閉するときの移動時間です。0.3秒で切り替わります。値を大きくするとゆっくり、小さくすると速く開閉します。

レスポンシブ対応
このサンプルはレスポンシブ対応です。style.cssのwidth:100%max-width:900pxによって、表示エリアが画面幅に合わせて縮小します。外側ドロワーにはmax-width:88%、内側ドロワーにはmax-width:82%を設定しているため、画面幅が狭い場合にもドロワーが表示範囲を大きく超えないようにしています。

また、画面幅640px以下では表示エリアの高さを520px、外側ドロワーの横幅を320px、内側ドロワーの横幅を270pxへ変更し、それぞれの内側余白も小さくしています。これにより、スマートフォン・タブレット・PCで利用できます。


こちらもおすすめ


コメント