ドロップダウンメニュー jQuery レスポンシブデザインの実装方法
概要
この記事では、jQueryを使用したレスポンシブなドロップダウンメニューの実装方法について解説します。特に、スマートフォンやタブレットなどの異なるデバイスに対応できるメニューの作り方を紹介します。
マウスオーバーでドロップダウンメニューを表示するjQueryコードとCSS
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
// ドロップダウンメニュー
$('.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
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を使ったドロップダウンメニューの基本
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