オンマウスで開くslideToggleを使った簡単なアコーディオンメニュー

2021-10-18

hoverで表示する、jQueryのナビゲーションメニューを作りたい!

カーソルをあてるとサブメニューがスライド表示される、下のようなサンプルを作りたいと思います!
(こちらは装飾をしていないので、デザインに合わせてスタイルシートを追加していく必要があります。)

html

<ul class="menu-test lineup">
<li class="menu-parent"><a href="#">メニューA</a>
<ul class="sub-menu">
<li><a href="#">ページA-1</a></li>
<li><a href="#">ページA-2</a></li>
<li><a href="#">ページA-3</a></li>
</ul>
</li>
<li class="menu-parent"><a href="#">メニューB</a>
<ul class="sub-menu">
<li><a href="#">ページB-1</a></li>
<li><a href="#">ページB-2</a></li>
</ul>
</li>
<li class="menu-parent"><a href="#">メニューC</a>
<ul class="sub-menu">
<li><a href="#">ページC-1</a></li>
<li><a href="#">ページC-2</a></li>
<li><a href="#">ページC-3</a></li>
</ul>
</li>
</ul>

js

<script>
$(function(){
 $(".menu-parent").hover(function(){
   $(this).children(".sub-menu").stop().slideToggle();
  });
});
</script>

27行目jsの「hover」を「click」にすると、クリックした時にメニューが表示される仕様になります。このほかjQueryも忘れずに読み込みます。

CSS

<style>
.menu-test > li{position: relative;}
.menu-test .sub-menu{display: none;top: 40px;position: absolute;}
</style>

cssのポイントは、①サブメニューを非表示にしておくこと、②表示させたときに、下の本文が一緒に下がってしまわないようposition: absolute; で絶対配置にすることです。