複数カテゴリーを横並びに表示するドロップダウンメニューを作る方法
複数カテゴリーを横並びに表示するドロップダウンメニューを作る方法を紹介します。このサンプルでは、「サービス一覧」ボタンをクリックすると横幅の広いメニューパネルが開き、「Web制作」「システム開発」「デザイン」「サポート」の4カテゴリーを横並びに表示します。それぞれのカテゴリーには複数のリンクを配置できるため、多くのページをカテゴリーごとに整理して案内できます。
コーポレートサイトのサービス一覧、制作会社の事業紹介、会員サイトの機能一覧、ECサイトの商品カテゴリーなど、関連するリンクを複数のグループへ分けて表示したい場面に利用できます。通常時はカテゴリー一覧を非表示にしておき、必要なときだけボタンから開けるため、多数のリンクを常に画面へ表示する必要がありません。各カテゴリーには見出しとリンクを配置しているので、利用者が目的の項目を探しやすい構成です。
HTMLではカテゴリー名、リンク名、リンク先を変更でき、CSSでは全体の横幅、余白、ボタンのデザイン、パネルの表示位置、カテゴリー間の間隔、列数、角丸、影などを調整できます。JavaScriptではボタンをクリックしたときにis-activeクラスを切り替えてパネルを開閉します。4カテゴリーを横並びにまとめて表示したい場合や、多数のリンクを整理したドロップダウンメニューを作りたい場合に利用できるサンプルです。
免責事項 本コードの利用により発生した損害について、当サイトは一切の責任を負いません。
デモ
「サービス一覧」をクリックすると、4つのカテゴリーを横並びにしたドロップダウンメニューが表示されます。もう一度クリックすると閉じます。
コードをコピーして使おう!
<!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="large-dropdown-menu_wrap">
<!-- タイトル -->
<div class="large-dropdown-menu_title">
複数カテゴリーを横並びに表示するドロップダウンメニュー
</div>
<!-- 説明文 -->
<p class="large-dropdown-menu_text">
ボタンをクリックすると、複数のカテゴリーを横並びで一覧表示できます。
</p>
<!-- 開閉ボタンとメニューパネルをまとめるエリア -->
<div class="large-dropdown-menu_nav">
<!-- 開閉ボタン -->
<button
class="large-dropdown-menu_button"
id="large-dropdown-menu-button"
type="button">
サービス一覧
</button>
<!-- ドロップダウンメニューパネル -->
<div
class="large-dropdown-menu_panel"
id="large-dropdown-menu-panel">
<!-- カテゴリーを横並びにするグリッド -->
<div class="large-dropdown-menu_grid">
<!-- Web制作カテゴリー -->
<div class="large-dropdown-menu_column">
<h3>Web制作</h3>
<a href="#">ホームページ制作</a>
<a href="#">LP制作</a>
<a href="#">ECサイト制作</a>
<a href="#">WordPress制作</a>
</div>
<!-- システム開発カテゴリー -->
<div class="large-dropdown-menu_column">
<h3>システム開発</h3>
<a href="#">業務システム</a>
<a href="#">予約システム</a>
<a href="#">会員サイト</a>
<a href="#">API開発</a>
</div>
<!-- デザインカテゴリー -->
<div class="large-dropdown-menu_column">
<h3>デザイン</h3>
<a href="#">ロゴ制作</a>
<a href="#">バナー制作</a>
<a href="#">UIデザイン</a>
<a href="#">印刷物制作</a>
</div>
<!-- サポートカテゴリー -->
<div class="large-dropdown-menu_column">
<h3>サポート</h3>
<a href="#">保守管理</a>
<a href="#">SEO対策</a>
<a href="#">運用相談</a>
<a href="#">お問い合わせ</a>
</div>
</div>
</div>
</div>
</div>
<!-- JavaScriptファイル -->
<script src="script.js"></script>
</body>
</html>
サンプル一式を取得する場合 HTML・CSSなどすべてのファイルが必要な場合は、「サンプル一式をダウンロード」をクリックしてください。
Q ダウンロードしたけど、これをネット上で動かすにはどうするの?
Googleアカウントがあれば、InfinityFreeで無料サーバーを作成して、ダウンロードしたサンプルをネット上で動かせます。
InfinityFreeを初めて利用する場合は①から、すでにサーバーを作成している場合は②へ進んでください。
ファイル構成と設置方法
このサンプルはHTML・CSS・JavaScriptの3ファイルで構成されています。HTMLでは「サービス一覧」の開閉ボタンと、「Web制作」「システム開発」「デザイン」「サポート」の4カテゴリーを作成します。CSSでは4カテゴリーをGrid Layoutで横並びにし、JavaScriptではボタンをクリックしたときにis-activeクラスを切り替えてメニューパネルを開閉します。外部ライブラリは使用せず、HTML・CSS・バニラJavaScriptだけで動作します。
sample/
├── index.html
├── style.css
└── script.js
各ファイルの役割
index.htmlはドロップダウンメニュー全体を構成するファイルです。「サービス一覧」の開閉ボタン、4つのカテゴリー見出し、それぞれのカテゴリーに属するリンクを配置しています。カテゴリー名、リンク名、リンク先はこのファイルから変更できます。
style.cssはドロップダウンメニューのデザインとカテゴリーの配置を設定するファイルです。メニューパネルを開閉ボタンの下へ配置し、grid-template-columns:repeat(4,1fr);によって4カテゴリーを同じ横幅で横並びにしています。また、画面幅700px以下では2列、480px以下では1列へ変更します。
script.jsはメニューパネルの開閉を制御するファイルです。開閉ボタンをクリックするたびにlarge-dropdown-menu_panelへis-activeクラスを付け外しし、CSSのdisplay:noneとdisplay:blockを切り替えます。
設置方法・使い方
sampleフォルダへindex.html、style.css、script.jsを配置します。3つのファイルを同じ階層へ保存したあと、sample/index.htmlをブラウザで開いてください。index.htmlからstyle.cssとscript.jsを読み込む構成になっているため、外部ライブラリを追加する必要はありません。
「サービス一覧」ボタンをクリックすると、ボタンの下にドロップダウンメニューが表示されます。PCなど横幅の広い画面では「Web制作」「システム開発」「デザイン」「サポート」の4カテゴリーが横並びになります。もう一度「サービス一覧」をクリックするとメニューパネルが閉じます。実際に使用する場合は、index.htmlの各href="#"を移動先のURLへ変更してください。
カスタマイズできる内容
index.htmlではタイトル、説明文、開閉ボタンの文字、カテゴリー名、各カテゴリー内のリンク名、リンク先を変更できます。カテゴリーを変更する場合はlarge-dropdown-menu_column単位で編集し、その中へカテゴリー見出しと必要なリンクを配置します。
style.cssでは全体の横幅や余白、ボタンの背景色、文字サイズ、角丸、メニューパネルの表示位置、背景色、影、カテゴリーの列数、カテゴリー同士の間隔などを変更できます。横並びのカテゴリー数はgrid-template-columnsから調整できます。
数値調整
style.css
padding:40px 20px;
ページ全体の余白です。40pxが上下、20pxが左右の余白です。値を大きくすると画面端との間隔が広がります。
max-width:900px;
ドロップダウンメニュー全体の最大横幅です。値を大きくすると4カテゴリーを表示する領域が横に広がり、小さくするとコンパクトになります。
margin:40px auto;
全体の上下余白です。40pxを大きくすると上下の間隔が広がります。autoによって左右中央へ配置しています。
padding:32px;
全体の内側余白です。値を大きくすると内容と外枠の間隔が広がります。
border-radius:18px;
全体の角丸です。値を大きくすると丸みが強くなり、0にすると四角になります。
font-size:22px;
タイトルの文字サイズです。値を大きくするとタイトルが大きくなります。
margin:0 0 24px;
説明文の下側余白です。24pxを大きくすると開閉ボタンとの間隔が広がります。
padding:14px 30px;
「サービス一覧」ボタンの内側余白です。14pxが上下、30pxが左右の余白です。値を大きくするとボタンが大きくなります。
border-radius:12px;
開閉ボタンの角丸です。値を大きくすると丸みが強くなります。
font-size:15px;
開閉ボタンの文字サイズです。値を大きくすると文字が大きくなります。
top:60px;
メニューパネルの表示位置です。値を大きくするとパネルが下へ移動し、小さくすると開閉ボタンへ近づきます。
padding:28px;
メニューパネルの内側余白です。値を大きくするとカテゴリーとパネル外枠の間隔が広がります。
border-radius:16px;
メニューパネルの角丸です。値を大きくすると丸みが強くなります。
box-shadow:0 18px 40px ...
メニューパネルの影です。18pxは下方向の位置、40pxはぼかしの大きさです。値を変更すると影の位置や広がりを調整できます。
grid-template-columns:repeat(4,1fr);
PC表示時のカテゴリー列数です。4つのカテゴリーを同じ横幅で横並びにします。列数を変更する場合は4の値を変更します。
gap:24px;
カテゴリー同士の間隔です。値を大きくすると横並びのカテゴリー間隔が広がり、小さくすると狭くなります。
margin:0 0 12px;
カテゴリー見出しの下側余白です。12pxを大きくするとリンクとの間隔が広がります。
padding-bottom:8px;
カテゴリー見出しの文字と下線の間隔です。値を大きくすると間隔が広がります。
border-bottom:2px solid #2563eb;
カテゴリー見出し下部の線です。2pxを大きくすると線が太くなります。
font-size:16px;
カテゴリー見出しの文字サイズです。値を大きくすると見出しが大きくなります。
padding:8px 0;
各リンクの上下余白です。8pxを大きくするとリンク同士の間隔が広がります。
レスポンシブ対応
このサンプルはレスポンシブ対応です。style.cssでは全体にwidth:100%とmax-width:900pxを設定し、画面幅に合わせて全体が縮小するようにしています。通常はgrid-template-columns:repeat(4,1fr);で4カテゴリーを横並びに表示します。
画面幅700px以下ではgrid-template-columns:repeat(2,1fr);へ変更し、カテゴリーを2列で表示します。さらに画面幅480px以下ではgrid-template-columns:1fr;へ変更して1列表示にし、全体の内側余白もpadding:24px 18px;へ縮小します。これによりスマートフォン・タブレット・PCの画面幅に合わせてカテゴリーの並び方が切り替わります。
コメント