はじめに:アコーディオンメニューをサクッと作りたい
アコーディオンメニューをサクッと作りたい時、ありますよね?自分は多々あります。
この記事はいつでもどこでもサクッとアコーディオンメニューが作れるように、各種サンプルを取り揃えておくための記事です。
こんな感じの↓シンプルなメニューをもとに作成していきます。
作るぞ!基本のhtml
基本のhtmlをサクッと書きます。
開閉のトリガーにするための要素、その次に開閉したいメニューを設置。
トリガーの部分をハンバーガーメニューの三本線にしたり、navをdivにしたり...用途によってアレンジしてください。
<!-- トリガーの部分 -->
<p class="nav-open">クリックで開閉</p>
<!-- メニューの部分 -->
<nav>
<ul>
<li>HOME</li>
<li>会社案内</li>
<li>事業内容</li>
<li>新着情報</li>
<li>お問い合わせ</li>
</ul>
</nav>
今回は「メニューが開いている時、トリガーにactiveのclassを付与する」という仕様を基本として作成していきます。
メニューが開いている時は下記のようになっています。
<p class="nav-open active">クリックで開閉</p>
<nav>
<ul>
<li>HOME</li>
<li>会社案内</li>
<li>事業内容</li>
<li>新着情報</li>
<li>お問い合わせ</li>
</ul>
</nav>
作るぞ!基本のCSS
開閉したい要素にdisplay: none;をサクッと付けておきます。サンプルはnavなので、navにサクッと付けます。
nav{ display: none; }
開閉に応じて+と-を切り替えたい場合は疑似要素で付けておきましょう。
+と-を矢印にしたり、メニューが開いてる時だけ背景色を変えたり...なんかもできます。お好みでどうぞ。
.nav-open{
padding: 15px;
color: #fff;
font-size: 20px;
background: #2073c8;
position: relative;
}
.nav-open::before{/* 閉じている時 */
content: "+";
position: absolute;
right: 20px;
}
.nav-open.active::before{/* 開いている時 */
content: "-";
}
作るぞ!基本のjQuery
とは言ってもサクッとjQueryを読み込んでおくだけです。
<script src="js/jquery-1.12.4.min.js"></script>
ここまでできたら準備オッケー!アコーディオンメニュー作るぞ!いくぞ!
基本のアコーディオンメニュー
テロンテロンと開閉する、基本のアレです。
下記のjQueryを記述するだけでサクッと完成です。
toggleClassでトリガーの要素にclass='active'を付与・削除し、slideToggleでメニュー部分をテロンテロンと開閉させています。
jQuery
<script>
$(function(){
//クリックで動く
$('.nav-open').click(function(){
$(this).toggleClass('active');
$(this).next('nav').slideToggle();
});
//ホバーで動く
$('.nav-open').hover(function(){
$(this).toggleClass('active');
$(this).next('nav').slideToggle();
});
});
</script>
フェードイン・フェードアウトなメニュー
フェードイン・フェードアウトで開閉するメニューです。
これも下記のjQueryを記述するだけでサクッと完成です。
注意点としては、メニューの要素にtransitionやopacityのプロパティが指定されているとフェードイン・アウトが効かなかったり、ちらついたりする場合があります。
フェード速度を指定したい場合は.fadeOut('slow');や.fadeOut(500);のように、引数で指定しましょう!
jQuery
<script>
$(function(){
//クリックで動く
$('.nav-open').click(function(){
if($(this).hasClass('active')){
$(this).toggleClass('active');
$(this).next('nav').fadeOut();
} else {
$(this).toggleClass('active');
$(this).next('nav').fadeIn();
}
});
//ホバーで動く
$('.nav-open').hover(function(){
$(this).toggleClass('active');
$(this).next('nav').fadeIn();
},
function() {
$(this).toggleClass('active');
$(this).next('nav').fadeOut();
});
});
</script>
横からスライドするメニュー
横からサクッとスライドしてくるメニューです。
このメニューはCSSを基本のものから変更する必要があります。
CSS
ポイントとしては、
- メニュー要素のdisplay: none;は不要
- transform: translatex(200%);で画面外にメニューを飛ばす
- トリガーにactiveが付いている時はtransform: translatex(0);で元の位置に戻す
- 横スクロールが発生しないよう、親要素にoverflow: hidden;を指定(今回はsectionに指定しました)
これで横からスライドするメニューの準備は完了です。
section{
overflow: hidden;
}
nav{
transition: .4s;
transform: translatex(200%);
}
.active + nav{
transform: translatex(0);
}
jQuery
動き部分はCSSのtransitionで付けているので、jQueryはactiveを付け外しするだけです。
<script>
$(function(){
//クリックで動く
$('.nav-open').click(function(){
$(this).toggleClass('active');
});
//ホバーで動く
$('.nav-open').hover(function(){
$(this).toggleClass('active');
},
function() {
$(this).toggleClass('active');
});
});
</script>
おわりに
サクッとアコーディオンメニューを作りたい時のための記事でした。
アコーディオンメニューを使用する機会は多いので、いつでもサクッと書けるようにしたいですね。
また他にも動作のサンプルが増えたら追加するかもしれません。