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(); });