ドロップダウンメニュー jQuery レスポンシブ

ドロップダウンメニュー jQuery レスポンシブデザインの実装方法

概要

この記事では、jQueryを使用したレスポンシブなドロップダウンメニューの実装方法について解説します。特に、スマートフォンやタブレットなどの異なるデバイスに対応できるメニューの作り方を紹介します。

マウスオーバーでドロップダウンメニューを表示するjQueryコードとCSS

今回は、Webサイトでよく使われるマウスオーバーで表示されるドロップダウンメニューを、jQueryとCSSを使って実装する方法をご紹介します。

さらに、レスポンシブ対応として、画面幅が768px以下になった場合はハンバーガーメニューを表示し、ドロップダウンメニューは非表示にする方法も解説します。

HTML

ドロップダウンメニューを実装するためのHTMLコードは以下のようになります。

<header>
  <nav class="globalnav-wrap">
    <h1>LOGO</h1>
    <div class="nav-button-wrap">
      <div class="nav-button">
        <span></span>
        <span></span>
        <span></span>
      </div>
    </div>
    <ul class="globalnav">
      <li class="dropdown-btn">
        メニュー1
        <ul class="dropdown">
          <li><a href="#">ドロップダウンメニュー</a></li>
          <li><a href="#">ドロップダウンメニュー</a></li>
          <li><a href="#">ドロップダウンメニュー</a></li>
          <li><a href="#">ドロップダウンメニュー</a></li>
        </ul>
      </li>
      <li class="dropdown-btn">
        メニュー2
        <ul class="dropdown">
          <li><a href="#">ドロップダウンメニュー</a></li>
          <li><a href="#">ドロップダウンメニュー</a></li>
          <li><a href="#">ドロップダウンメニュー</a></li>
          <li><a href="#">ドロップダウンメニュー</a></li>
        </ul>
      </li>
    </ul>
  </nav>
</header>

解説

  • dropdown-btn クラスを付けた要素にマウスオーバーすると、その子要素である dropdown クラスを付けたドロップダウンメニューが表示されるように設定します。

  • nav-button-wrap  nav-button は、ハンバーガーメニューの実装に使用します。

jQuery

ドロップダウンメニューとハンバーガーメニューの動作を制御するためのjQueryコードは以下のようになります。

// ドロップダウンメニュー
$('.dropdown-btn').hover(
  function() {
    // マウスオーバー時
    $(this).children('.dropdown').addClass('open');
  }, 
  function() {
    // マウスアウト時
    $(this).children('.dropdown').removeClass('open');
  }
);

// グローバルナビの開閉 (ハンバーガーメニュー)
$(function() {
  $('.nav-button-wrap').on('click', function() {
    if ($(this).hasClass('active')) {
      // ハンバーガーメニューがアクティブな場合(メニュー表示中)
      $(this).removeClass('active');
      $('.globalnav').addClass('close');
      $('.globalnav-wrap, body').removeClass('open'); 
    } else {
      // ハンバーガーメニューが非アクティブな場合(メニュー非表示)
      $(this).addClass('active');
      $('.globalnav').removeClass('close');
      $('.globalnav-wrap, body').addClass('open');
    }
  });
});

解説

  • ドロップダウンメニュー:

    • hover() メソッドを使って、マウスオーバー/マウスアウト時の動作を定義しています。

    • addClass('open')  open クラスを付与し、ドロップダウンメニューを表示します。

    • removeClass('open')  open クラスを削除し、ドロップダウンメニューを非表示にします。

  • ハンバーガーメニュー:

    • on('click') メソッドを使って、ハンバーガーメニューのクリックイベントを検知します。

    • hasClass('active')  active クラスの有無を判定し、グローバルナビゲーションとハンバーガーメニューの表示状態を切り替えます。

    • addClass('open')/removeClass('open')  open クラスを付与/削除し、グローバルナビゲーションの表示/非表示を制御します。

    • body にも open クラスを付与/削除することで、メニュー表示時に背景を固定したり、スクロールを無効化したりするなどの処理を追加できます。

CSS

グローバルナビゲーション、ドロップダウンメニュー、ハンバーガーメニューのスタイルを設定するためのCSSコードは以下のようになります。

header {
  width: 80%;
  margin: 0 auto;
}

.globalnav-wrap {
  font-size: 16px;
  color: #fff;
  background: #333;
  display: flex;
  justify-content: space-between;
}

.globalnav {
  /* メニュー項目のスタイル */
  .dropdown-btn {
    position: relative;
    display: inline-block;
    padding: 20px;
    cursor: pointer;
    &:hover {
      background: #666;
    }
  }

  /* ドロップダウンメニューのスタイル */
  .dropdown {
    z-index: 1000;
    background: #666;
    position: absolute;
    left: 0;
    top: 55px;
    width: 200px;
    padding: 10px 20px;
    display: none; /* 初期状態では非表示 */

    li {
      display: inline-block;
      margin: 10px 0;

      a {
        color: #fff;
      }
    }
  }

  /* ドロップダウンメニュー表示時のスタイル */
  .open {
    display: block; 
  }

  /* ハンバーガーメニューのスタイル */
  .nav-button-wrap {
    display: none; /* 初期状態では非表示 */
  }
}

/* 768px以下の画面幅用のスタイル */
@media screen and (max-width: 768px) {
  header {
    position: relative;
    width: 100%;
  }

  .globalnav-wrap {
    /* ハンバーガーメニューを表示 */
    .nav-button-wrap {
      display: block;
      position: absolute;
      right: 0px;
      top: 0px;
      z-index: 1000;
      cursor: pointer;
      padding: 15px;
      height: 53px;

      /* ハンバーガーメニューの線 */
      .nav-button {
        /* ハンバーガーメニューのアニメーションはNx World様のコードを利用 */
        /* ... */
      }
    }

    /* グローバルナビゲーションを非表示 */
    .globalnav {
      display: none; 

      .close {
        display: none; 
      }
    }

    /* メニュー表示時のスタイル */
    &.open {
      .globalnav {
        display: block;
        padding: 40px 20px 0;
        position: fixed;
        left: 0;
        top: 0;
        background-color: rgba(0, 0, 0, 0.9);
        width: 100%;
        height: 100%;
        overflow-x: hidden;
        overflow-y: auto;

        li {
          display: block;
        }

        li:hover {
          background: transparent;
        }

        .dropdown {
          /* ドロップダウンメニューを非表示 */
          display: none;
          position: static;
          background: transparent;
        }
      }
    }
  }
}
解説
  • 基本スタイル: グローバルナビゲーションとドロップダウンメニューの基本的なスタイルを定義します。

  • ドロップダウンメニューの表示: open クラスが付与された時に、display: block; を設定することでドロップダウンメニューを表示します。

  • ハンバーガーメニュー: 768px以下の画面幅では、nav-button-wrap を表示し、グローバルナビゲーションを非表示にします。

  • レスポンシブ対応: 768px以下の画面幅では、ハンバーガーメニューをクリックするとグローバルナビゲーションが表示されるように設定します。

  • ドロップダウンメニューの非表示: 768px以下の画面幅では、ドロップダウンメニューは非表示にします。

補足

  • レイアウトに関するCSSは、必要に応じて調整してください。

まとめ

jQueryとCSSを組み合わせることで、マウスオーバーで表示されるドロップダウンメニューを簡単に実装できます。また、メディアクエリを使用することで、レスポンシブ対応も可能です。

このサンプルコードを参考に、ご自身のWebサイトに合ったドロップダウンメニューを実装してみてください。

jQueryを使ったドロップダウンメニューの基本

jQueryを利用して、シンプルなドロップダウンメニューを作成するための基本的な手順を説明します。ここでは、必要なライブラリの導入やHTML/CSSの基本構造について詳述します。

まず、jQueryライブラリを以下のようにHTMLに追加します:

<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>

次に、基本的なHTML構造を作成します:

<ul class="menu">
  <li>メニュー1</li>
  <li>メニュー2
    <ul class="submenu">
      <li>サブメニュー1</li>
      <li>サブメニュー2</li>
    </ul>
  </li>
  <li>メニュー3</li>
</ul>

レスポンシブデザインの実装

スクリーンサイズに応じてメニューが正しく表示されるように、CSSメディアクエリを使ったスタイル調整やjQueryのイベント処理を行う方法について書かれています。

デバイス
デスクトップ 1024px以上
タブレット 768px〜1024px
スマートフォン 768px未満

以下は、CSSメディアクエリの例です:

@media (max-width: 768px) {
  .menu {
    display: block;
  }
  .submenu {
    display: none;
  }
}

アニメーション効果の追加

ドロップダウンメニューに視覚的な魅力を加えるためのアニメーション効果の実装方法について説明します。トランジションやエフェクトの利用例を挙げています。

まず、CSSでアニメーションを定義します:

.submenu {
  display: none;
  transition: all 0.3s ease;
}

次に、jQueryを使ってメニューの表示を制御します:

$('.menu li').hover(function() {
  $(this).find('.submenu').slideDown(200);
}, function() {
  $(this).find('.submenu').slideUp(200);
});

参照:

QA

Q1: レスポンシブデザインを実装する際の注意点は?

A1: 各デバイスでの表示確認を行い、要素のサイズや配置が適切であることを確認することが重要です。

Q2: jQueryがなくてもドロップダウンメニューは作れますか?

A2: はい、CSSのホバー効果やJavaScriptを使ってドロップダウンメニューを作成することも可能です。

Q3: アニメーション効果は必須ですか?

A3: アニメーション効果は必須ではありませんが、ユーザー体験を向上させるために推奨されます。

その他の参考記事:jquery dropdownplain