はじめに
今回は、下記のサイトを参考に、jQueryでハンバーガーメニューの開閉アニメーションについて学んでいきます。
全体のコード一覧
See the Pen jQueryで作るハンバーガーメニューの開閉アニメーション by Uka Suzuki (@uukasuzuki_) on CodePen.
HTML5のコード解説
<nav class="sp-nav">
<ul>
<li><a href="#">MENU</a></li>
<li><a href="#">MENU</a></li>
<li><a href="#">MENU</a></li>
<li class="close"><span>閉じる</span></li>
</ul>
</nav>
<div id="hamburger">
<span></span>
</div>
レスポンシブのヘッダーメニューを作る際、デスクトップ上と同じくコードを書きます。今回は、最後に閉じるボタンを設定し、jQueryで定数を定義させます。
CSS3のコード解説
@media screen and (max-width: 640px) {
.pc-nav {
display: none;
}
.sp-nav {
z-index: 1;
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100vh;
display: block;
width: 100%;
background: rgba(255, 68, 0, 0.8);
opacity: 0;
transform: translateY(-100%);
transition: all .2s ease-in-out;
}
#hamburger {
position: relative;
display: block;
width: 30px;
height: 25px;
margin: 0 0 0 auto;
cursor: pointer;
}
#hamburger span {
position: absolute;
top: 50%;
left: 0;
display: block;
width: 100%;
height: 2px;
background-color: #333;
transform: translateY(-50%);
}
#hamburger::before {
content: '';
display: block;
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 2px;
background-color: #333;
}
#hamburger::after {
content: '';
display: block;
position: absolute;
bottom: 0;
left: 0;
width: 100%;
height: 2px;
background-color: #333;
}
.sp-nav ul {
padding: 0;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
height: 100%;
}
.sp-nav li {
margin: 0;
padding: 0;
}
.sp-nav li span {
font-size: 15px;
color: #333;
}
.sp-nav li a, .sp-nav li span {
display: block;
padding: 20px 0;
}
.sp-nav .close {
position: relative;
padding-left: 20px;
cursor: pointer;
}
.sp-nav .close::before {
content: '';
position: absolute;
top: 50%;
left: 0;
display: block;
width: 16px;
height: 1px;
background: #333;
transform: rotate( 45deg );
}
.sp-nav .close::after {
content: '';
position: absolute;
top: 50%;
left: 0;
display: block;
width: 16px;
height: 1px;
background: #333;
transform: rotate( -45deg );
}
.toggle {
transform: translateY( 0 );
opacity: 1;
}
}
レスポンシブメニューでは、position: fixed;で要素の位置を変わらず同じ場所に表示させます。また、top: 0;を指定することでブラウザウィンドウの上端に接するようにします。これらを組み合わせるとページをスクロールしてもその位置にとどまります。
jQueryのコード解説
$(function() {
const hum = $('#hamburger, .close') // #hamburgerと.closeの要素を選択している
const nav = $('.sp-nav') // navという定数を定義し、.sp-navという要素を選択している
hum.on('click', function(){
nav.toggleClass('toggle'); // ハンバーガーメニューをクリックすると表示される
});
});
- const hum = $('#hamburger , .close');は、#hamburgerの要素とクラスがcloseの要素を選択して変数に代入します。
- const nav = $('.sp-nav');では、クラスが「sp-nav」の要素を選択して変数に代入し、その後のhum.on('click', function()で、変数humがクリックされたときに処理されます。
- 最後に、nav.toggleClass('toggle');では、変数nav(クラスが「sp-nav」の要素)にtoggleクラスを追加または削除すると開閉される仕組みになっている。
まとめ
今回は、ChatGPTを使って解説を読みながら、簡潔にまとめました。また、今後に活かせるようコードの組み立て方に関して、論理的に考えられるようになりたいです。