画面上から開く横並びドロワーメニューの作り方【HTML/CSS/JavaScript・サンプルコード付き】

ドロワーメニュー

画面上から開く横並びドロワーメニューの作り方

画面上から開く横並びドロワーメニューの作り方を紹介します。このサンプルでは、「メニューを開く」をクリックすると画面上に隠れていたドロワーメニューが下方向へ移動して表示され、ホーム、サービス、お問い合わせの3つのメニュー項目が横一列に並びます。「閉じる」をクリックすると、ドロワーメニューが画面上へ戻って非表示になります。

HTMLでドロワーメニューと半透明背景を配置し、CSSのtransform:translateY()を使って画面上に隠れた状態と表示された状態を切り替えます。メニュー部分にはFlexboxを使用し、3つのリンクを横並びに配置します。JavaScriptではis-activeクラスを追加・削除してドロワーメニューと半透明背景を同時に表示・非表示にします。背景部分をクリックしても閉じないため、メニューの開閉は「メニューを開く」と「閉じる」の2つのボタンから操作できます。

画面上から表示する横並びドロワーメニューは、サービスサイトやECサイト、会員サイトなど、ページ上部へナビゲーションをまとめて表示したい場合に利用できます。HTMLではメニュー名やリンク先を変更でき、CSSでは横幅、余白、背景色、角丸、メニュー間の間隔、開閉速度などを調整できます。また、画面幅640px以下ではメニュー項目を縦並びへ切り替えるため、スマートフォン・タブレット・PCでも利用しやすい構成です。

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

デモ

横並びドロワーメニュー

メニューを開くと、画面上から横並びのメニューが表示されます。

「メニューを開く」をクリックすると、ホーム、サービス、お問い合わせのメニューが横並びになったドロワーメニューが画面上から表示されます。「閉じる」をクリックすると画面上へ戻って非表示になります。画面幅640px以下ではメニューが縦並びに切り替わります。

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

<!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="top-horizontal-drawer-menu_wrap">

    <!-- タイトル -->
    <div class="top-horizontal-drawer-menu_title">
      横並びドロワーメニュー
    </div>

    <!-- 説明文 -->
    <p class="top-horizontal-drawer-menu_text">
      メニューを開くと、画面上から横並びのメニューが表示されます。
    </p>

    <!-- メニューを開くボタン -->
    <button class="top-horizontal-drawer-menu_open" type="button">
      メニューを開く
    </button>

  </div>

  <!-- メニュー表示中の半透明背景 -->
  <div class="top-horizontal-drawer-menu_overlay"></div>

  <!-- 画面上から表示するドロワーメニュー -->
  <div class="top-horizontal-drawer-menu_drawer">

    <!-- ドロワーメニューの内容 -->
    <div class="top-horizontal-drawer-menu_inner">

      <!-- メニュータイトル -->
      <div class="top-horizontal-drawer-menu_heading">
        メニュー
      </div>

      <!-- 横並びメニュー -->
      <nav class="top-horizontal-drawer-menu_nav" aria-label="メインメニュー">

        <!-- ホーム -->
        <a class="top-horizontal-drawer-menu_link" href="#">
          ホーム
        </a>

        <!-- サービス -->
        <a class="top-horizontal-drawer-menu_link" href="#">
          サービス
        </a>

        <!-- お問い合わせ -->
        <a class="top-horizontal-drawer-menu_link" href="#">
          お問い合わせ
        </a>

      </nav>

      <!-- メニューを閉じるボタン -->
      <button class="top-horizontal-drawer-menu_close" type="button">
        閉じる
      </button>

    </div>

  </div>

  <!-- 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はドロワーメニュー全体を構成するファイルです。「メニューを開く」ボタン、ホーム・サービス・お問い合わせの3つのリンク、半透明背景、「閉じる」ボタンを配置しています。メニュー名やリンク先を変更する場合は、このファイルを編集します。

style.cssはドロワーメニューの表示位置や横並びレイアウト、背景色、余白、角丸、影、開閉アニメーションなどを設定するファイルです。通常時はtransform:translateY(calc(-100% - 40px));でドロワーメニューを画面上へ隠し、is-activeクラスが付くとtranslateY(0)へ切り替えて画面内へ表示します。

script.jsはドロワーメニューの開閉を制御するファイルです。「メニューを開く」をクリックするとドロワーメニューと半透明背景へis-activeクラスを追加し、「閉じる」をクリックするとクラスを削除します。半透明背景にはクリック処理を設定していないため、背景をクリックしてもドロワーメニューは閉じません。

設置方法・使い方
sampleフォルダへindex.html、style.css、script.jsを配置します。3つのファイルを同じ階層へ保存したあと、sample/index.htmlをブラウザで開いてください。index.htmlからstyle.cssとscript.jsを読み込む構成になっているため、追加のライブラリや外部サービスは必要ありません。

ページに表示された「メニューを開く」をクリックすると、ドロワーメニューが画面上から表示されます。PCなど画面幅640pxより広い環境では、ホーム・サービス・お問い合わせが横一列に並びます。「閉じる」をクリックするとドロワーメニューが画面上へ戻り、半透明背景も非表示になります。

カスタマイズできる内容
index.htmlでは「横並びドロワーメニュー」のタイトル、説明文、ホーム・サービス・お問い合わせのメニュー名、それぞれのリンク先を変更できます。メニュー項目を変更する場合は、top-horizontal-drawer-menu_linkを付けたa要素を編集します。

style.cssでは表示エリアやドロワーメニューの横幅、余白、背景色、角丸、文字サイズ、リンク同士の間隔、影、開閉速度などを変更できます。横並び部分にはdisplay:flex;を使用し、それぞれのリンクへflex:1;を指定して同じ横幅になるようにしています。

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

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

padding:32px;
サンプル表示エリアの内側余白です。値を大きくすると内容と枠線の間隔が広がります。

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

font-size:22px;
サンプル表示エリアのタイトルの文字サイズです。値を大きくすると文字が大きくなります。

padding:12px 26px;
「メニューを開く」ボタンの内側余白です。上下の12pxを大きくすると高さが増え、左右の26pxを大きくすると横幅が広がります。

background:rgba(15,23,42,.35);
メニュー表示中の半透明背景です。0.35を大きくすると背景が濃くなり、小さくすると薄くなります。

max-height:85vh;
ドロワーメニューの最大高さです。値を大きくすると画面内で使用できる高さが増え、小さくすると低くなります。

padding:32px 24px;
ドロワーメニューの内側余白です。上下の32pxと左右の24pxを変更すると、メニュー内容と画面端との間隔を調整できます。

transform:translateY(calc(-100% - 40px));
閉じているドロワーメニューを画面上へ移動する値です。40pxを大きくすると、通常時の位置がさらに上へ移動します。

transition:transform .3s ease;
ドロワーメニューが開閉するときの時間です。0.3秒で変化し、値を大きくするとゆっくり、小さくすると速くなります。

box-shadow:0 12px 30px rgba(15,23,42,.18);
表示中のドロワーメニューに付ける影です。12pxを変更すると影の上下位置が変わり、30pxを変更するとぼかしの広がりが変わります。

margin:0 0 28px;
メニュータイトルの下側余白です。28pxを大きくすると横並びメニューとの間隔が広がります。

gap:10px;
横並びになったメニュー項目同士の間隔です。値を大きくするとリンク同士の間隔が広がり、小さくすると狭くなります。

padding:14px 16px;
各メニューリンクの内側余白です。上下の14pxを大きくするとリンクが高くなり、左右の16pxを大きくすると文字と端の間隔が広がります。

border-radius:8px;
メニューリンクと開閉ボタンの角丸に使用している値です。値を大きくすると丸みが強くなり、0にすると四角になります。

padding:12px;
「閉じる」ボタンの内側余白です。値を大きくするとボタンが高くなり、小さくすると低くなります。

レスポンシブ対応
このサンプルはレスポンシブ対応です。style.cssではサンプル表示エリアとドロワーメニュー内部にwidth:100%max-width:700pxを使用し、画面幅に合わせて横幅が縮小されるようにしています。画面幅640px以下では、サンプル表示エリアをpadding:24px 18px;、ドロワーメニューをpadding:24px 18px;へ変更して左右の余白を抑えます。さらにflex-direction:column;へ切り替えることで、PCでは横並びのメニューをスマートフォンでは縦並びで表示します。スマートフォン・タブレット・PCで利用できる構成です。

こちらもおすすめ


コメント