画面上から開く横並びドロワーメニューの作り方
画面上から開く横並びドロワーメニューの作り方を紹介します。このサンプルでは、「メニューを開く」をクリックすると画面上に隠れていたドロワーメニューが下方向へ移動して表示され、ホーム、サービス、お問い合わせの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で利用できる構成です。
コメント