misa
こんにちは、ウェブデザインパレットのmisaです。
今回は、HTMLとCSS、Javascriptでハンバーガーメニューを実装する方法について解説します。
主にjQueryを使用しています。
jQueryのCDN最新バージョンはこちらからご確認ください。
Contents
左から出現するメニュー
Web Design Pallet
HTML
<div class="header-container_01">
<h1>Web Design Pallet</h1>
<nav class="header__navi_01">
<ul>
<li><a href="/#">Home</a></li>
<li><a href="/#">About</a></li>
<li><a href="/#">Works</a></li>
<li><a href="/#">Contact</a></li>
</ul>
</nav>
<!-- メニューボタン -->
<button class="sp-menu-btn_01">
<span class="line"></span>
<span class="line"></span>
<span class="line"></span>
</button>
</div>
<!-- jQuery読み込み -->
<script src="https://code.jquery.com/jquery-3.7.1.js"></script>
CSS
.header-container_01 {
position: relative;
margin: 0 !important;
height: 300px;
font-family: serif;
}
.header__navi_01 {
z-index: 1;
position: absolute;
top: 0;
left: 0;
background: #ada59c;
width: 70%;
height: 100vh;
transform: translateX(-100%);
transition: all 0.6s;
}
.header__navi_01.active {
transform: translateX(0%);
}
.header__navi_01 ul {
padding-top: 48px;
text-align: center;
}
.header__navi_01 li {
list-style: none;
margin-bottom: 24px;
}
.header__navi_01 li a {
color: #fff;
text-decoration: none;
}
/* メニューボタン */
.sp-menu-btn_01 {
background: #ada59c;
border: none;
position: absolute;
right: 10px;
top: 10px;
width: 60px;
height: 60px;
cursor: pointer;
z-index: 1000;
border-radius: 50%;
}
.sp-menu-btn_01 .line {
display: block;
position: absolute;
width: 30px;
height: 1px;
right: 15px;
background: #fff;
transition: 0.3s ease-in-out;
}
.sp-menu-btn_01 span:nth-child(1) {
top: 20px;
}
.sp-menu-btn_01 span:nth-child(2) {
top: 28px;
}
.sp-menu-btn_01 span:nth-child(3) {
top: 36px;
}
/* メニューが開いているときのボタン */
.sp-menu-btn_01.active span:nth-child(1) {
top: 28px;
transform: rotate(-45deg);
}
.sp-menu-btn_01.active span:nth-child(2) {
opacity: 0;
}
.sp-menu-btn_01.active span:nth-child(3) {
top: 28px;
transform: rotate(45deg);
}
.header-container_01 h1 {
display: flex;
justify-content: center;
align-items: center;
height: 300px;
font-weight: normal;
}
JavaScript
$(function () {
$(".sp-menu-btn_01").click(function () {
$(this).toggleClass("active");
if ($(this).hasClass("active")) {
$(".header__navi_01").addClass("active");
} else {
$(".header__navi_01").removeClass("active");
}
});
});
//メニュー内を閉じておく
$(function () {
$(".header__navi_01 a[href]").click(function () {
$(".header__navi_01").removeClass("active");
$(".sp-menu-btn_01").removeClass("active");
});
});
上から出現するメニュー
Web Design Pallet
HTML
<div class="header-container_02">
<h1>Web Design Pallet</h1>
<nav class="header__navi_02">
<ul>
<li><a href="/#">Home</a></li>
<li><a href="/#">About</a></li>
<li><a href="/#">Works</a></li>
<li><a href="/#">Contact</a></li>
</ul>
</nav>
<!-- メニューボタン -->
<button class="sp-menu-btn_02">
<span class="line"></span>
<span class="line"></span>
</button>
</div>
<!-- jQuery読み込み -->
<script src="https://code.jquery.com/jquery-3.7.1.js"></script>
CSS
.header-container_02 {
position: relative;
margin: 0 !important;
height: 300px;
font-family: serif;
background: #bdcece;
}
.header__navi_02 {
z-index: 1;
position: absolute;
top: 0;
left: 0;
background: #fff;
width: 100%;
transform: translateY(-120%);
transition: all 0.6s;
}
.header__navi_02.active {
transform: translateY(0%);
}
.header__navi_02 ul {
padding-top: 48px;
text-align: center;
}
.header__navi_02 li {
list-style: none;
margin-bottom: 24px;
}
.header__navi_02 li a {
color: #88afaf;
text-decoration: none;
}
/* メニューボタン */
.sp-menu-btn_02 {
background-color: transparent;
border: none;
position: absolute;
right: 10px;
top: 10px;
width: 60px;
height: 40px;
cursor: pointer;
z-index: 1000;
}
.sp-menu-btn_02 .line {
display: block;
position: absolute;
height: 1px;
right: 15px;
background: #fff;
transition: 0.3s ease-in-out;
}
.sp-menu-btn_02 span:nth-child(1) {
top: 16px;
width: 30px;
}
.sp-menu-btn_02 span:nth-child(2) {
top: 24px;
width: 20px;
}
/* メニューが開いているときのボタン */
.sp-menu-btn_02.active span:nth-child(1) {
top: 24px;
background: #88afaf;
transform: rotate(-45deg);
}
.sp-menu-btn_02.active span:nth-child(2) {
top: 24px;
background: #88afaf;
width: 30px;
transform: rotate(45deg);
}
.header-container_02 h1 {
display: flex;
justify-content: center;
align-items: center;
height: 300px;
font-weight: normal;
}
JavaScript
$(function () {
$(".sp-menu-btn_02").click(function () {
$(this).toggleClass("active");
if ($(this).hasClass("active")) {
$(".header__navi_02").addClass("active");
} else {
$(".header__navi_02").removeClass("active");
}
});
});
//メニュー内を閉じておく
$(function () {
$(".header__navi_02 a[href]").click(function () {
$(".header__navi_02").removeClass("active");
$(".sp-menu-btn_02").removeClass("active");
});
});
右から出現するメニュー
Web Design Pallet
HTML
<div class="header-container_03">
<h1>Web Design Pallet</h1>
<nav class="header__navi_03">
<ul>
<li><a href="/#">Home</a></li>
<li><a href="/#">About</a></li>
<li><a href="/#">Works</a></li>
<li><a href="/#">Contact</a></li>
</ul>
</nav>
<!-- メニューボタン -->
<button class="sp-menu-btn_03">
<span class="line"></span>
<span class="line"></span>
<span class="menu">MENU</span>
</button>
</div>
<!-- jQuery読み込み -->
<script src="https://code.jquery.com/jquery-3.7.1.js"></script>
CSS
.header-container_03 {
position: relative;
margin: 0 !important;
height: 300px;
font-family: serif;
}
.header__navi_03 {
z-index: 1;
position: absolute;
top: 0;
right: 0;
background: #d8dcb2;
width: 70%;
height: 100vh;
transform: translateX(150%);
transition: all 0.6s;
}
.header__navi_03.active {
transform: translateX(0%);
}
.header__navi_03 ul {
padding-top: 48px;
text-align: center;
}
.header__navi_03 li {
list-style: none;
margin-bottom: 24px;
}
.header__navi_03 li a {
color: #fff;
text-decoration: none;
}
/* メニューボタン */
.sp-menu-btn_03 {
background: transparent;
color: #d8dcb2;
border: none;
position: absolute;
left: 10px;
top: 10px;
width: 60px;
height: 60px;
cursor: pointer;
z-index: 1000;
}
.sp-menu-btn_03 span {
display: block;
position: absolute;
width: 33px;
right: 15px;
transition: 0.3s ease-in-out;
font-size: 10px;
}
.sp-menu-btn_03 .line {
height: 1px;
background: #d8dcb2;
}
.sp-menu-btn_03 span:nth-child(1) {
top: 20px;
}
.sp-menu-btn_03 span:nth-child(2) {
top: 28px;
}
.sp-menu-btn_03 span:nth-child(3) {
top: 36px;
}
/* メニューが開いているときのボタン */
.sp-menu-btn_03.active span:nth-child(1) {
top: 28px;
transform: rotate(-45deg);
}
.sp-menu-btn_03.active span:nth-child(2) {
transform: rotate(45deg);
}
.sp-menu-btn_03.active .menu {
font-size:0;
}
.header-container_03 h1 {
display: flex;
justify-content: center;
align-items: center;
height: 300px;
font-weight: normal;
}
JavaScript
$(function () {
$(".sp-menu-btn_03").click(function () {
$(this).toggleClass("active");
if ($(this).hasClass("active")) {
$(".header__navi_03").addClass("active");
} else {
$(".header__navi_03").removeClass("active");
}
});
});
//メニュー内を閉じておく
$(function () {
$(".header__navi_03 a[href]").click(function () {
$(".header__navi_03").removeClass("active");
$(".sp-menu-btn_03").removeClass("active");
});
});
下から出現するメニュー
こちらのメニューアイコンはFont Awesomeを使用しています
Web Design Pallet
HTML
<div class="header-container_04">
<h1>Web Design Pallet</h1>
<nav class="header__navi_04">
<ul>
<li><a href="/#">Home</a></li>
<li><a href="/#">About</a></li>
<li><a href="/#">Works</a></li>
<li><a href="/#">Contact</a></li>
</ul>
</nav>
<!-- メニューボタン -->
<button class="sp-menu-btn_04">
<span class="menu"><i class="fa-solid fa-ellipsis-vertical"></i></span>
</button>
</div>
<!-- jQuery読み込み -->
<script src="https://code.jquery.com/jquery-3.7.1.js"></script>
CSS
.header-container_04 {
position: relative;
margin: 0 !important;
height: 300px;
font-family: serif;
}
.header__navi_04 {
z-index: 1;
position: absolute;
bottom: -20px;
left: 0;
background: #e1d1d1;
width: 100%;
transform: translateY(150%);
transition: all 0.6s;
}
.header__navi_04.active {
transform: translateY(0%);
}
.header__navi_04 ul {
padding-top: 36px;
text-align: center;
}
.header__navi_04 li {
list-style: none;
margin-bottom: 24px;
}
.header__navi_04 li a {
color: #fff;
text-decoration: none;
}
/* メニューボタン */
.sp-menu-btn_04 {
background: transparent;
color: #e1d1d1;
border: none;
position: absolute;
right: 20px;
top: 20px;
width: 30px;
height: 30px;
cursor: pointer;
z-index: 1000;
transition: all 0.6s;
}
.sp-menu-btn_04 .menu {
display: block;
position: absolute;
font-size:24px;
top: 10%;
left: 40%;
line-height: 0;
}
/* メニューが開いているときのボタン */
.sp-menu-btn_04.active .menu {
font-size: 0;
}
.sp-menu-btn_04.active .menu::after {
content:'\f00d';
font-size:24px;
font-family: 'Font Awesome 6 Free';
font-weight: 700;
line-height: initial;
}
.header-container_04 h1 {
display: flex;
justify-content: center;
align-items: center;
height: 300px;
font-weight: normal;
}
JavaScript
$(function () {
$(".sp-menu-btn_04").click(function () {
$(this).toggleClass("active");
if ($(this).hasClass("active")) {
$(".header__navi_04").addClass("active");
} else {
$(".header__navi_04").removeClass("active");
}
});
});
//メニュー内を閉じておく
$(function () {
$(".header__navi_04 a[href]").click(function () {
$(".header__navi_04").removeClass("active");
$(".sp-menu-btn_04").removeClass("active");
});
});
まとめ
今回は、HTMLとCSS、Javascriptでハンバーガーメニューを実装する方法について解説しました。
ぜひ、コピー&カスタマイズして使ってみていただけたら嬉しいです^^
では、また~✨