2列表示の固定フッターメニューを作る方法
2列表示の固定フッターメニューをHTMLとCSSだけで作る方法を紹介します。このサンプルでは、ホーム・検索・お気に入り・通知・マイページ・メニュー・ランキング・履歴の8項目を、画面下部の固定フッターメニューへ上下2段で表示します。1段だけでは項目数が多くなりやすい場合でも、2段に分けることで複数のメニューをまとめて配置できます。
レイアウトにはCSS Gridを使用し、4列×2段の構成で8個のメニューを均等に配置します。各項目にはSVGアイコンとメニュー名を縦方向に並べ、ページをスクロールしてもフッターメニューは画面下部に固定されたまま表示されます。会員サイトのマイページ、ECサイトの主要機能、管理画面など、画面下部から複数のページへ移動できるナビゲーションを設置したい場合に利用できます。
JavaScriptや外部ライブラリを使用しないため、HTMLとCSSだけで導入できます。HTMLではメニュー名・リンク先・SVGアイコンを変更でき、CSSでは列数、メニューの高さ、文字サイズ、アイコンサイズ、色などを調整できます。画面幅に合わせて表示できるため、スマートフォン・タブレット・PCで利用できる固定フッターメニューのサンプルとして活用できます。
免責事項 本コードの利用により発生した損害について、当サイトは一切の責任を負いません。
デモ
コードをコピーして使おう!
<!DOCTYPE html>
<html lang="ja">
<head>
<!-- 文字コード -->
<meta charset="UTF-8">
<!-- スマートフォン対応 -->
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- ページタイトル -->
<title>2列表示の固定フッターメニュー</title>
<!-- CSSファイル -->
<link rel="stylesheet" href="style.css">
</head>
<body>
<!-- ページ上部 -->
<header class="footer-menu-two-row_header">
<!-- タイトル -->
<div class="footer-menu-two-row_title">
2列フッターメニュー
</div>
<!-- 説明文 -->
<p class="footer-menu-two-row_description">
メニューを上下2段に分けて表示できます。
</p>
</header>
<!-- ページコンテンツ -->
<main class="footer-menu-two-row_main">
<!-- コンテンツ1 -->
<div class="footer-menu-two-row_card">
<div class="footer-menu-two-row_heading">
多くの機能を表示
</div>
<p>
1段では収まらないメニューも、上下2段にすることで一覧表示できます。
</p>
</div>
<!-- コンテンツ2 -->
<div class="footer-menu-two-row_card">
<div class="footer-menu-two-row_heading">
HTML・CSSだけで実装
</div>
<p>
CSS Gridを利用して4列×2段のレイアウトを作成しています。
</p>
</div>
<!-- コンテンツ3 -->
<div class="footer-menu-two-row_card">
<div class="footer-menu-two-row_heading">
8個のメニューを配置
</div>
<p>
ホームや検索など、8個のメニューを画面下部へまとめて表示できます。
</p>
</div>
</main>
<!-- 2段表示の固定フッターメニュー -->
<nav class="footer-menu-two-row_nav" aria-label="固定フッターメニュー">
<!-- ホーム -->
<a href="#" class="footer-menu-two-row_item">
<svg viewBox="0 0 24 24" fill="none" aria-hidden="true">
<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-two-row_item">
<svg viewBox="0 0 24 24" fill="none" aria-hidden="true">
<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>
<!-- お気に入り -->
<a href="#" class="footer-menu-two-row_item">
<svg viewBox="0 0 24 24" fill="none" aria-hidden="true">
<path d="M12 20L5 13C3.5 11.5 3.5 9 5 7.5C6.5 6 9 6 10.5 7.5L12 9L13.5 7.5C15 6 17.5 6 19 7.5C20.5 9 20.5 11.5 19 13L12 20Z" stroke="currentColor" stroke-width="2"></path>
</svg>
<span>お気に入り</span>
</a>
<!-- 通知 -->
<a href="#" class="footer-menu-two-row_item">
<svg viewBox="0 0 24 24" fill="none" aria-hidden="true">
<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>
</svg>
<span>通知</span>
</a>
<!-- マイページ -->
<a href="#" class="footer-menu-two-row_item">
<svg viewBox="0 0 24 24" fill="none" aria-hidden="true">
<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>
<!-- メニュー -->
<a href="#" class="footer-menu-two-row_item">
<svg viewBox="0 0 24 24" fill="none" aria-hidden="true">
<path d="M5 7H19M5 12H19M5 17H19" stroke="currentColor" stroke-width="2" stroke-linecap="round"></path>
</svg>
<span>メニュー</span>
</a>
<!-- ランキング -->
<a href="#" class="footer-menu-two-row_item">
<svg viewBox="0 0 24 24" fill="none" aria-hidden="true">
<path d="M12 3L15 9L22 10L17 15L18 22L12 18L6 22L7 15L2 10L9 9L12 3Z" stroke="currentColor" stroke-width="2"></path>
</svg>
<span>ランキング</span>
</a>
<!-- 履歴 -->
<a href="#" class="footer-menu-two-row_item">
<svg viewBox="0 0 24 24" fill="none" aria-hidden="true">
<path d="M12 7V12L15 15" stroke="currentColor" stroke-width="2"></path>
<circle cx="12" cy="12" r="9" stroke="currentColor" stroke-width="2"></circle>
</svg>
<span>履歴</span>
</a>
</nav>
</body>
</html>
サンプル一式を取得する場合 HTML・CSSなどすべてのファイルが必要な場合は、「サンプル一式をダウンロード」をクリックしてください。
Q ダウンロードしたけど、これをネット上で動かすにはどうするの?
Googleアカウントがあれば、InfinityFreeで無料サーバーを作成して、ダウンロードしたサンプルをネット上で動かせます。
InfinityFreeを初めて利用する場合は①から、すでにサーバーを作成している場合は②へ進んでください。
ファイル構成と設置方法
このサンプルはHTMLとCSSの2ファイルで構成されています。HTMLではホーム・検索・お気に入り・通知・マイページ・メニュー・ランキング・履歴の8項目を配置し、CSS Gridを使用して4列×2段の固定フッターメニューとして表示します。JavaScriptや外部ライブラリは使用しません。
固定フッターメニューにはposition:fixedを使用しているため、ページをスクロールしても画面下部に表示され続けます。メニュー全体には最大横幅を設定せず、画面幅いっぱいを4列に均等分割して8個のメニューを上下2段へ配置します。
sample/
├── index.html
└── style.css
各ファイルの役割
index.htmlはページコンテンツと固定フッターメニューを構成するファイルです。8個のメニューについて、メニュー名、リンク先、SVGアイコンを変更できます。
style.cssは固定フッターメニューの配置とデザインを設定するファイルです。CSS Gridによる列数、各メニューの高さ、アイコンと文字の間隔、文字サイズ、アイコンサイズ、色などを変更できます。
設置方法・使い方
sampleフォルダへindex.htmlとstyle.cssを配置します。2つのファイルを同じ階層へ保存したあと、sample/index.htmlをブラウザで開いてください。index.htmlからstyle.cssを読み込み、8個のメニューが画面下部へ4列×2段で固定表示されます。
各メニューのリンク先は、index.htmlに記述しているhref="#"を移動させたいページのURLへ変更してください。「ホーム」「検索」「お気に入り」などのメニュー名も、Webサイトで使用する内容に合わせて変更できます。
カスタマイズできる内容
index.htmlでは8個のメニュー名、リンク先、SVGアイコンを変更できます。項目を追加・削除する場合は、footer-menu-two-row_itemを付けたリンク要素を追加・削除します。style.cssではメニューの列数、各項目の高さ、文字色、文字サイズ、アイコンサイズ、項目同士の配置を変更できます。
grid-template-columns:repeat(4,1fr);では1段あたり4項目を均等に配置しています。列数を変更する場合は、この4を表示したい列数に変更できます。
数値調整
style.css
padding-bottom:145px;
2段の固定フッターメニューによってページ内容が隠れないように確保する下側の余白です。各メニューの高さを変更した場合は、この値も合わせて調整してください。
grid-template-columns:repeat(4,1fr);
固定フッターメニューの列数です。4を変更すると1段に表示するメニュー数が変わります。現在は8項目を4列×2段で表示します。
height:72px;
各メニューの高さです。値を大きくすると1段の高さが高くなり、2段分の固定フッターメニュー全体も高くなります。
gap:6px;
アイコンとメニュー名の間隔です。値を大きくするとアイコンと文字の間隔が広がります。
font-size:12px;
メニュー名の文字サイズです。値を大きくすると文字が大きくなり、小さくするとコンパクトになります。
width:24px; / height:24px;
SVGアイコンのサイズです。値を大きくするとアイコンが大きくなり、小さくすると小さくなります。
font-size:28px;
ページ上部に表示するタイトルの文字サイズです。値を大きくするとタイトルが大きくなります。
min-height:720px;
サンプルページのコンテンツ部分に設定している最低高さです。値を大きくするとページが長くなります。
レスポンシブ対応
このサンプルはレスポンシブ対応です。style.cssの固定フッターメニューにwidth:100%を設定し、grid-template-columns:repeat(4,1fr)によって利用できる画面幅を4列へ均等に分割します。最大横幅による制限は設けていません。
画面幅が640px以下になると、メディアクエリによって各メニューの高さを68px、文字サイズを11px、SVGアイコンを22pxへ変更します。ページコンテンツの左右余白も小さくし、スマートフォン・タブレット・PCの画面幅に合わせて表示できるようにしています。
コメント