メインメニューとそれぞれのメニューに対応したサブメニューがあって、メインメニューをクリックすると対応するサブメニューが表示されるナビゲーションを実装する方法をご紹介いたします。
実際の挙動については、以下デモページをご参照いただければと思います。
このように、サブメニューが切り替わるナビゲーションをjQueryを使って作成します。
クリックでサブメニューを切り替えるナビゲーションを実装する方法
ナビゲーションのHTML
ナビゲーションのHTMLは以下のようにします。
<ul class="main-nav"> <li><a href="#sub1">メニュー1</a></li> <li><a href="#sub2">メニュー2</a></li> <li><a href="#sub3">メニュー3</a></li> <li><a href="#sub4">メニュー4</a></li> <li><a href="#sub5">メニュー5</a></li> </ul> <ul class="sub-nav" id="sub1"> <li><a href="">サブメニュー1</a></li> <li><a href="">サブメニュー2</a></li> <li><a href="">サブメニュー3</a></li> <li><a href="">サブメニュー4</a></li> <li><a href="">サブメニュー5</a></li> </ul> <ul class="sub-nav" id="sub2"> <li><a href="">サブメニュー1</a></li> <li><a href="">サブメニュー2</a></li> <li><a href="">サブメニュー3</a></li> <li><a href="">サブメニュー4</a></li> <li><a href="">サブメニュー5</a></li> </ul> <ul class="sub-nav" id="sub3"> <li><a href="">サブメニュー1</a></li> <li><a href="">サブメニュー2</a></li> <li><a href="">サブメニュー3</a></li> <li><a href="">サブメニュー4</a></li> <li><a href="">サブメニュー5</a></li> </ul> <ul class="sub-nav" id="sub4"> <li><a href="">サブメニュー1</a></li> <li><a href="">サブメニュー2</a></li> <li><a href="">サブメニュー3</a></li> <li><a href="">サブメニュー4</a></li> <li><a href="">サブメニュー5</a></li> </ul> <ul class="sub-nav" id="sub5"> <li><a href="">サブメニュー1</a></li> <li><a href="">サブメニュー2</a></li> <li><a href="">サブメニュー3</a></li> <li><a href="">サブメニュー4</a></li> <li><a href="">サブメニュー5</a></li> </ul>
.main-navがメインメニューで、リンク先の「#sub〇」がそれぞれのリンクに対応したサブメニューになります。サブメニューにはリンク先と同じIDを指定しておきましょう。
jQueryの記述
jQueryは以下のようにします。
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
<script>
$(function(){
$(".sub-nav").hide();
$(".main-nav li a").on("click", function() {
$(".sub-nav").hide();
$($(this).attr("href")).fadeToggle();
if( $("[href^='#']") ){
$(".main-nav li").removeClass('current');
$(this).parent().addClass('current');
return false;
}
});
});
</script>
まず、サブメニューを非表示にしておいて、メインメニューのリンクをクリックしたタイミングで、サブメニューを表示するようにしています。他のメインメニューがクリックされたら、対応サブメニュー以外のサブメニューは非表示にします。
さらに、クリックされたメニューには「.current」を追加して、カレント表示をCSSで調整しています。
CSSの調整
ご参考までにデモページのCSSを載せておきます。
ul {
list-style: none;
display: flex;
justify-content: center;
margin: 0;
padding: 0;
}
.main-nav {
background: #bea5d3;
}
#sub1 {
background: #83DDE3;
}
#sub2 {
background: #F5A600;
}
#sub3 {
background: #C4DF11;
}
#sub4 {
background: #8ADAA6;
}
#sub5 {
background: #6697D9;
}
li {
width: 220px;
text-align: center;
}
li a {
display: block;
padding: 15px;
text-decoration: none;
font-weight: bold;
color: #fff;
}
.current a {
color: #333;
background: #fff;
}
CSSについては、環境に合わせてご変更ください。
あとがき
先日、ナビゲーションが複雑な案件があり、上記方法を実装しました。ナビゲーションはシンプルに越したことはないですが、ページ数が多くて階層を深くするよりもサブメニューを切り替えた方が使いやすくなる場合に活用できます。

