wp_nav_menu 関数は、デフォルトでは以下のように ul 要素( li 要素)を使ってメニューの各項目を出力する。
<div class="menu-XX-container">
<ul id="menu-XX" class="menu">
<li id="menu-item-YY" class="menu-item menu-item-type-ZZ menu-item-YY">
<a href="リンク先のアドレス">メニューのラベル</a></li>
<li id="menu-item-YY" class="menu-item menu-item-type-ZZ menu-item-YY">
<a href="リンク先のアドレス">メニューのラベル</a></li>
・・・
<ul class="sub-menu">
<li id="menu-item-YY" class="menu-item menu-item-type-ZZ menu-item-YY">
<a href="リンク先のアドレス">メニューのラベル</a></li>
・・・
</ul>
</ul>
</div>
wp_nav_menu 関数の詳細はこちらを参照。
これらのクラスを利用すれば、現在表示されているページのメニューやその親のメニューの表示を簡単に指定できる。
wp_nav_menu 関数でメニューを出力する。
<div id="header-nav">
<?php wp_nav_menu(array('theme_location' => 'header_nav')); ?>
</div><!-- end of #header-nav -->
以下は 簡単なドロップダウンメニューの例。出力されたメニューは div 要素(#header-nav)で囲まれているものとする。
#header-nav ul#menu-nav {
height: 30px;
}
#header-nav ul li.menu-item {
position: relative; /*z-indexの指定や子要素の基準とするために指定*/
z-index: 1; /*ドロップダウンしたメニューが隠れないように*/
float: left; /*親メニューは横1列に並べる*/
padding-right: 20px;
}
#header-nav ul li.menu-item a{
display: block; /*要素の幅いっぱいにするために指定*/
height: 30px;
line-height: 30px;
color: #666;
font-size: 12px; font-size: 1.2rem;
text-decoration: none;
}
/*マウスオーバー時等にメニューの色を変更*/
#header-nav ul li.menu-item a:hover, /*マウスオーバー時*/
#header-nav ul li.current-menu-item a, /*現在表示されているページのメニュー*/
#header-nav ul li.current-menu-parent a, /*現在表示されているページの親のメニュー*/
#header-nav ul li.current-post-ancestor a {
color: #000;
}
#header-nav ul li.menu-item a:hover {
background-color: #EEE; /*マウスオーバー時に背景色を変更*/
}
#header-nav ul li ul.sub-menu {
display: none; /*サブメニューは最初は非表示にしておく*/
position: absolute; /*絶対配置にしておかないとうまくいかない*/
top: 30px;
left: 0;
border-top: 1px solid #EEE; /*ボーダートップを指定*/
width: 160px;
}
#header-nav ul li:hover ul.sub-menu {
display: block; /*マウスオーバー時にサブメニューを表示する*/
}
#header-nav ul li ul.sub-menu li{
float: none; /*サブメニューはフロートさせないので解除*/
padding: 0; /*親メニューのパディングを解除*/
}
#header-nav ul li ul.sub-menu li a {
border: 1px solid #eee; /*ボーダーの指定*/
border-top: none; /*ボーダートップは重なって太くなるので解除。一番上は ul 要素に指定*/
padding: 0 10px;
background-color: #FFF;
color: #666;
text-align: left;
}
/*サブメニューで現在表示されているページのリンクの色を変更する*/
#header-nav ul li ul.sub-menu li.current-menu-item a {
display: block;
background-color: #FBF3FE;
}
また、jQuery を使って現在表示されているページへのリンクの場合はカーソルのポインターをデフォルトにしてリンクは「#」にしたり、クリック時に「return false」とすることで、現在のページの無駄な呼び出しを制御できる。
$('#header-nav ul li.current-menu-item a, #header-nav ul li ul.sub-menu li.current-menu-item a').css('cursor', 'default').attr('href', '#');
$('#header-nav ul li.current-menu-item a, #header-nav ul li ul.sub-menu li.current-menu-item a').click(function() { return false; });
jQuery を使ってスライドダウンのアニメーション効果を追加するには以下を記述する。
$('#header-nav ul>li').find('ul').hide();
$('#header-nav ul>li').hover(function(){
$('ul:not(:animated)', this).slideDown(300);
},
function(){
$('ul',this).hide();
});