検索フォームを表示する固定フッターメニューの作り方
検索フォームを表示する固定フッターメニューの作り方を紹介します。このサンプルでは、画面下部に固定したフッターメニューの「検索」をクリックすると、フッターの上側に検索フォームを表示します。普段は検索フォームを隠しておき、必要なときだけ表示できるため、固定フッター周辺をすっきりした状態に保ちながら検索機能を配置できます。
固定フッターメニューには「ホーム」「検索」「お気に入り」「通知」「マイページ」の5項目を配置します。JavaScriptで検索ボタンのクリックを判定し、検索フォームへクラスを追加・削除して表示と非表示を切り替えます。同じ検索ボタンをもう一度クリックするとフォームを閉じることができ、検索フォームを表示している間は検索ボタンの色も切り替わります。
ECサイトの商品検索、会員サイトの記事検索、管理画面のデータ検索など、固定ナビゲーションからすぐに検索できる画面に利用できます。HTMLではメニュー名、リンク先、検索フォームのプレースホルダーなどを変更でき、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="footer-menu-search_header">
<!-- タイトル -->
<div class="footer-menu-search_title">
検索フォーム
</div>
<!-- 説明文 -->
<p class="footer-menu-search_description">
フッターメニューの検索ボタンから検索フォームを表示できます。
</p>
</header>
<!-- メインコンテンツ -->
<main class="footer-menu-search_main">
<!-- 説明ブロック -->
<div class="footer-menu-search_card">
<!-- 見出し -->
<div class="footer-menu-search_heading">
検索ボタンをクリック
</div>
<!-- 本文 -->
<p class="footer-menu-search_text">
画面下部にある「検索」をクリックすると、固定フッターの上側に検索フォームを表示します。
</p>
</div>
<!-- 説明ブロック -->
<div class="footer-menu-search_card">
<!-- 見出し -->
<div class="footer-menu-search_heading">
もう一度クリックして閉じる
</div>
<!-- 本文 -->
<p class="footer-menu-search_text">
検索フォームを表示した状態でもう一度「検索」をクリックすると非表示になります。
</p>
</div>
</main>
<!-- 検索フォームパネル -->
<div class="footer-menu-search_panel">
<!-- 検索フォーム -->
<form class="footer-menu-search_form">
<!-- 検索キーワード入力欄 -->
<input
class="footer-menu-search_input"
type="search"
placeholder="キーワードを入力"
aria-label="検索キーワード">
<!-- 検索ボタン -->
<button class="footer-menu-search_submit" type="submit">
検索
</button>
</form>
</div>
<!-- 画面下部へ固定するフッターメニュー -->
<nav class="footer-menu-search_nav">
<!-- ホーム -->
<a href="#" class="footer-menu-search_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="footer-menu-search_label">ホーム</span>
</a>
<!-- 検索フォームを開閉するボタン -->
<button type="button" class="footer-menu-search_button" aria-expanded="false">
<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="footer-menu-search_label">検索</span>
</button>
<!-- お気に入り -->
<a href="#" class="footer-menu-search_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" stroke-linejoin="round"></path>
</svg>
<span class="footer-menu-search_label">お気に入り</span>
</a>
<!-- 通知 -->
<a href="#" class="footer-menu-search_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="footer-menu-search_label">通知</span>
</a>
<!-- マイページ -->
<a href="#" class="footer-menu-search_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="footer-menu-search_label">マイページ</span>
</a>
</nav>
<!-- JavaScriptファイル -->
<script src="script.js"></script>
</body>
</html>
サンプル一式を取得する場合 HTML・CSSなどすべてのファイルが必要な場合は、「サンプル一式をダウンロード」をクリックしてください。
Q ダウンロードしたけど、これをネット上で動かすにはどうするの?
Googleアカウントがあれば、InfinityFreeで無料サーバーを作成して、ダウンロードしたサンプルをネット上で動かせます。
InfinityFreeを初めて利用する場合は①から、すでにサーバーを作成している場合は②へ進んでください。
ファイル構成と設置方法
このサンプルはHTML・CSS・JavaScriptの3ファイルで構成されています。HTMLで固定フッターメニューと検索フォームを作成し、CSSで画面下部への固定、検索フォームの表示状態、色やサイズなどを設定します。JavaScriptでは固定フッターの「検索」をクリックしたときに、検索フォームの表示と非表示を切り替えます。
固定フッターメニューには「ホーム」「検索」「お気に入り」「通知」「マイページ」の5項目を配置しています。固定フッターは画面幅いっぱいに表示され、5項目を同じ横幅で並べます。検索フォームは通常時には非表示で、検索ボタンをクリックしたときだけ固定フッターの上側へ表示されます。
外部ライブラリや外部データは使用していません。HTML・CSS・バニラJavaScriptだけで動作するため、3ファイルを同じフォルダへ配置してブラウザでindex.htmlを開くと動作を確認できます。
sample/
├── index.html
├── style.css
└── script.js
各ファイルの役割
index.htmlは固定フッターメニューと検索フォームを構成するファイルです。メニュー名、リンク先、SVGアイコン、検索入力欄のプレースホルダーなどを変更できます。
style.cssはページ全体、検索フォーム、固定フッターメニューのデザインを設定するファイルです。固定フッターの高さ、検索フォームの位置や余白、角丸、影、入力欄やボタンのサイズ、文字色、背景色などを変更できます。
script.jsは検索フォームの表示と非表示を切り替えるファイルです。「検索」をクリックするとis-openクラスを追加・削除し、検索フォームの表示状態を切り替えます。同時に検索ボタンのis-activeクラスとaria-expandedも切り替えます。
設置方法・使い方
sampleフォルダへindex.html、style.css、script.jsを同じ階層で配置してください。index.htmlからstyle.cssとscript.jsを読み込む構成になっているため、sample/index.htmlをブラウザで開くとそのまま動作を確認できます。
画面下部の「検索」をクリックすると、固定フッターメニューの上側に検索フォームが表示されます。表示した状態でもう一度「検索」をクリックすると検索フォームが閉じます。検索フォームを表示している間は、固定フッターの検索ボタンが青色になります。
実際のWebサイトで使用するときは、index.htmlにある各リンクのhref="#"を移動先のURLへ変更してください。検索フォームの送信先や検索処理はこのサンプルでは指定していないため、利用するサイトの検索仕様に合わせて設定してください。
カスタマイズできる内容
index.htmlでは「ホーム」「検索」「お気に入り」「通知」「マイページ」のメニュー名、各リンク先、SVGアイコン、検索フォームのプレースホルダー、検索ボタンの文字を変更できます。
style.cssでは固定フッターの高さ、検索フォームの表示位置、左右の余白、内側余白、角丸、影、入力欄と検索ボタンの間隔、文字サイズ、アイコンサイズ、通常時と選択時の色などを変更できます。script.jsでは検索ボタンをクリックしたときの表示・非表示処理を行っています。
数値調整
style.css
padding-bottom:76px;
固定フッターとページ内容が重ならないように確保する下側の余白です。固定フッターの高さを変更する場合は、この値も合わせて調整します。
height:76px;
固定フッターメニューの高さです。値を大きくするとフッターが高くなり、小さくすると低くなります。
right:16px;・left:16px;
検索フォームパネルと画面左右との間隔です。値を大きくすると検索フォームが狭くなり、小さくすると画面端まで広がります。
bottom:76px;
検索フォームパネルを画面下端から76px上へ配置します。固定フッターの高さと同じ値にすることで、検索フォームをフッターの上側へ表示しています。
padding:14px;
検索フォームパネルの内側余白です。値を大きくするとフォームとパネル外周との間隔が広がります。
border-radius:16px;
検索フォームパネルの角丸です。値を大きくすると丸みが強くなり、0にすると四角になります。
box-shadow:0 10px 24px ...
検索フォームパネルの影です。10pxは下方向の位置、24pxはぼかしの大きさです。値を大きくすると影の位置や広がりが大きくなります。
transform:translateY(8px);
非表示時の検索フォームを8px下へ移動します。値を大きくすると表示・非表示を切り替えたときの移動量が大きくなります。
transition:0.25s
検索フォームの表示状態が切り替わる時間です。0.25秒で変化し、値を大きくするとゆっくり、小さくすると速くなります。
gap:8px;
検索入力欄と検索ボタンの間隔です。値を大きくすると両方の間隔が広がります。
padding:12px;
検索入力欄の内側余白です。値を大きくすると入力欄の内側が広くなります。
border-radius:10px;
検索入力欄と検索ボタンの角丸です。値を大きくすると丸みが強くなります。
padding:0 18px;
検索ボタンの左右の内側余白です。18pxを大きくすると検索ボタンが横に広がります。
gap:6px;
固定フッターのSVGアイコンとメニュー名の間隔です。値を大きくするとアイコンと文字が離れます。
font-size:12px;
固定フッターのメニュー名の文字サイズです。値を大きくすると文字が大きくなります。
width:24px;・height:24px;
固定フッターで使用しているSVGアイコンの大きさです。値を大きくするとアイコンが大きくなります。
レスポンシブ対応
このサンプルはレスポンシブ対応です。固定フッターメニューにはwidth:100%;を設定し、5つの項目へflex:1;を指定しているため、画面幅に合わせて各項目の横幅が均等に変化します。
style.cssの@media (max-width:640px)では、画面幅640px以下になると固定フッターの高さを76pxから68pxへ変更します。検索フォームパネルは左右16pxから10px、内側余白は14pxから10pxへ縮小し、固定フッターの高さに合わせてbottom:68px;へ変更します。メニュー名は12pxから11px、SVGアイコンは24pxから22px、検索フォーム内の文字は13pxへ調整するため、スマートフォン・タブレット・PCで利用できます。
コメント