ハンバーガーメニューを作ってみる
2024.02.13 09:00
2024.02.16 10:37

スマホ用のハンバーガーメニューを作ってみます。
CSSとJavascriptを使います。
デモはこちら
https://tech.exeweb.net/sample/3942/
まずはHTMLから。
<div class="gnavSpWrapper" id="GnavSpWrapper">
<div class="gnavSpBtn" id="GnavSpBtn">
<span class="gnavSpBtn__line gnavSpBtn__line--1"></span>
<span class="gnavSpBtn__line gnavSpBtn__line--2"></span>
<span class="gnavSpBtn__line gnavSpBtn__line--3"></span>
</div>
<nav class="gnavSpContainer">
<ul>
<li>メニュー1</li>
<li>メニュー2</li>
<li>メニュー3</li>
</ul>
</nav>
<div class="gnavSpBg" id="GnavSpBg"></div>
</div>
「gnavSpBtn__line」でボタンのラインも表現しています。
次にCSSです。
.gnavSpBtn {
position: absolute;
left: 20px;
top: 20px;
width: 50px;
height: 40px;
cursor: pointer;
z-index: 300;
display: block;
transition: all 0.5s;
}
.gnavSpBtn:hover {
opacity: .3;
}
.gnavSpBtn__line {
position: absolute;
width: 50px;
height: 3px;
left: 0;
background-color: #000;
transition: all 0.5s;
}
.gnavSpBtn__line--1 {
top: 1px;
}
.gnavSpBtn__line--2 {
top: 18px;
}
.gnavSpBtn__line--3 {
top: 36px;
}
.gnavSpOpen .gnavSpBtn__line--1 {
transform: rotate(-45deg);
top: 11px;
}
.gnavSpOpen .gnavSpBtn__line--2 {
opacity: 0;
}
.gnavSpOpen .gnavSpBtn__line--3 {
transform: rotate(45deg);
top: 11px;
}
.gnavSpContainer {
position: fixed;
left: -100%;
top: 0;
width: 70%;
height: 100vh;
padding-top: 8%;
background-color: #fff;
transition: all 0.5s;
z-index: 200;
overflow-y: auto;
}
.gnavSpOpen .gnavSpContainer {
left: 0;
}
.gnavSpBg {
position: fixed;
left: 0;
top: 0;
width: 100vw;
height: 100vh;
z-index: 5;
background-color: #000;
opacity: 0;
visibility: hidden;
transition: all 0.5s;
cursor: pointer;
z-index: 100;
}
.gnavSpOpen .gnavSpBg {
opacity: 0.5;
visibility: visible;
}
.gnavSpOpen .gnavSpBg:hover {
opacity: 0.3;
}
そして最後にJavascript。
window.onload = function () {
var gnavSpWrapper = document.getElementById('GnavSpWrapper');
var gnavSpBtn = document.getElementById('GnavSpBtn');
var gnavSpBg = document.getElementById('GnavSpBg');
gnavSpBtn.addEventListener('click', function () {
gnavSpWrapper.classList.toggle('gnavSpOpen');
});
gnavSpBg.addEventListener('click', function () {
gnavSpWrapper.classList.remove('gnavSpOpen');
});
};
Javascriptのライブラリは使っていません。
動きも滑らかだし、使いやすいですね。
今回は以上です!