固定フッターメニューからドロップダウンメニューを表示する方法
画面下部に固定したフッターメニューから、追加のドロップダウンメニューを表示するサンプルです。「メニュー」または「通知」をクリックすると、それぞれのボタンの上側へ専用のメニューが表示されます。
JavaScriptでクリックしたボタンを判定し、対応するメニューへクラスを追加して表示を切り替えます。別のボタンをクリックすると現在開いているメニューを閉じて、新しく選択したメニューだけを表示します。同じボタンをもう一度クリックするとメニューを閉じることもできます。
スマートフォン向けの固定ナビゲーションに追加メニューを組み込みたい場合や、会員サイト・ECサイト・管理画面などで限られたフッター領域から複数のリンクを表示したい場合に利用できます。メニュー名やリンク先、SVGアイコン、表示項目、色、サイズ、余白などはHTMLとCSSから変更できます。
免責事項 本コードの利用により発生した損害について、当サイトは一切の責任を負いません。
デモ
コードをコピーして使おう!
<!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>
<!-- ページ上部 -->
<header class="footer-menu-dropdown_header">
<!-- ページタイトル -->
<div class="footer-menu-dropdown_title">固定フッターメニュー</div>
<!-- 操作方法の説明 -->
<p class="footer-menu-dropdown_description">
「メニュー」と「通知」をクリックすると、それぞれのボタンからメニューが表示されます。
</p>
</header>
<!-- メインコンテンツ -->
<main class="footer-menu-dropdown_main">
<!-- メニューについての説明 -->
<div class="footer-menu-dropdown_card">
<div class="footer-menu-dropdown_heading">メニューをクリック</div>
<p>固定フッターの「メニュー」をクリックすると、カテゴリ一覧などのリンクを表示します。</p>
</div>
<!-- 通知についての説明 -->
<div class="footer-menu-dropdown_card">
<div class="footer-menu-dropdown_heading">通知をクリック</div>
<p>「通知」をクリックすると、通知用のリンクへ表示内容が切り替わります。</p>
</div>
<!-- ページを長くするための確認用コンテンツ -->
<div class="footer-menu-dropdown_card">
<div class="footer-menu-dropdown_heading">固定表示</div>
<p>ページをスクロールしてもフッターメニューは画面下部に固定されます。</p>
</div>
</main>
<!-- 画面下部へ固定するフッターメニュー -->
<nav class="footer-menu-dropdown_nav">
<!-- ホーム -->
<a href="#" class="footer-menu-dropdown_item">
<!-- ホームアイコン -->
<svg viewBox="0 0 24 24" fill="none">
<path d="M3 10L12 3L21 10M6 10V20H18V10" stroke="currentColor" stroke-width="2" stroke-linecap="round"></path>
</svg>
<span>ホーム</span>
</a>
<!-- 検索 -->
<a href="#" class="footer-menu-dropdown_item">
<!-- 検索アイコン -->
<svg viewBox="0 0 24 24" fill="none">
<circle cx="11" cy="11" r="6" stroke="currentColor" stroke-width="2"></circle>
<path d="M16 16L21 21" stroke="currentColor" stroke-width="2" stroke-linecap="round"></path>
</svg>
<span>検索</span>
</a>
<!-- ドロップダウンメニューを持つメニューボタン -->
<button type="button" class="footer-menu-dropdown_button">
<!-- メニューボタンから表示するドロップダウンメニュー -->
<div class="footer-menu-dropdown_menu">
<a href="#">カテゴリ一覧</a>
<a href="#">人気記事</a>
<a href="#">新着記事</a>
</div>
<!-- メニューアイコン -->
<svg viewBox="0 0 24 24" fill="none">
<path d="M5 7H19M5 12H19M5 17H19" stroke="currentColor" stroke-width="2" stroke-linecap="round"></path>
</svg>
<span>メニュー</span>
</button>
<!-- ドロップダウンメニューを持つ通知ボタン -->
<button type="button" class="footer-menu-dropdown_button">
<!-- 通知ボタンから表示するドロップダウンメニュー -->
<div class="footer-menu-dropdown_menu">
<a href="#">未読通知</a>
<a href="#">すべて表示</a>
<a href="#">通知設定</a>
</div>
<!-- 通知アイコン -->
<svg viewBox="0 0 24 24" fill="none">
<path d="M7 17H17L16 15V10C16 7.8 14.2 6 12 6C9.8 6 8 7.8 8 10V15L7 17Z" stroke="currentColor" stroke-width="2"></path>
<path d="M10.5 19C10.8 19.6 11.3 20 12 20C12.7 20 13.2 19.6 13.5 19" stroke="currentColor" stroke-width="2" stroke-linecap="round"></path>
</svg>
<span>通知</span>
</button>
<!-- マイページ -->
<a href="#" class="footer-menu-dropdown_item">
<!-- ユーザーアイコン -->
<svg viewBox="0 0 24 24" fill="none">
<circle cx="12" cy="8" r="3" stroke="currentColor" stroke-width="2"></circle>
<path d="M6 20C6 16.7 8.7 14 12 14C15.3 14 18 16.7 18 20" stroke="currentColor" stroke-width="2"></path>
</svg>
<span>マイページ</span>
</a>
</nav>
<!-- ドロップダウンメニューの開閉処理を読み込む -->
<script src="script.js"></script>
</body>
</html>
サンプル一式を取得する場合 HTML・CSSなどすべてのファイルが必要な場合は、「サンプル一式をダウンロード」をクリックしてください。
Q ダウンロードしたけど、これをネット上で動かすにはどうするの?
Googleアカウントがあれば、InfinityFreeで無料サーバーを作成して、ダウンロードしたサンプルをネット上で動かせます。
InfinityFreeを初めて利用する場合は①から、すでにサーバーを作成している場合は②へ進んでください。
ファイル構成と設置方法
このサンプルはHTML・CSS・JavaScriptの3ファイルで構成されています。HTMLでは画面下部に固定するフッターメニューと、「メニュー」「通知」から表示するドロップダウンメニューを作成します。CSSでは固定フッターの配置やメニューのデザイン、表示・非表示のアニメーションを設定し、JavaScriptでクリックしたボタンに対応するメニューを開閉します。
sample/
├── index.html
├── style.css
└── script.js
各ファイルの役割
index.htmlは固定フッターメニュー全体を構成するファイルです。「ホーム」「検索」「メニュー」「通知」「マイページ」の5項目と、「メニュー」「通知」をクリックしたときに表示するリンクを記述しています。メニュー名、SVGアイコン、ドロップダウンメニュー内の表示内容、リンク先を変更できます。
style.cssは固定フッターメニューとドロップダウンメニューのデザインを設定するファイルです。フッターの高さ、文字サイズ、アイコンサイズ、色、ドロップダウンメニューの横幅、余白、角丸、影、表示位置、開閉時のアニメーションなどを変更できます。
script.jsはドロップダウンメニューの開閉を制御するファイルです。「メニュー」または「通知」をクリックすると、クリックしたボタン内のメニューへis-openクラスを追加して表示します。開いているボタンにはis-activeクラスを追加し、別のボタンをクリックした場合は現在のメニューを閉じてから選択したメニューを表示します。同じボタンをもう一度クリックするとメニューを閉じます。
設置方法・使い方
sampleフォルダへindex.html、style.css、script.jsを同じ階層で配置します。index.htmlからstyle.cssとscript.jsを読み込む構成になっているため、3つのファイルを配置したあと、sample/index.htmlをブラウザで開いてください。画面下部の「メニュー」または「通知」をクリックすると、それぞれのボタンに設定したドロップダウンメニューが表示されます。
実際のWebサイトで使用する場合は、index.html内のhref="#"を移動先のURLへ変更してください。「カテゴリ一覧」「人気記事」「新着記事」「未読通知」などの表示内容も、用途に合わせて変更できます。
カスタマイズできる内容
index.htmlでは固定フッターメニューの項目名、リンク先、SVGアイコン、ドロップダウンメニュー内のリンク名やリンク先を変更できます。「メニュー」と「通知」にはそれぞれ異なる内容を設定できるため、用途に合わせて表示するリンクを変更できます。
style.cssでは固定フッターメニューの高さ、文字色、文字サイズ、アイコンサイズ、ドロップダウンメニューの横幅、背景色、枠線、角丸、影、表示位置、リンク間隔、開閉アニメーションの速度などを変更できます。
数値調整
style.css
padding-bottom:76px;
固定フッターメニューとページ内容が重ならないように確保する下側の余白です。固定フッターメニューの高さを変更する場合は、この値も合わせて調整します。
padding:20px;
ページ上部の内側余白です。値を大きくするとタイトル周辺の余白が広がり、小さくすると狭くなります。
font-size:28px;
ページタイトルの文字サイズです。値を大きくするとタイトルが大きくなり、小さくするとコンパクトになります。
margin:8px 0 0;
タイトルと説明文の間隔です。8pxを大きくすると間隔が広がり、小さくすると近くなります。
font-size:13px;
ページ上部に表示する説明文の文字サイズです。値を大きくすると文字が大きくなります。
min-height:900px;
メインコンテンツの最低高さです。値を大きくするとページの縦方向の表示領域が長くなり、小さくすると短くなります。
padding:28px 24px 100px;
メインコンテンツの内側余白です。上28px・左右24px・下100pxを設定しています。各値を変更すると内容と画面端との間隔が変わります。
margin:0 0 28px;
各説明ブロックの下側の間隔です。28pxを大きくするとブロック同士の間隔が広がり、小さくすると狭くなります。
font-size:20px;
説明ブロックの見出し文字サイズです。値を大きくすると文字が大きくなります。
font-size:14px;
説明ブロック本文の文字サイズです。値を大きくすると本文が大きくなります。
height:76px;
固定フッターメニューの高さです。値を大きくするとフッターが高くなり、小さくすると低くなります。変更する場合はbodyのpadding-bottom:76px;も合わせて調整します。
gap:6px;
固定フッターメニュー内のアイコンと文字の間隔です。値を大きくすると間隔が広がり、小さくすると近くなります。
font-size:12px;
固定フッターメニューの文字サイズです。値を大きくするとメニュー名が大きくなります。
width:24px;・height:24px;
固定フッターメニューで使用するSVGアイコンの大きさです。値を大きくするとアイコンが大きくなり、小さくすると小さくなります。
bottom:66px;
ドロップダウンメニューの表示位置です。値を大きくするとメニューが上へ移動し、小さくすると固定フッターへ近づきます。
width:170px;
ドロップダウンメニューの横幅です。値を大きくすると横に広がり、小さくするとコンパクトになります。
padding:10px;
ドロップダウンメニュー全体の内側余白です。値を大きくするとリンクと外枠の間隔が広がります。
border-radius:14px;
ドロップダウンメニュー全体の角丸です。値を大きくすると丸みが強くなり、0にすると四角になります。
box-shadow:0 10px 24px rgba(0,0,0,.15);
ドロップダウンメニューの影です。10pxは縦方向の位置、24pxはぼかしの大きさです。値を変更すると影の位置や広がりを調整できます。
translateY(10px)
閉じている状態のドロップダウンメニューを10px下へずらす設定です。表示時はtranslateY(0)へ移動します。値を大きくすると開閉時の移動距離が大きくなります。
.25s
ドロップダウンメニューが表示・非表示へ切り替わるアニメーション時間です。値を大きくするとゆっくり、小さくすると速く切り替わります。
padding:10px 12px;
ドロップダウンメニュー内の各リンクの内側余白です。上下10px・左右12pxを設定しています。値を大きくするとリンクのクリック領域も広がります。
border-radius:8px;
ドロップダウンメニュー内の各リンクの角丸です。値を大きくすると丸みが強くなります。
margin-top:4px;
ドロップダウンメニュー内のリンク同士の間隔です。値を大きくするとリンク同士の間隔が広がります。
レスポンシブ対応
このサンプルはレスポンシブ対応です。style.cssのwidth:100%によって固定フッターメニューを画面幅いっぱいに表示し、画面幅640px以下では固定フッターの高さを68px、メニュー名を11px、SVGアイコンを22pxへ変更します。ドロップダウンメニューもbottom:58px、width:150pxへ調整するため、スマートフォン・タブレット・PCの画面幅に合わせて利用できます。
コメント