よくメニューなどのナビゲーションにカーソルをあわせるとプルダウンなどで更にメニューが表示されるようなナビゲーションがあります。このような動きのあるメニューはjqueryなどを使用して実装したりしますが、ここでは、CSSのみでプルダウンの動きをつけたメニューを実装してみたいと思います。CSSのみなのでとても軽く、簡単に実装できます。

HTMLの用意

まずは、メニューを表示するソースを用意。

<ul class="menu">
   <li><a href="">メニュー1</a>
      <ul>
         <li><a href="">子メニュー</a></li>
         <li><a href="">子メニュー</a></li>
         <li><a href="">子メニュー</a></li>
      </ul>
   </li>
   <li><a href="">メニュー2</a>
      <ul>
         <li><a href="">子メニュー</a></li>
         <li><a href="">子メニュー</a></li>
         <li><a href="">子メニュー</a></li>
      </ul>
   </li>
   <li><a href="">メニュー3</a>
      <ul>
         <li><a href="">子メニュー</a></li>
         <li><a href="">子メニュー</a></li>
         <li><a href="">子メニュー</a></li>
      </ul>
   </li>
</ul>

cssでプルダウンメニューの実装

それでは、cssを記述していき、プルダウンメニューを実装していきます。

.menu li {
   position: relative;
   float: left;
}
.menu li a {
   display: block;
   width: 220px;
   padding: 10px;
}
.menu li a:hover {
   background: #dbdbdb;
}
.menu li:hover > ul {
   display: block;
}
.menu ul {
   display: none;
   position: absolute;
   top: 38px;
   width: 240px;
}

最初のほうの指定は、見た目に関する指定なので、特に問題はないでしょう。

.menu li:hover > ul {
   display: block;
}

この部分で、子メニューに対して「display: block;」を指定してあげることで、親メニューにカーソルがのったときに子メニューが表示されるようになります。

.menu ul {
   display: none;
   position: absolute;
   top: 38px;
   width: 240px;
}

子メニューに対して「display: none;」を指定してあげることで、通常は隠れて見えない状態になります。そして、「top: 38px;」で親メニューのちょうど下に子メニューが表示されるようにします。

あとは、CSS3のアニメーション機能を使って、ふわっとロールオーバーする感じの動きをつけてみます。リスト要素に「transition」を追加します。

.menu li a {
   display: block;
   width: 220px;
   padding: 10px;
   webkit-transition-duration: 0.3s;
   -moz-transition-duration: 0.3s;
   transition-duration: 0.3s;
}

これは、0.3秒かけて背景色が変化するという指定をしています。

縦型メニューでスライドメニューを実装する

次に、縦に並んだメニューで横にスライドして表示される動きに変えてみます。子メニューに対して、メニューの幅の分だけずらしてあげればOKです。ここでは、「left: 240px;」としました。

.menu ul {
   display: none;
   position: absolute;
   top: 0;
   left: 240px;
   width: 240px;
}

以上が、CSSのみでプルダウンメニューを実装する方法となります。

おすすめの記事