INDEX
目次
3章:メニュー系UI実装
この教材の学習時間:105分
この章では、jQueryを活用したさまざまなメニュー系UIの実装方法を学びます。
具体的には、
===
を作成し、それぞれのHTML、CSS、jQueryでの実装方法を解説します。
具体的には、
===
- ドロップダウンメニュー(ホバーやクリックで展開するメニュー)
- フローティングメニュー(スクロールに追従するメニュー)
- スライドメニュー(スライドイン・アウトするメニュー)
- メニューのハイライト(現在のページやスクロールに応じたメニュー表示)
を作成し、それぞれのHTML、CSS、jQueryでの実装方法を解説します。
【3-1】ドロップダウンメニューの実装
目安の学習時間:15分
ドロップダウンメニューとは、クリックやホバーで開閉するメニューのことを指します。
今回は、メニュー項目をマウスホバーすると、その下にサブメニューが表示される動きを実装します。
今回は、メニュー項目をマウスホバーすると、その下にサブメニューが表示される動きを実装します。
HTML/CSS構造
ナビゲーションメニューのHTMLを作成する
<nav>
<ul>
<li class="dropdown">
<a href="#">メニュー</a>
<ul class="submenu">
<li><a href="#">サブメニュー1</a></li>
<li><a href="#">サブメニュー2</a></li>
</ul>
</li>
</ul>
</nav>
サンプルコード
li要素にdropdownクラス、サブメニューのul要素にsubmenuクラスを付与。
CSSでドロップダウンメニューのスタイルを整える
.submenu {
display: none;
position: absolute;
background: #444;
top: 100%;
left: 0;
width: 150px;
padding: 0;
}
.submenu li {
display: block;
padding: 10px;
color: white;
}サンプルコード
.submenuは初期状態で非表示 (display: none;) に設定。
jQueryの実装
jQueryを使用してホバー時にメニューを開閉する機能を実装する
#該当コードのみ記載
$(document).ready(function() {
$(".dropdown").hover(
function() { $(this).find(".submenu").slideDown(); },
function() { $(this).find(".submenu").slideUp(); }
);
});サンプルコード
| コード | 各コードの機能 |
|---|---|
$(document).ready(function() {...}) |
ページの読み込みが完了したら、スクリプトを実行 |
$(".dropdown").hover(function() {...}, function() {...}); |
マウスが要素に乗ったとき・外れたときの処理を設定 |
$(this).find(".submenu").slideDown(); |
マウスが乗ったとき(hover の1つ目の関数)、.submenu をスライドダウンで表示 |
$(this).find(".submenu").slideUp(); |
マウスが外れたとき(hover の2つ目の関数)、.submenu をスライドアップで非表示 |
【3-2】フローティングメニューの実装
目安の学習時間:5分
フローティングメニューとは、スクロール時に固定されるメニューのことを指します。
今回は、スクロール時にメニューを上部に固定表示する機能を実装します。
HTML・CSSのみで実装可能です。
今回は、スクロール時にメニューを上部に固定表示する機能を実装します。
HTML・CSSのみで実装可能です。
HTML/CSS構造
固定されたナビゲーションメニューのHTMLを作成する
<nav>
<ul>
<li><a href="#section1" class="menu-item">セクション1</a></li>
<li><a href="#section2" class="menu-item">セクション2</a></li>
<li><a href="#section3" class="menu-item">セクション3</a></li>
</ul>
</nav>サンプルコード
- 各メニュー項目に
menu-itemクラスを付与。
nav {
position: fixed;
top: 0;
left: 0;
width: 100%;
background: #333;
padding: 10px 0;
}
nav ul {
list-style: none;
padding: 0;
margin: 0;
display: flex;
}
nav li {
margin: 0 15px;
}
nav a {
color: white;
text-decoration: none;
font-size: 16px;
}サンプルコード
navにposition: fixed;を指定し、スクロール時に固定表示されるようにする。top: 0; left: 0; width: 100%;で画面全体に広がるように設定。
【3-3】ハイライトメニューの実装
目安の学習時間:20分
ハイライトメニューとは、現在のページやスクロール位置に応じてメニューのスタイルを変更することを指します。
【3-2】フローティングメニューに、CSSの装飾とjQueryのコードを加えることで実装できます。
【3-2】フローティングメニューに、CSSの装飾とjQueryのコードを加えることで実装できます。
HTML/CSS構造
ハイライトされるナビゲーションメニューのHTMLを作成する
<nav>
<ul>
<li><a href="#section1" class="menu-item">セクション1</a></li>
<li><a href="#section2" class="menu-item">セクション2</a></li>
<li><a href="#section3" class="menu-item">セクション3</a></li>
</ul>
</nav>サンプルコード
- 各メニュー項目に
menu-itemクラスを付与。 - 【3-2】と同じコードです。
CSSでアクティブなメニューのスタイルを整える
.menu-item.active {
background: #ff0;
color: black;
font-weight: bold;
border-radius: 5px;
}サンプルコード
.menu-item.activeで、アクティブなメニュー項目のスタイルを設定。background: #ff0;で背景色を変更し、視覚的に強調。font-weight: bold;で文字を太字にする。- これらを【3-2】のCSSに追加します。
jQueryの実装
jQueryを使用してハイライト動作を実装する
$(document).ready(function() {
$(window).scroll(function() {
let scrollPos = $(window).scrollTop();
$(".menu-item").each(function() {
let sectionOffset = $($(this).attr("href")).offset().top - 60;
if (scrollPos >= sectionOffset) {
$(".menu-item").removeClass("active");
$(this).addClass("active");
}
});
});
});サンプルコード
| コード | 各コードの機能 |
|---|---|
$(document).ready(function() {...}) |
ページの読み込みが完了したらスクリプトを実行 |
$(window).scroll(function() {...}) |
スクロールイベントを検知して処理を実行 |
let scrollPos = $(window).scrollTop(); |
現在のスクロール位置を取得 |
$(".menu-item").each(function() {...}) |
各メニュー項目(.menu-item)に対して処理を実行 |
let sectionOffset = $($(this).attr("href")).offset().top - 60; |
対象のセクションの位置を取得(60px 分の調整あり) |
if (scrollPos >= sectionOffset) {...} |
現在のスクロール位置が該当セクションを超えたら、アクティブクラスを更新 |
$(".menu-item").removeClass("active"); |
全てのメニュー項目から active クラスを削除 |
$(this).addClass("active"); |
該当するメニュー項目に active クラスを追加 |
【3-4】スライドメニューの実装
目安の学習時間:15分
スライドメニューとは、横からスライドイン・アウトするメニューのことを指します。
HTML/CSS構造
スライドするメニューのHTMLを作成する
<button id="menu-toggle">メニュー</button>
<div id="slide-menu">
<button id="menu-close">閉じる</button>
<ul>
<li><a href="#">ホーム</a></li>
<li><a href="#">サービス</a></li>
<li><a href="#">お問い合わせ</a></li>
</ul>
</div>サンプルコード
- メニューの開閉ボタン
<button>と、スライドするメニュー本体<ul>を作成。
CSSでスライドメニューのスタイルを整える
#slide-menu {
position: fixed;
left: -200px;
top: 0;
width: 200px;
height: 100%;
background: #333;
color: white;
transition: left 0.3s;
padding-top: 50px;
}サンプルコード
#slide-menuにposition: fixed;に指定し、画面に固定left: -200px;で初期状態では画面外に配置。transition: left 0.3s;でスライドのアニメーションを付与。
jQueryの実装
jQueryを使用してスライド動作を実装する
#該当コードのみ記載
$(document).ready(function() {
$("#menu-toggle").click(function() {
$("#slide-menu").animate({left: "0px"}, 300);
});
$("#menu-close").click(function() {
$("#slide-menu").animate({left: "-200px"}, 300);
});
});サンプルコード
| コード | 各コードの機能 |
|---|---|
| $(document).ready(function() {...}) | ページの読み込みが完了したらスクリプトを実行 |
| $("#menu-toggle").click(function() {...}) | #menu-toggle がクリックされたらメニューを表示 |
| $("#slide-menu").animate({left: "0px"}, 300); | #slide-menu を左からスライドイン(left: 0px) |
| $("#menu-close").click(function() {...}) | #menu-close がクリックされたらメニューを閉じる |
| $("#slide-menu").animate({left: "-200px"}, 300); | #slide-menu を左へスライドアウト(left: -200px) |
【3-5】演習課題
目安の学習時間:50分
演習課題03:フローティングメニューとドロップダウンメニューの連携
途中で躓いたら、教材を振り返りながら進めてみましょう。
解き終わったら、
解き終わったら、
03_endフォルダ内の解答例と見比べて、自分の実装を確認してみましょう。演習課題04:スライドメニューとハイライトメニューの連携
途中で躓いたら、教材を振り返りながら進めてみましょう。
解き終わったら、
解き終わったら、
04_endフォルダ内の解答例と見比べて、自分の実装を確認してみましょう。この章では、さまざまなメニューの実装方法を学びました。
次の章では、より高度なUIコンポーネントの実装に進みます!
次の章では、より高度なUIコンポーネントの実装に進みます!



