固定フッターメニューからドロップダウンメニューを表示する方法【HTML/CSS/JavaScript・サンプルコード付き】

ドロップダウンメニュー
無料ツール
ドロップダウンメニューを自由に作成

ボタン・メニュー項目・サイズ・色・余白・枠線などを設定して、HTML・CSS・JavaScriptを自動生成できます。

ドロップダウンメニュー作成ツールを使う
新しいタブで開きます

固定フッターメニューからドロップダウンメニューを表示する方法

画面下部に固定したフッターメニューから、追加のドロップダウンメニューを表示するサンプルです。「メニュー」または「通知」をクリックすると、それぞれのボタンの上側へ専用のメニューが表示されます。

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 ダウンロードしたけど、これをネット上で動かすにはどうするの?
A

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の画面幅に合わせて利用できます。


こちらもおすすめ


コメント