カテゴリー別に整理したドロワーメニューを作る方法
HTML・CSS・JavaScriptを使って、複数のメニュー項目をカテゴリー別に整理して表示するドロワーメニューを作る方法を紹介します。このサンプルでは、「メニューを開く」ボタンをクリックすると画面左側からドロワーメニューが表示され、「メインメニュー」「サポート」「アカウント」の3つのカテゴリーに分けてリンクを配置します。項目数が増えても、関連するリンクをまとめて表示できる構成です。
ドロワーメニュー内にリンクをそのまま縦並びで配置すると、項目数が多い場合に目的のリンクを探しにくくなることがあります。カテゴリーごとにタイトルとリンクをまとめることで、どの種類のメニューがどこにあるのかを確認しやすくできます。サイトのメインナビゲーション、サポート情報、ログインや設定などのアカウント関連メニューを1つのドロワーへまとめたい場合に利用できます。
HTMLではカテゴリー名、リンク名、リンク先を変更でき、CSSではドロワーの横幅、カテゴリーカードの背景色、余白、角丸、リンクのデザイン、半透明の背景などを調整できます。JavaScriptではis-activeクラスを付け外ししてドロワーメニューと背景を開閉します。「閉じる」ボタンだけでなく、ドロワー外側の背景をクリックして閉じることもできます。
免責事項 本コードの利用により発生した損害について、当サイトは一切の責任を負いません。
デモ
「メニューを開く」をクリックすると、3つのカテゴリーに分けたドロワーメニューが表示されます。背景または「閉じる」ボタンをクリックすると閉じます。
コードをコピーして使おう!
<!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="category-drawer-menu_wrap">
<!-- タイトル -->
<div class="category-drawer-menu_title">
カテゴリー別ドロワーメニュー
</div>
<!-- 説明文 -->
<p class="category-drawer-menu_text">
関連するリンクをカテゴリーごとに分けて表示します。
</p>
<!-- 開くボタン -->
<button class="category-drawer-menu_open" type="button">
メニューを開く
</button>
</div>
<!-- ドロワー表示中の背景 -->
<div class="category-drawer-menu_overlay"></div>
<!-- ドロワーメニュー -->
<aside class="category-drawer-menu_drawer">
<!-- ドロワー内タイトル -->
<div class="category-drawer-menu_heading">
メニュー
</div>
<!-- カテゴリー一覧 -->
<div class="category-drawer-menu_groups">
<!-- メインメニュー -->
<div class="category-drawer-menu_group">
<!-- カテゴリー名 -->
<div class="category-drawer-menu_group-title">
メインメニュー
</div>
<!-- カテゴリー内のリンク -->
<nav class="category-drawer-menu_nav">
<a class="category-drawer-menu_link" href="#">ホーム</a>
<a class="category-drawer-menu_link" href="#">サービス</a>
<a class="category-drawer-menu_link" href="#">お知らせ</a>
</nav>
</div>
<!-- サポート -->
<div class="category-drawer-menu_group">
<!-- カテゴリー名 -->
<div class="category-drawer-menu_group-title">
サポート
</div>
<!-- カテゴリー内のリンク -->
<nav class="category-drawer-menu_nav">
<a class="category-drawer-menu_link" href="#">よくある質問</a>
<a class="category-drawer-menu_link" href="#">お問い合わせ</a>
</nav>
</div>
<!-- アカウント -->
<div class="category-drawer-menu_group">
<!-- カテゴリー名 -->
<div class="category-drawer-menu_group-title">
アカウント
</div>
<!-- カテゴリー内のリンク -->
<nav class="category-drawer-menu_nav">
<a class="category-drawer-menu_link" href="#">ログイン</a>
<a class="category-drawer-menu_link" href="#">設定</a>
</nav>
</div>
</div>
<!-- 閉じるボタン -->
<button class="category-drawer-menu_close" type="button">
閉じる
</button>
</aside>
<!-- JavaScriptファイル -->
<script src="script.js"></script>
</body>
</html>
サンプル一式を取得する場合 HTML・CSSなどすべてのファイルが必要な場合は、「サンプル一式をダウンロード」をクリックしてください。
ファイル構成と設置方法
このサンプルはHTML・CSS・JavaScriptの3ファイルで構成されています。HTMLではドロワーメニュー内に「メインメニュー」「サポート」「アカウント」の3つのカテゴリーを作り、それぞれに関連するリンクを配置します。CSSではカテゴリーごとのカード表示やドロワーのスライド表示を設定し、JavaScriptではis-activeクラスを付け外しして開閉します。
sample/
├── index.html
├── style.css
└── script.js
各ファイルの役割
index.htmlはカテゴリー別ドロワーメニューの構造を作るファイルです。「メインメニュー」「サポート」「アカウント」の3つのカテゴリーと、それぞれに属するリンクを配置しています。カテゴリー名、リンク名、リンク先は用途に合わせて変更できます。
style.cssはドロワーメニューの配置とデザインを設定するファイルです。ドロワーの横幅、背景色、半透明の背景、カテゴリーごとのカード、区切り線、リンクの余白、角丸などを設定しています。閉じている状態ではドロワーを画面左側の外へ移動し、開くと画面内へスライドします。
script.jsはドロワーメニューを開閉するファイルです。「メニューを開く」をクリックするとドロワーと半透明の背景へis-activeクラスを追加します。「閉じる」ボタンまたはドロワー外側の背景をクリックするとクラスを削除します。
設置方法・使い方
sampleフォルダへindex.html、style.css、script.jsを配置します。3つのファイルを同じ階層へ保存したあと、sample/index.htmlをブラウザで開いてください。index.htmlからstyle.cssとscript.jsを読み込むため、追加のJavaScriptライブラリは必要ありません。
「メニューを開く」をクリックすると、画面左側からカテゴリー別に整理されたドロワーメニューが表示されます。ドロワー内には「メインメニュー」「サポート」「アカウント」の3カテゴリーが表示されます。「閉じる」ボタンまたは半透明の背景をクリックするとメニューを閉じます。
カスタマイズできる内容
index.htmlではカテゴリー名、カテゴリー数、各カテゴリー内のリンク名、リンク数、リンク先を変更できます。カテゴリーを追加する場合はcategory-drawer-menu_groupと同じ構造を追加してください。実際に使用する場合は、各href="#"を移動先のURLへ変更します。
style.cssではドロワーメニューの横幅、カテゴリー同士の間隔、カテゴリーカードの背景色、枠線、角丸、カテゴリー名の色、リンクの余白、半透明の背景の濃さ、スライド速度などを変更できます。
数値調整
style.css
max-width:700px;
案内エリアの最大横幅です。値を大きくすると横に広がります。
padding:32px;
案内エリアの内側余白です。値を大きくすると内容と外枠の間隔が広がります。
border-radius:18px;
案内エリアの角丸です。値を大きくすると丸みが強くなります。
width:340px;
ドロワーメニューの横幅です。値を大きくするとドロワーが横に広がります。
max-width:90%;
ドロワーメニューの最大横幅です。画面幅に対してドロワーが占める割合を調整できます。
padding:28px 24px;
ドロワーメニューの内側余白です。28pxが上下、24pxが左右です。
transform:translateX(calc(-100% - 40px));
閉じている状態でドロワーメニューを画面左側へ移動する値です。40px分追加で移動することで、閉じた状態の影や一部が画面左端へ残りにくくなります。
transition:transform .3s ease;
ドロワーがスライドする時間です。.3sを大きくするとゆっくり動き、小さくすると速く動きます。
background:rgba(15,23,42,.45);
ドロワー表示中の半透明背景です。最後の.45を大きくすると濃くなり、小さくすると薄くなります。
gap:16px;
カテゴリー同士の間隔です。値を大きくするとカテゴリーカード同士が離れます。
padding:16px;
各カテゴリーカードの内側余白です。値を大きくするとカテゴリー内の余白が広がります。
border-radius:12px;
カテゴリーカードの角丸です。値を大きくすると丸みが強くなります。
border-bottom:2px solid #2563eb;
カテゴリー名の下に表示する区切り線です。2pxを変更すると線の太さを調整できます。
gap:6px;
同じカテゴリー内にあるリンク同士の間隔です。値を大きくするとリンク同士の間隔が広がります。
padding:10px 12px;
各リンクの内側余白です。10pxが上下、12pxが左右です。
margin-top:24px;
カテゴリー一覧と「閉じる」ボタンの間隔です。値を大きくすると間隔が広がります。
レスポンシブ対応
通常時のドロワーメニューはwidth:340pxとmax-width:90%で表示します。画面幅640px以下ではwidth:100%とmax-width:100%へ変更し、画面幅いっぱいのドロワーメニューとして表示します。
画面幅640px以下では案内エリアをpadding:24px 18px;、ドロワーメニューをpadding:24px 18px;へ変更しています。これにより、スマートフォンでもカテゴリーとリンクを確認しやすい構成になります。
コメント