当サイト使用テーマ

\ SWELL【WordPressテーマ】 /
当サイト使用サーバー
\ レンタルサーバー【ConoHa WING】 /
プログラミング学習

この記事では、レスポンシブデザイン対応ウェブサイトでよく見るハンバーガーメニューの作り方を解説していきます。
最初に完成形を見ていきます。
三本線のハンバーガーメニューをクリックすると×に切り替わり、ナビメニューが表示されます。
See the Pen js-04 by aqua (@aqua-programdiary) on CodePen.
まずは、HTMLのコーディングをしていきます。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="style.css">
<title>Document</title>
</head>
<body>
<header>
<nav>
<ul>
<li><a href="#">メニュー1</a></li>
<li><a href="#">メニュー2</a></li>
<li><a href="#">メニュー3</a></li>
</ul>
</nav>
<div class="hamburger">
<span></span>
<span></span>
<span></span>
</div>
</header>
<script src="main.js"></script>
</body>
</html>
<!DOCTYPE html>:
<html lang="ja">:
<head>:
<meta charset="UTF-8">:
<meta name="viewport" content="width=device-width, initial-scale=1.0">:
<link rel="stylesheet" href="style.css">:
style.css を読み込んでいます。<title>Document</title>:
<body>:
<header>:
<nav>:
<ul>:
<li>:
<a href="#">:
# を指定していますが、実際のリンク先が指定される場所です。<div class="hamburger">:
div 要素を定義します。<span></span>:
span 要素です。<script src="main.js"></script>:
main.js スクリプトファイルを読み込んでいます。次にCSSのコーディングをしていきます。
@charset 'utf-8';
nav {
width: 300px;
height: 100vh;
background: rgba(1,1,1,0.1);
font-size: 1.2rem;
font-weight: bold;
position: fixed;
top: 0;
left: 0;
text-shadow: rgba(0,0,0,0.5) 1px 1px 3px;
display: none;
}
nav.open {
display: block;
}
ul {
position: absolute;
padding: 0;
top: 50%;
left: 50%;
transform: translateY(-50%) translateX(-50%);
}
li {
list-style: none;
padding: 20px 0;
}
a {
text-decoration: none;
color: #333;
}
.hamburger {
width: 100px;
height: 100px;
position: fixed;
top: 0;
left: 0;
cursor: pointer;
transition: 0.3s;
}
.hamburger span {
width: 50px;
height: 2px ;
background: #333;
position: absolute;
left: 25px;
transition: 0.3s ease-in-out;
}
.hamburger span:nth-child(1) {
top: 36px;
}
.hamburger span:nth-child(2) {
top: 50px;
}
.hamburger span:nth-child(3) {
top: 64px;
}
.hamburger.active span:nth-child(1) {
top: 47px;
left: 25px;
background :#333;
transform: rotate(-45deg);
}
.hamburger.active span:nth-child(2),
.hamburger.active span:nth-child(3) {
top: 47px;
background: #333;
transform: rotate(45deg);
}
nav:
text-shadow によってテキストに影が付けられています。display: none により初めは非表示にしています。nav.open:
.open クラスが適用されたときにナビゲーションメニューを表示します。ul:
li:
a:
.hamburger:
.hamburger span:
span 要素のスタイルを定義します。幅50px、高さ2px、背景色はダークグレー、絶対位置で25px左から配置され、0.3秒のイージング付きトランジションが設定されています。.hamburger span:nth-child(1):
.hamburger span:nth-child(2), .hamburger span:nth-child(3):
最後にJavaScriptのコーディングをして完成です。
const hamburger=document.querySelector('.hamburger');
const nav=document.querySelector('nav');
hamburger.addEventListener('click',function(){
hamburger.classList.toggle('active');
nav.classList.toggle('open');
});
const hamburger = document.querySelector('.hamburger');
hamburger クラスを持つ要素(ハンバーガーアイコン)を取得しています。const nav = document.querySelector('nav');
nav タグ要素を取得しています。hamburger.addEventListener('click', function() { ... });
hamburger.classList.toggle('active');
active クラスを追加・削除します。これにより、アイコンがクリックされたときにアクティブ状態がトグルされます。nav.classList.toggle('open');
open クラスを追加・削除します。これにより、メニューが表示・非表示されるようになります。