横にスクロールできる固定フッターメニューを作る方法
横にスクロールできる固定フッターメニューを作る方法を紹介します。このサンプルでは、画面下部に固定したメニューへ複数の項目を横一列に配置し、画面幅に収まらない場合は左右へスクロールして残りのメニューを表示できるようにします。メニュー項目を無理に縮小しないため、項目数が多い場合でもアイコンや文字を見やすい大きさで表示できます。
固定フッターメニューには「ホーム」「検索」「お気に入り」「通知」「履歴」「設定」「マイページ」の7項目を配置しています。各項目にはSVGアイコンと文字を表示し、メニュー全体は画面下部へ固定します。横方向のスクロールはCSSのoverflow-x:autoで実装するため、JavaScriptを使用せずHTMLとCSSだけで動作します。
会員サイトやECサイト、管理画面など、スマートフォンで利用するナビゲーション項目が多い場合に利用できます。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>横にスクロールできる固定フッターメニュー</title>
<!-- CSSファイルを読み込む -->
<link rel="stylesheet" href="style.css">
</head>
<body>
<!-- ページ上部 -->
<header class="horizontal-scroll-fixed-footer_header">
<!-- タイトル -->
<div class="horizontal-scroll-fixed-footer_title">
横スクロールメニュー
</div>
<!-- 説明文 -->
<p class="horizontal-scroll-fixed-footer_description">
画面下部のメニューを左右へスクロールできます。
</p>
</header>
<!-- メインコンテンツ -->
<main class="horizontal-scroll-fixed-footer_main">
<!-- 説明ブロック -->
<div class="horizontal-scroll-fixed-footer_card">
<!-- 見出し -->
<div class="horizontal-scroll-fixed-footer_heading">
メニュー項目を横一列に表示
</div>
<!-- 本文 -->
<p class="horizontal-scroll-fixed-footer_text">
画面幅に収まらないメニューは、固定フッターを横へスクロールすると確認できます。
</p>
</div>
<!-- 説明ブロック -->
<div class="horizontal-scroll-fixed-footer_card">
<!-- 見出し -->
<div class="horizontal-scroll-fixed-footer_heading">
7つのメニュー
</div>
<!-- 本文 -->
<p class="horizontal-scroll-fixed-footer_text">
ホームからマイページまで7つの項目を配置しています。
</p>
</div>
</main>
<!-- 画面下部へ固定する横スクロールメニュー -->
<nav class="horizontal-scroll-fixed-footer_nav">
<!-- ホーム -->
<a href="#" class="horizontal-scroll-fixed-footer_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 class="horizontal-scroll-fixed-footer_label">ホーム</span>
</a>
<!-- 検索 -->
<a href="#" class="horizontal-scroll-fixed-footer_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 class="horizontal-scroll-fixed-footer_label">検索</span>
</a>
<!-- お気に入り -->
<a href="#" class="horizontal-scroll-fixed-footer_item">
<svg viewBox="0 0 24 24" fill="none" aria-hidden="true">
<path d="M12 20L4.8 13.1C1.3 9.8 3.7 4 8.4 4C10 4 11.2 4.8 12 6C12.8 4.8 14 4 15.6 4C20.3 4 22.7 9.8 19.2 13.1L12 20Z" stroke="currentColor" stroke-width="2" stroke-linejoin="round"></path>
</svg>
<span class="horizontal-scroll-fixed-footer_label">お気に入り</span>
</a>
<!-- 通知 -->
<a href="#" class="horizontal-scroll-fixed-footer_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>
<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 class="horizontal-scroll-fixed-footer_label">通知</span>
</a>
<!-- 履歴 -->
<a href="#" class="horizontal-scroll-fixed-footer_item">
<svg viewBox="0 0 24 24" fill="none" aria-hidden="true">
<circle cx="12" cy="12" r="8" stroke="currentColor" stroke-width="2"></circle>
<path d="M12 8V12L15 14" stroke="currentColor" stroke-width="2" stroke-linecap="round"></path>
</svg>
<span class="horizontal-scroll-fixed-footer_label">履歴</span>
</a>
<!-- 設定 -->
<a href="#" class="horizontal-scroll-fixed-footer_item">
<svg viewBox="0 0 24 24" fill="none" aria-hidden="true">
<circle cx="12" cy="12" r="3" stroke="currentColor" stroke-width="2"></circle>
<path d="M12 3V5M12 19V21M3 12H5M19 12H21M5.6 5.6L7 7M17 17L18.4 18.4M18.4 5.6L17 7M7 17L5.6 18.4" stroke="currentColor" stroke-width="2" stroke-linecap="round"></path>
</svg>
<span class="horizontal-scroll-fixed-footer_label">設定</span>
</a>
<!-- マイページ -->
<a href="#" class="horizontal-scroll-fixed-footer_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 class="horizontal-scroll-fixed-footer_label">マイページ</span>
</a>
</nav>
</body>
</html>
サンプル一式を取得する場合 HTML・CSSなどすべてのファイルが必要な場合は、「サンプル一式をダウンロード」をクリックしてください。
Q ダウンロードしたけど、これをネット上で動かすにはどうするの?
Googleアカウントがあれば、InfinityFreeで無料サーバーを作成して、ダウンロードしたサンプルをネット上で動かせます。
InfinityFreeを初めて利用する場合は①から、すでにサーバーを作成している場合は②へ進んでください。
ファイル構成と設置方法
このサンプルはHTMLとCSSの2ファイルで構成されています。HTMLでは画面下部に固定する7つのメニュー項目を作成し、CSSでは固定位置、メニューの横幅、アイコンや文字のサイズ、横スクロールなどを設定します。JavaScriptや外部ライブラリを使用せず、HTMLとCSSだけで動作します。
固定フッターメニューには「ホーム」「検索」「お気に入り」「通知」「履歴」「設定」「マイページ」の7項目を横一列に配置しています。各項目には一定の横幅を設定し、画面内にすべて収まらない場合はoverflow-x:auto;によって固定フッター内を左右へスクロールできる仕組みです。
固定フッター自体はwidth:100%;で画面幅いっぱいに表示され、ページを縦にスクロールしても画面下部に固定されます。メニュー項目を画面幅に合わせて無理に縮小しないため、項目数が多い固定フッターメニューとして利用できます。
sample/
├── index.html
└── style.css
各ファイルの役割
index.htmlはページ全体と固定フッターメニューを構成するファイルです。「ホーム」「検索」「お気に入り」「通知」「履歴」「設定」「マイページ」のメニュー名、リンク先、SVGアイコンを変更できます。メニューを追加する場合は、同じ構造のリンクを追加します。
style.cssはページ全体と固定フッターメニューのデザインを設定するファイルです。固定フッターの高さ、各メニューの横幅、アイコンと文字の間隔、文字サイズ、アイコンサイズ、文字色、背景色、境界線、横スクロールなどを変更できます。
設置方法・使い方
sampleフォルダへindex.htmlとstyle.cssを同じ階層で配置します。index.htmlからstyle.cssを読み込む構成になっているため、2つのファイルを配置したあと、sample/index.htmlをブラウザで開いてください。固定フッターメニューが画面下部に表示されます。
固定フッターメニューはページを縦にスクロールしても画面下部に固定されます。メニュー全体が画面幅より広い場合は、固定フッター部分を左右へスクロールすると、画面外に隠れているメニュー項目を表示できます。
実際のWebサイトで使用するときは、index.htmlにある各メニューのhref="#"を移動先のURLへ変更してください。
カスタマイズできる内容
index.htmlではメニュー名、リンク先、SVGアイコン、メニュー項目の数を変更できます。「ホーム」「検索」などの文字を用途に合わせて変更したり、同じ構造のリンクを追加して項目数を増やしたり、不要な項目を削除したりできます。
style.cssでは固定フッターの高さ、1項目あたりの横幅、アイコンと文字の間隔、文字サイズ、アイコンサイズ、文字色、背景色、境界線などを変更できます。横スクロールする範囲を調整したい場合は、各メニューに設定している横幅を変更します。
数値調整
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;も合わせて調整してください。
flex:0 0 220px;
PC表示でのメニュー1項目の横幅です。220pxを大きくすると1項目が横に広がって横スクロールする距離が長くなり、小さくすると一度に表示できる項目数が増えます。
gap:6px;
SVGアイコンとメニュー名の間隔です。値を大きくするとアイコンと文字が離れ、小さくすると近くなります。
font-size:12px;
固定フッターメニューの文字サイズです。値を大きくするとメニュー名が大きくなり、小さくすると小さくなります。
width:24px;・height:24px;
SVGアイコンの横幅と高さです。値を大きくするとアイコンが大きくなり、小さくすると小さくなります。
レスポンシブ対応
このサンプルはレスポンシブ対応です。style.cssのwidth:100%;によって固定フッター自体は画面幅いっぱいに表示され、overflow-x:auto;によって画面内に収まらないメニューを左右へスクロールできます。
@media (max-width:640px)では、画面幅640px以下になるとタイトルを24px、メインコンテンツの余白を24px 18px 92px、固定フッターの高さを68pxへ変更します。また、メニュー1項目の横幅を140px、文字サイズを11px、SVGアイコンを22pxへ変更します。各メニューの横幅を維持したまま横スクロールできるため、スマートフォン・タブレット・PCで利用できます。
コメント