当サイト使用テーマ・サーバー
\ 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
クラスを追加・削除します。これにより、メニューが表示・非表示されるようになります。