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
}

デモページ

  • コーダーのための計算機