立体的な固定フッターメニューを作る方法
立体的な固定フッターメニューを作る方法を紹介します。このサンプルでは、HTMLとCSSを使用して、コンテンツをスクロールしても画面下部へ固定されたまま表示されるフッターメニューを作成します。フッターメニュー全体に厚みと影を付けることで、通常の平面的な固定メニューとは異なる立体的なデザインに仕上げています。
フッターメニューには「ホーム」「検索」「お気に入り」「マイページ」の4項目を配置し、それぞれアイコンと文字を縦方向に並べています。メニュー全体はデモ画面の左右と下端へ接した状態で固定されているため、コンテンツを下へスクロールしても常に表示されます。また、各メニュー項目へマウスカーソルを合わせると上方向へ浮き上がり、厚みと影が強調されます。
HTMLではメニュー項目の文字やリンク先、SVGアイコンを変更でき、CSSではフッターメニューの高さ、余白、背景色、角丸、厚み、影、各項目の浮き上がり量などを調整できます。画面幅640px以下ではフッターメニューやアイコン、文字サイズを調整しているため、スマートフォン・タブレット・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>
<!-- 固定フッターメニューを含むデモ全体 -->
<div class="three-dimensional-fixed-footer-demo">
<!-- スクロールするコンテンツエリア -->
<div class="three-dimensional-fixed-footer-content">
<!-- タイトル -->
<div class="three-dimensional-fixed-footer-title">
立体的な固定フッターメニュー
</div>
<!-- 説明文 -->
<p class="three-dimensional-fixed-footer-text">
下へスクロールしても、厚みと影を付けた立体的なフッターメニューは下部に固定されたまま表示されます。
</p>
<!-- コンテンツ1 -->
<div class="three-dimensional-fixed-footer-card">
<div class="three-dimensional-fixed-footer-card-title">
コンテンツ1
</div>
<p>固定フッターメニューの動作を確認するためのダミーコンテンツです。</p>
</div>
<!-- コンテンツ2 -->
<div class="three-dimensional-fixed-footer-card">
<div class="three-dimensional-fixed-footer-card-title">
コンテンツ2
</div>
<p>このエリアは自由にスクロールできます。</p>
</div>
<!-- コンテンツ3 -->
<div class="three-dimensional-fixed-footer-card">
<div class="three-dimensional-fixed-footer-card-title">
コンテンツ3
</div>
<p>スクロールしても下部メニューは移動しません。</p>
</div>
<!-- コンテンツ4 -->
<div class="three-dimensional-fixed-footer-card">
<div class="three-dimensional-fixed-footer-card-title">
コンテンツ4
</div>
<p>スマートフォン向けサイトやWebアプリでよく利用されるレイアウトです。</p>
</div>
<!-- コンテンツ5 -->
<div class="three-dimensional-fixed-footer-card">
<div class="three-dimensional-fixed-footer-card-title">
コンテンツ5
</div>
<p>最後までスクロールして固定表示を確認してください。</p>
</div>
<!-- コンテンツ6 -->
<div class="three-dimensional-fixed-footer-card">
<div class="three-dimensional-fixed-footer-card-title">
コンテンツ6
</div>
<p>このカードはスクロール量を増やすためのサンプルです。</p>
</div>
</div>
<!-- 立体的な固定フッターメニュー -->
<nav class="three-dimensional-fixed-footer-menu" aria-label="固定フッターメニュー">
<!-- ホーム -->
<a href="#" class="three-dimensional-fixed-footer-menu_item">
<svg viewBox="0 0 24 24" aria-hidden="true">
<path d="M12 3 3 10h2v10h5v-6h4v6h5V10h2z"></path>
</svg>
<span>ホーム</span>
</a>
<!-- 検索 -->
<a href="#" class="three-dimensional-fixed-footer-menu_item">
<svg viewBox="0 0 24 24" aria-hidden="true">
<path d="M10 18a8 8 0 1 1 5.29-2l4.36 4.35-1.42 1.42-4.35-4.36A8 8 0 0 1 10 18zm0-2a6 6 0 1 0 0-12 6 6 0 0 0 0 12z"></path>
</svg>
<span>検索</span>
</a>
<!-- お気に入り -->
<a href="#" class="three-dimensional-fixed-footer-menu_item">
<svg viewBox="0 0 24 24" aria-hidden="true">
<path d="M12 21 2.8 11.8a5.5 5.5 0 1 1 7.8-7.8L12 5.4l1.4-1.4a5.5 5.5 0 1 1 7.8 7.8z"></path>
</svg>
<span>お気に入り</span>
</a>
<!-- マイページ -->
<a href="#" class="three-dimensional-fixed-footer-menu_item">
<svg viewBox="0 0 24 24" aria-hidden="true">
<path d="M12 12a4 4 0 1 0-4-4 4 4 0 0 0 4 4zm0 2c-3.3 0-6 1.8-6 4v2h12v-2c0-2.2-2.7-4-6-4z"></path>
</svg>
<span>マイページ</span>
</a>
</nav>
</div>
</body>
</html>
サンプル一式を取得する場合 HTML・CSSなどすべてのファイルが必要な場合は、「サンプル一式をダウンロード」をクリックしてください。
ファイル構成と設置方法
このサンプルはHTMLとCSSの2ファイルで構成されています。HTMLではスクロールできるコンテンツエリアと、「ホーム」「検索」「お気に入り」「マイページ」の4項目を持つ固定フッターメニューを作成します。CSSではフッターメニューをデモ画面の下部へ固定し、グラデーション、下側の厚み、外側の影を組み合わせて立体的なデザインにしています。
sample/
├── index.html
└── style.css
各ファイルの役割
index.htmlは固定フッターメニューを含むページ全体を構成するファイルです。「立体的な固定フッターメニュー」のタイトル、説明文、各コンテンツカードの文章、フッターメニューの「ホーム」「検索」「お気に入り」「マイページ」の文字やリンク先を変更できます。各メニュー項目にはSVGアイコンを直接記述しています。
style.cssは全体のレイアウトと固定フッターメニューの立体デザインを設定するファイルです。デモエリアの横幅と高さ、スクロール領域、フッターメニューの高さ、余白、背景色、角丸、厚み、影などを変更できます。特にborder-bottom:10px solid #94a3b8;でフッターメニュー下側の厚みを作り、box-shadowで外側へ影を付けることで、メニュー本体が手前へ浮いて見える立体感を表現しています。各メニュー項目も、ホバー時に上へ移動して厚みと影が強くなるよう設定しています。
設置方法・使い方
sampleフォルダへindex.htmlとstyle.cssを配置し、2つのファイルを同じ階層へ保存します。そのあとsample/index.htmlをブラウザで開いてください。コンテンツエリアを上下へスクロールしても、フッターメニューはデモ画面の下部へ固定されたまま表示されます。各メニュー項目へマウスカーソルを合わせると、その項目が上方向へ浮き上がります。
カスタマイズできる内容
index.htmlではタイトル、説明文、各コンテンツカードの文章、フッターメニューの項目名、リンク先、SVGアイコンを変更できます。項目の表示内容を変更したい場合は、それぞれのa要素内にあるspanとsvgを編集します。
style.cssではデモエリアの最大横幅と高さ、コンテンツエリアの余白、フッターメニューの高さ、背景色、枠線、角丸、下側の厚み、外側の影を調整できます。フッターメニュー本体の立体感は、主にborder-bottom、linear-gradient()、box-shadowで作っています。各メニュー項目では、transformとbox-shadowを変更すると、ホバーしたときの浮き上がり量や立体感を調整できます。
数値調整
style.css
max-width:900px;
デモエリア全体の最大横幅です。値を大きくすると横に広がり、小さくするとコンパクトになります。
height:620px;
デモエリアの高さです。値を大きくすると表示できる縦方向の範囲が広がり、小さくすると狭くなります。
padding:32px 24px 116px;
スクロールするコンテンツエリアの内側余白です。上32px、左右24px、下116pxを指定しています。下側の116pxは、最後のコンテンツが固定フッターメニューへ隠れにくくするための余白です。
border-radius:18px;
デモエリアとフッターメニューの角丸です。値を大きくすると丸みが強くなり、0にすると四角になります。
min-height:82px;
固定フッターメニューの最小高さです。値を大きくするとメニュー全体が高くなり、小さくすると低くなります。
padding:10px 12px;
固定フッターメニューの内側余白です。10pxが上下、12pxが左右の余白です。値を大きくするとメニュー項目と外枠との間隔が広がります。
border-bottom:10px solid #94a3b8;
固定フッターメニュー下側の厚みを作る設定です。10pxを大きくするとグレー部分が厚くなり、メニュー本体の立体感が強くなります。値を小さくすると厚みが薄くなり、フラットな見た目へ近づきます。#94a3b8を変更すると厚み部分の色を変更できます。
box-shadow:0 12px 22px rgba(15,23,42,.18), 0 4px 8px rgba(15,23,42,.10);
フッターメニュー本体の外側へ付ける影です。12pxや4pxを変更すると影の位置が変わり、22pxや8pxを変更するとぼかし具合が変わります。影を大きくすると背景から浮いている印象が強くなります。
gap:6px;
各メニュー項目のアイコンと文字の間隔です。値を大きくすると間隔が広がり、小さくすると近づきます。
padding:9px 6px;
各メニュー項目の内側余白です。9pxが上下、6pxが左右です。値を大きくすると各項目の表示領域が広がります。
font-size:12px;
フッターメニューの文字サイズです。値を大きくすると文字が大きくなり、小さくすると小さくなります。
transform:translateY(-5px);
メニュー項目へマウスカーソルを合わせたときの浮き上がり量です。現在は5px上へ移動します。負の値の絶対値を大きくすると、より大きく上へ浮き上がります。
box-shadow:0 5px 0 #bfdbfe, 0 10px 14px rgba(37,99,235,.16);
ホバー時のメニュー項目に付ける厚みと影です。最初の5pxを大きくすると項目下側の厚みが増し、10pxや14pxを大きくすると外側の影が広がります。
width:24px;、height:24px;
SVGアイコンの大きさです。2つの値を大きくするとアイコンが大きくなり、小さくすると小さくなります。
transition:.2s;
ホバー時の移動、色、背景、枠線、影が切り替わる時間です。0.2秒で変化します。値を大きくするとゆっくり、小さくすると速く切り替わります。
立体感を強くする場合
フッターメニュー本体のborder-bottom:10pxにある10pxを大きくすると、下側のグレー部分が厚くなります。さらにbox-shadowの位置やぼかしを大きくすると、背景からより浮いているように見せられます。ホバー時の各メニュー項目についても、translateY(-5px)や0 5px 0 #bfdbfeの値を大きくすることで浮き上がりを強調できます。
立体感を弱くする場合
border-bottomの10pxを小さくし、外側のbox-shadowを弱くするとメニュー本体の厚みが控えめになります。グラデーションの上下の色差を小さくすると、さらにフラットなデザインへ近づきます。
レスポンシブ対応
このサンプルはレスポンシブ対応です。style.cssではデモ全体にwidth:100%とmax-width:900pxを指定し、画面幅に合わせて横幅が縮小されます。画面幅640px以下ではコンテンツエリアをpadding:24px 20px 116px;へ変更し、タイトルをfont-size:24px;へ小さくしています。
また、640px以下では固定フッターメニューをright:10px;、bottom:10px;、left:10px;として画面内側へ10pxずつ離し、min-height:76px;へ変更しています。各メニュー項目の文字サイズを11px、アイコンを22pxへ小さくしているため、スマートフォン・タブレット・PCで利用できます。
コメント