CSSだけで作るドロップダウンメニュー
CSSだけで作るドロップダウンメニューです。
親メニューliにposition: relative;を効かせ相対位置に、
子メニューulにposition: absolute;を効かせ絶対位置にしています。
子メニューulにはvisibility: hidden;で見えなくし、overflow: hidden;ではみ出し防止しててあります。子メニューliにはheight: 0;で高さをなくしています。そして親メニューをhoverしたときに子メニューulにvisibility: visible;をかけて出現させ、子メニューに高さを指定してあげます。absoluteが掛かっているため、高さを指定する必要があります。
ちなみにvisibility: hidden;の代わりにdisplay:noneをかけると、要素そのものがなくなってしますのでtransitionが効かなくなります。アニメーションをかけたいならvisibilityやheight:0を組み合わせて使うべきです。
HTML
<nav class="g_nav">
<ul class="g_nav_list ol2 clearfix">
<li class="g_nav_hover"><a href="#" class="change">メニュー1</a>
<ul class="g_nav_c">
<li><a href="#">子メニュー1</a></li>
<li><a href="#">子メニュー2</a></li>
<li><a href="#">子メニュー3</a></li>
<li><a href="#">子メニュー4</a></li>
</ul>
</li>
<li><a href="#">メニュー2</a></li>
<li class="g_nav_hover">
<a href="#">メニュー3</a>
<ul class="g_nav_c">
<li><a href="#">子メニュー1</a></li>
<li><a href="#">子メニュー2</a></li>
</ul>
</li>
<li class="g_nav_hover"><a href="#">メニュー4</a>
<ul class="g_nav_c">
<li><a href="#">子メニュー1</a></li>
<li><a href="#">子メニュー2</a></li>
<li><a href="#">子メニュー3</a></li>
</ul>
</li>
<li><a href="#">メニュー5</a></li>
<li><a href="#">メニュー6</a></li>
</ul>
</nav>
CSS
.g_nav {
background: #fff;
border-bottom: 1px solid #07215a
}
.g_nav_list>li {
position: relative;
float: left;
width: 180px;
text-align: center
}
.g_nav_list>li a {
display: block;
padding: 20px 0
}
.g_nav_list .g_nav_hover>.g_nav_c {
overflow: hidden;
visibility: hidden;
}
.g_nav_list .g_nav_hover>.g_nav_c li {
height: 0;
-webkit-transition: .2s;
transition: .2s;
box-sizing: border-box;
border: none
}
.g_nav_list .g_nav_hover>.g_nav_c li:first-child {
border-top: 1px solid #07215a
}
.g_nav_list .g_nav_hover:hover>.g_nav_c {
visibility: visible;
overflow: visible;
}
.g_nav_list .g_nav_hover:hover>.g_nav_c li {
height: 66px;
border-top: 1px solid #6b6b83;
-webkit-transition: .2s;
transition: .2s
}
.g_nav_c {
position: absolute;
width: 100%;
top: 66px;
left: 0;
background: #fff;
z-index: 10
}
.g_nav_c li {
border-top: 1px solid #6b6b83;
text-align: left
}
.g_nav_c li a {
padding-left: 40px
}