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

ドロワーメニュー

左右から表示するドロワーメニューを作る方法

HTML・CSS・JavaScriptを使って、画面の左側と右側からそれぞれ表示できるドロワーメニューを作る方法を紹介します。このサンプルでは「左から開く」と「右から開く」の2つのボタンを用意し、クリックしたボタンに応じて対応する方向からドロワーメニューを表示します。左右で異なるメニューを配置したい場合や、メインメニューと補助メニューを表示位置によって分けたい場合に利用できます。

左側のドロワーには「ホーム」「サービス」「お知らせ」「お問い合わせ」、右側のドロワーには「プロフィール」「お気に入り」「設定」「ヘルプ」のリンクを配置しています。CSSのtransform:translateX()を使い、左側のドロワーは画面の左外側、右側のドロワーは画面の右外側へ隠しておき、is-activeクラスが付いたときにそれぞれ画面内へスライドさせます。

JavaScriptでは左右の開くボタンを個別に取得し、クリックされた方向のドロワーと背景を表示します。それぞれの「閉じる」ボタンまたはドロワー外側の半透明の背景をクリックするとメニューを閉じます。CSSでは左右のドロワーの横幅、スライド速度、背景色、リンクのデザインなどを変更でき、画面幅640px以下ではドロワーの横幅を画面に合わせて調整します。

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

デモ

左右から表示するドロワーメニュー

左右のボタンをクリックして、表示方向の違いを確認できます。

「左から開く」をクリックすると左側から、「右から開く」をクリックすると右側からドロワーメニューが表示されます。「閉じる」ボタンまたは背景部分をクリックすると閉じます。

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

<!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="both-sides-drawer-menu_wrap">

    <!-- タイトル -->
    <div class="both-sides-drawer-menu_title">
      左右から表示するドロワーメニュー
    </div>

    <!-- 説明文 -->
    <p class="both-sides-drawer-menu_text">
      左右のボタンをクリックして、表示方向の違いを確認できます。
    </p>

    <!-- 開くボタンを並べるエリア -->
    <div class="both-sides-drawer-menu_buttons">

      <!-- 左側のドロワーを開くボタン -->
      <button
        class="both-sides-drawer-menu_open"
        type="button"
        data-drawer-side="left">
        左から開く
      </button>

      <!-- 右側のドロワーを開くボタン -->
      <button
        class="both-sides-drawer-menu_open"
        type="button"
        data-drawer-side="right">
        右から開く
      </button>

    </div>

  </main>

  <!-- ドロワーメニュー表示時の背景 -->
  <div class="both-sides-drawer-menu_overlay"></div>

  <!-- 左側のドロワーメニュー -->
  <aside class="both-sides-drawer-menu_drawer both-sides-drawer-menu_drawer-left">

    <!-- 左側ドロワーのタイトル -->
    <div class="both-sides-drawer-menu_heading">
      メインメニュー
    </div>

    <!-- 左側ドロワーの説明文 -->
    <p class="both-sides-drawer-menu_description">
      左側から表示するメニューです。
    </p>

    <!-- 左側のメニューリンク -->
    <nav class="both-sides-drawer-menu_nav">
      <a class="both-sides-drawer-menu_link" href="#">ホーム</a>
      <a class="both-sides-drawer-menu_link" href="#">サービス</a>
      <a class="both-sides-drawer-menu_link" href="#">お知らせ</a>
      <a class="both-sides-drawer-menu_link" href="#">お問い合わせ</a>
    </nav>

    <!-- 左側ドロワーを閉じるボタン -->
    <button class="both-sides-drawer-menu_close" type="button">
      閉じる
    </button>

  </aside>

  <!-- 右側のドロワーメニュー -->
  <aside class="both-sides-drawer-menu_drawer both-sides-drawer-menu_drawer-right">

    <!-- 右側ドロワーのタイトル -->
    <div class="both-sides-drawer-menu_heading">
      サブメニュー
    </div>

    <!-- 右側ドロワーの説明文 -->
    <p class="both-sides-drawer-menu_description">
      右側から表示するメニューです。
    </p>

    <!-- 右側のメニューリンク -->
    <nav class="both-sides-drawer-menu_nav">
      <a class="both-sides-drawer-menu_link" href="#">プロフィール</a>
      <a class="both-sides-drawer-menu_link" href="#">お気に入り</a>
      <a class="both-sides-drawer-menu_link" href="#">設定</a>
      <a class="both-sides-drawer-menu_link" href="#">ヘルプ</a>
    </nav>

    <!-- 右側ドロワーを閉じるボタン -->
    <button class="both-sides-drawer-menu_close" type="button">
      閉じる
    </button>

  </aside>

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

</body>

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

ファイル構成と設置方法

このサンプルはHTML・CSS・JavaScriptの3ファイルで構成されています。HTMLで左右それぞれのドロワーメニューと開くボタンを配置し、CSSで左側と右側からスライドする表示方向を設定します。JavaScriptではクリックされたボタンを判定し、対応するドロワーメニューへis-activeクラスを追加して表示します。

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

各ファイルの役割
index.htmlは左右から表示するドロワーメニューの構造を作るファイルです。「左から開く」と「右から開く」の2つのボタン、左側のメインメニュー、右側のサブメニュー、それぞれのリンクと「閉じる」ボタンを配置しています。

style.cssは左右のドロワーメニューの配置とデザインを設定するファイルです。左側はleft:0;、右側はright:0;を基準に配置し、閉じた状態ではtranslateX()を使ってそれぞれ画面外へ移動しています。is-activeクラスが付くとtranslateX(0)へ変化して画面内へ表示されます。

script.jsは左右のドロワーメニューを開閉するファイルです。開くボタンのdata-drawer-side属性を確認して、leftの場合は左側、rightの場合は右側のドロワーを表示します。「閉じる」ボタンまたは半透明の背景をクリックすると、表示中のドロワーを閉じます。

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

「左から開く」をクリックすると画面左側からメインメニューが表示され、「右から開く」をクリックすると画面右側からサブメニューが表示されます。「閉じる」ボタンまたはドロワー外側の背景をクリックすると閉じます。

カスタマイズできる内容
index.htmlでは左右それぞれのドロワーメニューのタイトル、説明文、リンク名、リンク数、リンク先を変更できます。実際に使用する場合は各href="#"を移動先のURLへ変更してください。

左右のドロワーに同じメニューを配置する必要はありません。サンプルのように左側をメインメニュー、右側をプロフィールや設定などの補助メニューとして使い分けることもできます。

style.cssではドロワーメニューの横幅、余白、背景色、リンクのデザイン、背景オーバーレイの濃さ、スライド速度などを変更できます。

数値調整
style.css
max-width:700px;
案内エリアの最大横幅です。値を大きくすると案内エリアが横に広がります。

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

gap:12px;
「左から開く」と「右から開く」のボタン同士の間隔です。値を大きくするとボタン同士が離れます。

background:rgba(15,23,42,.45);
ドロワーメニュー表示時の背景色と透明度です。最後の.45を大きくすると背景が濃くなり、小さくすると薄くなります。

width:320px;
左右のドロワーメニューの横幅です。値を大きくするとドロワーが横に広がります。

max-width:85%;
ドロワーメニューの最大横幅です。画面幅に対してドロワーが占める割合を調整できます。

padding:32px 24px;
ドロワーメニューの内側余白です。32pxが上下、24pxが左右の余白です。

transform:translateX(calc(-100% - 40px));
左側のドロワーメニューを閉じた状態で画面左側へ移動する値です。ドロワー自身の横幅に加えて40px移動させています。

transform:translateX(calc(100% + 40px));
右側のドロワーメニューを閉じた状態で画面右側へ移動する値です。左側とは反対方向へ移動します。

transition:transform .3s ease;
左右のドロワーメニューがスライドする時間です。.3sを大きくするとゆっくり動き、小さくすると速く動きます。

gap:10px;
ドロワー内のメニューリンク同士の間隔です。値を大きくするとリンク同士が離れます。

padding:14px 16px;
各メニューリンクの内側余白です。14pxが上下、16pxが左右です。

margin-bottom:28px;
メニューリンク一覧と「閉じる」ボタンとの間隔です。値を大きくすると間隔が広がります。

レスポンシブ対応
通常時の左右のドロワーメニューはwidth:320px;max-width:85%;で表示します。画面幅640px以下ではwidth:100%max-width:90%へ変更し、画面幅に合わせて表示します。

画面幅640px以下では「左から開く」と「右から開く」の2つのボタンを縦並びに変更し、それぞれwidth:100%;で表示します。案内エリアはpadding:24px 18px;、ドロワーメニューもpadding:24px 18px;へ変更しています。


こちらもおすすめ


コメント