複数列で表示するドロップダウンメニュー付きヘッダーを作る方法【HTML/CSS/JavaScript・サンプルコード付き】

ヘッダー

複数列で表示するドロップダウンメニュー付きヘッダーを作る方法

複数列で表示するドロップダウンメニュー付きヘッダーを作る方法を紹介します。このサンプルでは、サイト名とナビゲーションメニューを配置したヘッダーに、複数のリンクを列ごとに整理して表示できるドロップダウンメニューを追加します。「サービス」の右側に配置したSVGの矢印アイコンを含むボタンをクリックすると、横幅の広いメニューがヘッダーの下に展開されます。

ドロップダウン内では「Web制作」「デザイン」「サポート」のように内容をグループごとに分け、それぞれの項目を複数列で表示します。リンク数が多い場合でもカテゴリーごとに整理しやすいため、企業サイトのサービス一覧、ECサイトの商品カテゴリー、各種コンテンツへのナビゲーションなどに利用できます。JavaScriptではボタンのクリックを検知してメニューの開閉状態を切り替え、表示状態に合わせてSVGの矢印アイコンも回転します。

サイト名、通常のナビゲーション、各列の見出しやリンクはHTMLから変更できます。CSSではヘッダーの余白や最大横幅、ドロップダウンメニューの横幅、列数、列同士の間隔、背景色、枠線、角丸、影などを調整できます。画面幅が狭くなると複数列のレイアウトを縦方向へ切り替えるレスポンシブ対応も行っているため、スマートフォン・タブレット・PCで利用できます。

コードについて 本記事のコードはサンプルコードです。ご利用前に必ず動作確認を行ってください。
免責事項 本コードの利用により発生した損害について、当サイトは一切の責任を負いません。

デモ

複数列のドロップダウンメニュー

「サービス」をクリックすると複数列のメニューが表示されます。

「サービス」をクリックしてください。「Web制作」「デザイン」「サポート」に分かれた複数列のドロップダウンメニューが表示され、もう一度クリックすると閉じます。

Q 他のアイコンを使いたい場合はどうするの?
A

無料のSVGアイコン作成ツールを使って、用途に合ったアイコンを作成できます。

コードをコピーして使おう!

<!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="multi-column-dropdown_header">

    <div class="multi-column-dropdown_inner">

      <!-- サイト名 -->
      <div class="multi-column-dropdown_logo">
        Sample Site
      </div>

      <!-- ナビゲーションメニュー -->
      <nav class="multi-column-dropdown_nav" aria-label="メインメニュー">

        <a href="#">ホーム</a>

        <!-- ドロップダウン -->
        <div class="multi-column-dropdown_dropdown">

          <!-- ドロップダウン開閉ボタン -->
          <button
            type="button"
            class="multi-column-dropdown_button"
            aria-expanded="false"
            aria-controls="multi-column-menu"
          >
            サービス

            <!-- 開閉状態を示すSVG矢印アイコン -->
            <svg
              class="multi-column-dropdown_icon"
              viewBox="0 0 24 24"
              aria-hidden="true"
            >
              <path d="M6 9l6 6 6-6"></path>
            </svg>

          </button>

          <!-- 複数列で表示するドロップダウンメニュー -->
          <div
            class="multi-column-dropdown_menu"
            id="multi-column-menu"
          >

            <!-- Web制作 -->
            <div class="multi-column-dropdown_group">

              <p class="multi-column-dropdown_group-title">
                Web制作
              </p>

              <ul class="multi-column-dropdown_list">
                <li><a href="#">ホームページ制作</a></li>
                <li><a href="#">ランディングページ</a></li>
                <li><a href="#">サイトリニューアル</a></li>
              </ul>

            </div>

            <!-- デザイン -->
            <div class="multi-column-dropdown_group">

              <p class="multi-column-dropdown_group-title">
                デザイン
              </p>

              <ul class="multi-column-dropdown_list">
                <li><a href="#">Webデザイン</a></li>
                <li><a href="#">バナーデザイン</a></li>
                <li><a href="#">UIデザイン</a></li>
              </ul>

            </div>

            <!-- サポート -->
            <div class="multi-column-dropdown_group">

              <p class="multi-column-dropdown_group-title">
                サポート
              </p>

              <ul class="multi-column-dropdown_list">
                <li><a href="#">サイト運用</a></li>
                <li><a href="#">更新サポート</a></li>
                <li><a href="#">お問い合わせ</a></li>
              </ul>

            </div>

          </div>

        </div>

        <a href="#">会社概要</a>
        <a href="#">お問い合わせ</a>

      </nav>

    </div>

  </header>

  <!-- ページ内容 -->
  <main class="multi-column-dropdown_content">

    <p class="multi-column-dropdown_content-title">
      複数列のドロップダウンメニュー
    </p>

    <p class="multi-column-dropdown_content-text">
      「サービス」をクリックすると複数列のメニューが表示されます。
    </p>

  </main>

  <!-- JavaScriptファイル -->
  <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はヘッダー全体を構成するファイルです。「Sample Site」のサイト名、「ホーム」「サービス」「会社概要」「お問い合わせ」のナビゲーションと、「Web制作」「デザイン」「サポート」の3列に分けたドロップダウンメニューを記述しています。各列の見出しやリンク名、リンク先は用途に合わせて変更できます。

style.cssはヘッダーとドロップダウンメニューのデザインを設定するファイルです。ヘッダーの横幅や余白、ナビゲーションの間隔、ドロップダウンメニューの横幅・配置・余白・角丸・影、各列の配置などを調整できます。画面幅に合わせたレスポンシブ表示もこのファイルで設定します。

script.jsはドロップダウンメニューの開閉を制御するファイルです。「サービス」をクリックするとメニューを表示し、もう一度クリックすると閉じる動作を実行します。開閉状態に合わせてボタンの状態も切り替えます。

設置方法・使い方
sampleフォルダへindex.html、style.css、script.jsを配置します。3つのファイルを同じ階層へ保存したあと、sample/index.htmlをブラウザで開いてください。ヘッダーの「サービス」をクリックすると、「Web制作」「デザイン」「サポート」に分かれた複数列のドロップダウンメニューが表示されます。もう一度「サービス」をクリックするとメニューが閉じます。

カスタマイズできる内容
index.htmlでは「Sample Site」のサイト名、ヘッダーに表示するナビゲーション、ドロップダウンメニュー内の列見出し、各リンクの表示名とリンク先を変更できます。「Web制作」「デザイン」「サポート」の内容も、実際のサイト構成に合わせて書き換えられます。

style.cssではヘッダーの余白、最大横幅、ナビゲーションの間隔、文字サイズ、文字色、ドロップダウンメニューの配置、横幅、内側余白、列同士の間隔、背景色、枠線、角丸、影などを変更できます。また、開閉ボタンに使用しているSVGアイコンのサイズや色、開閉時の回転表示も調整できます。

数値調整
style.css
padding:28px 40px;
ヘッダーの内側余白です。上下の28pxを大きくするとヘッダーが高くなり、左右の40pxを大きくすると画面端との間隔が広がります。

max-width:1200px;
ヘッダー内部の最大横幅です。値を大きくするとサイト名とナビゲーションを配置できる範囲が広がり、小さくすると中央へまとまった表示になります。

gap:40px;
ヘッダー内部の要素同士の間隔です。値を大きくすると間隔が広がり、小さくすると近くなります。

top:calc(100% + 14px);
ヘッダーのナビゲーションとドロップダウンメニューの上下間隔です。14pxを大きくするとメニューが下へ離れ、小さくするとナビゲーションへ近づきます。

transition:.3s;
SVGアイコンなどの状態が切り替わる時間です。0.3秒で変化し、値を大きくするとゆっくり、小さくすると速く切り替わります。

transform:rotate(180deg);
ドロップダウンメニューを開いたときのSVGアイコンの回転角度です。180degで上下方向が反転します。

レスポンシブ対応
このサンプルはレスポンシブ対応です。style.cssのwidth:100%とmax-width:1200pxにより、ヘッダー内部が画面幅に合わせて調整されます。また、@media (max-width:768px)ではヘッダーの余白を小さくし、サイト名とナビゲーションを縦方向へ配置して、メニュー項目が画面幅に収まるように調整します。スマートフォン・タブレット・PCで利用できます。


こちらもおすすめ


コメント