ナビゲーションのメニュー項目の上にマウスポインターを置くと、更に下にサブメニューが表示される「ドロップダウンメニュー」を、出来るだけ簡単にhtmlとcssのみで製作してみる。
まずはhtml。
普通のhtmlです。
<nav> <ul> <li><a href="#">top</a></li> <li><a href="#">menu1</a> <ul> <li><a href="">menu1-1</a></li> <li><a href="">menu1-2</a></li> <li><a href="">menu1-3</a></li> <li><a href="">menu1-4</a></li> </ul> </li> <li><a href="#">menu2</a> <ul> <li><a href="">menu2-1</a></li> <li><a href="">menu2-2</a></li> <li><a href="">menu2-3</a></li> </ul> </li> </ul> </nav>
あくまで普通なリストを入れ子にしたメニューですね。
お次はCSS
ul {
margin: 0;
padding: 0;
}
ul li {
float: left;
position: relative;
list-style: none;
}
ul li a {
display: block;
width: 150px;
height: 30px;
background-color: #ffc;
border: solid 1px #999;
box-sizing: border-box;
line-height: 30px;
text-align: center;
text-decoration: none;
}
li ul {
display: none;
position: absolute;
left: 0;
top: 30px;
}
li ul li {
float: none;
}
ul li:hover > ul {
display: block;
}
ちょっと余分なもの(リセットスタイルを使っていない為)もあるけど、こんな感じ。
ここでの要点は、終盤の
ul li:hover > ul {
display: block;
}
この前にli ulのサブメニュー部分をdisplay: none;で非表示にしておいて、
ul li:hover > ul
li:hover liにマウスポインタが乗った時の
> 直下の要素の
ul ul(ここではサブメニュー本体)
をdisplay:block;で表示させるということになります。
サブメニュー部分は親のliに含まれているのでサブメニュー部分にマウスポインターを移動しても:hoverの状態は継続されているのでサブメニューが消えずに表示されます。
