メニューの幅や背景、テキストの位置などの指定は様々な方法が考えられるが、ここでは単純に幅はメニューの文字数に合わせ、右側にパディング(20px)を設け、背景は背景色で指定する。
HTML は ul 要素を入れ子にしてマークアップする。
<div id="header-nav">
<ul class="menu">
<li>
<a href="#">Home</a>
</li>
<li>
<a href="#">Menu-A</a>
<ul class="sub-menu">
<li>
<a href="#">SubMenu-A-1</a>
</li>
<li>
<a href="#">SubMenu-A-2</a>
</li>
</ul>
</li>
<li>
<a href="#">Menu-B</a>
<ul class="sub-menu">
<li>
<a href="#">SubMenu-B-1</a>
</li>
<li>
<a href="#">SubMenu-B-2</a>
</li>
</ul>
</li>
</ul>
</div>
以下はほぼ最低限の CSS の記述。これで単純なドロップダウンメニューが表示できる。
#header-nav ul {
list-style-type: none;
}
#header-nav ul li {
position: relative; /*z-indexの指定や子要素の基準とするために指定*/
z-index: 1; /*ドロップダウンしたメニューが隠れないように*/
float: left; /*親メニューは横1列に並べる*/
padding-right: 20px; /*メニュー項目の間隔を指定*/
}
#header-nav ul li a{
display: block; /*要素の幅いっぱいにするために指定*/
height: 30px;
line-height: 30px;
color: #666;
font-size: 12px; font-size: 1.2rem;
text-decoration: none;
}
#header-nav ul li a:hover {
background-color: #EEE; /*マウスオーバー時に背景色を変える*/
}
#header-nav ul li ul.sub-menu {
display: none; /*サブメニューは最初は非表示にしておく*/
position: absolute; /*絶対配置にしておかないとうまくいかない*/
top: 30px; /*位置の指定*/
left: 0;
}
#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:first-child{
border-top: 1px solid #eee; /*最初の要素のみボーダートップを指定*/
}
#header-nav ul li ul.sub-menu li a {
border: 1px solid #eee; /*ボーダーの指定*/
border-top: none; /*ボーダートップは重なって太くなるので解除*/
padding: 0 10px; /*ボーダーとの間にパディングを入れる*/
background-color: #FFF; /*背景色を白に指定*/
color: #666;
}
#header-nav ul li ul.sub-menu li a:hover {
background-color: #EEE; /*マウスオーバー時に背景色を変える*/
display: block;
}
$('#header-nav ul>li').find('ul').hide();
$('#header-nav ul>li').hover(function(){
$('ul:not(:animated)', this).slideDown(300);
},
function(){
$('ul',this).hide();
});