INDEX
目次
3章:メニュー系UI実装
この章では、jQueryを活用したさまざまなメニュー系UIの実装方法を学びます。
具体的には、
===
を作成し、それぞれのHTML、CSS、jQueryでの実装方法を解説します。
具体的には、
===
- ドロップダウンメニュー(ホバーやクリックで展開するメニュー)
- フローティングメニュー(スクロールに追従するメニュー)
- スライドメニュー(スライドイン・アウトするメニュー)
- メニューのハイライト(現在のページやスクロールに応じたメニュー表示)
を作成し、それぞれのHTML、CSS、jQueryでの実装方法を解説します。
【3-1】ドロップダウンメニューの実装
ドロップダウンメニューとは、クリックやホバーで開閉するメニューのことを指します。
今回は、メニュー項目をマウスホバーすると、その下にサブメニューが表示される動きを実装します。
今回は、メニュー項目をマウスホバーすると、その下にサブメニューが表示される動きを実装します。
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】フローティングメニューの実装
フローティングメニューとは、スクロール時に固定されるメニューのことを指します。
今回は、スクロール時にメニューを上部に固定表示する機能を実装します。
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】ハイライトメニューの実装
ハイライトメニューとは、現在のページやスクロール位置に応じてメニューのスタイルを変更することを指します。
【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】スライドメニューの実装
スライドメニューとは、横からスライドイン・アウトするメニューのことを指します。
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】演習課題
演習課題03:フローティングメニューとドロップダウンメニューの連携
途中で躓いたら、教材を振り返りながら進めてみましょう。
解き終わったら、
解き終わったら、
03_end
フォルダ内の解答例と見比べて、自分の実装を確認してみましょう。演習課題04:スライドメニューとハイライトメニューの連携
途中で躓いたら、教材を振り返りながら進めてみましょう。
解き終わったら、
解き終わったら、
04_end
フォルダ内の解答例と見比べて、自分の実装を確認してみましょう。この章では、さまざまなメニューの実装方法を学びました。
次の章では、より高度なUIコンポーネントの実装に進みます!
次の章では、より高度なUIコンポーネントの実装に進みます!