HTML/CSS
初心者でもスッキリ分かる!nth-childとnth-of-typeの基本と実践例
2025.12.15
ハンバーガーメニューの作り方を初心者向けにやさしく解説!
2025.08.06
三本線のアイコンをタップするとメニューが開く、スマホサイトでよく見かけるこの仕組みは、三本線がハンバーガーに見えることに因んで「ハンバーガーメニュー」と呼ばれています。
今回は、そんなハンバーガーメニューをHTML・CSS・JavaScriptだけで作る方法を、初心者の方にもわかりやすく解説します。
すべてのコードはコピペしてそのまま使えるようになっているので、
「とりあえず動かしてみたい」という方でも安心して取り組めます。実際に動かしながら、自分のWebサイトづくりに活かしていきましょう。
まず最初に、この記事で作っていくハンバーガーメニューの完成イメージをお見せします。
クリックでメニューが開閉し、アニメーション付きで三本線が変形する、そんな実用的なハンバーガーメニューを一緒に作っていきます。
初心者の方でもわかるように、すべてのコードを丁寧に解説しているのでご安心ください。
この章では、HTML・CSS・JavaScriptのコードをそれぞれ順番に解説していきます。また、実際の見た目もあわせて表示します。
<div id="hamburger_sample">
<span></span>
<span></span>
<span></span>
</div>
<nav id="nav">
<ul>
<li><a href="">ホーム</a></li>
<li><a href="">サービス</a></li>
<li><a href="">お問い合わせ</a></li>
</ul>
</nav>
spanタグを3つ並べることで、三本線のハンバーガーアイコンを表現しています。CSSでデザインを調整することで、見た目を三本の横線にしています。
メニュー内容はnavタグ内に記述します。リスト形式にすることで、整理された見やすいナビゲーションになります。
#hamburger_sample {
width: 30px;
cursor: pointer;
margin: 20px;
}
#hamburger_sample span {
display: block;
height: 3px;
background: #333;
margin: 5px 0;
transition: 1s;
}
#nav {
display: none;
background: #eee;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
}
#nav ul {
list-style: none;
padding: 0;
margin: 0;
}
#nav li {
border-bottom: 1px solid #ddd;
}
#nav a {
display: block;
padding: 12px 16px;
text-decoration: none;
color: #333;
font-weight: bold;
}
#nav a:hover {
background-color: #e0e0e0;
}
#nav.active {
display: block;
}
.hamburger_sampleクラスでは、クリック可能な横幅30pxのエリアを作成しています。cursor: pointer;を指定することで、マウスを乗せたときに「クリックできる」ことが視覚的にわかるようになります。
各spanタグは細長い横棒としてデザインしています。transitionを使うことで、後述するアニメーションにより、開閉時の動きをスムーズにする準備ができます。
.navクラスはdisplay: none;により、初期状態ではメニューが非表示になっています。背景色や余白もここで設定しています。.nav.activeクラスはJavaScriptによってクラスactiveが追加されたとき、非表示だったメニューを表示するように設定しています。
つまり、.nav.activeが適用されているときだけ、メニューが表示される仕組みです。
const hamburger_sample = document.getElementById('hamburger_sample');
const nav = document.getElementById('nav');
hamburger_sample.addEventListener('click', () => {
nav.classList.toggle('active');
hamburger_sample.toggle('active');
})
getElementById()を使って、HTMLの該当要素を取得しています。これにより、JavaScriptから「ハンバーガーアイコンをクリックしたときにメニューを表示する」という動作が可能になります。
classList.toggle(‘active’)は、クラスactiveが付いていなければ追加、付いていれば削除するという便利なメソッドです。
たとえば:
このように、1つのボタンでメニューの開閉を切り替える動きが実現できます。また、hamburger_sampleにもactiveを付与しているのは、次章で解説するアニメーションのための準備です。
ハンバーガーメニューに応用としてアニメーションを加えると、クリックしたときやメニューの開閉時に動きが出て、よりクオリティの高いサイトになります。
ここでは、CSSだけを追記してアニメーションを実装していきます。
#hamburger_sample.active span:nth-of-type(1) {
transform: rotate(45deg) translateY(11px);
}
#hamburger_sample.active span:nth-of-type(2) {
opacity: 0;
}
#hamburger_sample.active span:nth-of-type(3) {
transform: rotate(-45deg) translateY(-11px);
}
1本目の線は右上がりの斜め線に変形させます。rotate(45deg)で回転させ、translateY(11px)で少し下にずらすことで、中央に寄せてバランスの良い見た目にしています。
2本目の線はopacity: 0;で透明にし、非表示にします。これにより、3本線が「×(バツ)」に見えるようになります。
3本目の線は左上がりに変形し、上にずらします。1本目と組み合わせることで、ちょうど「×」の形になります。
これら3つの変形を組み合わせることで、ハンバーガーアイコンが「閉じるボタン(バツ)」に変化するアニメーションが実現できます。
#nav {
max-height: 0;
overflow: hidden;
transition: max-height 1s ease;
}
#nav.active {
max-height: 500px;
}
メニューを最初は非表示にするために、max-height: 0;に設定します。この際、display: none;は削除して、メニューが「存在はしているが高さが0で表示されない」状態にしてください。
overflow: hidden;を指定することで、メニューがはみ出した場合でも見えないようになります。
transitionでmax-heightの変化にアニメーションをつけることで、メニューが上から下へスライドして表示されるようになります。
activeクラスが追加されたときには、max-heightを500pxに変更してメニューを表示します。この数値はメニューの中身の高さに応じて調整してください。
このようにすることで、メニューがパッと切り替わるのではなく、滑らかにスライドするように表示され、より自然で心地よい動きになります。
今回は、HTML・CSS・JavaScriptを使って、シンプルなハンバーガーメニューの作り方をご紹介しました。
一見むずかしく感じるかもしれませんが、基本的なコードの組み合わせで簡単に実装できます。
また、アニメーションを加えることで、サイト全体のクオリティもぐっと向上します。
まずはこの記事のコードをコピペで試してみて、少しずつ自分のWebサイトに応用していきましょう。
投稿一覧に戻る