
「できるだけコードをシンプルにしたい」「JavaScriptなしでメニューを切り替えたい」そんな方におすすめなのが、CSSだけで作れるハンバーガーメニューです。今回は、HTMLとCSSだけで完結する実装方法を紹介します。
HTML構造を用意する
チェックボックスとラベルを活用して、クリック時の状態を制御します。
<input type="checkbox" id="menu-toggle" hidden>
<label for="menu-toggle" class="hamburger">
<span></span>
<span></span>
<span></span>
</label>
<nav class="nav-menu">
<ul>
<li><a href="#">ホーム</a></li>
<li><a href="#">サービス</a></li>
<li><a href="#">お問い合わせ</a></li>
</ul>
</nav>
CSSで表示・非表示を切り替える
ラベルがクリックされるとチェック状態が変わり、それに応じてメニューの表示を切り替えます。
.hamburger {
display: flex;
flex-direction: column;
width: 30px;
height: 22px;
justify-content: space-between;
cursor: pointer;
}
.hamburger span {
height: 4px;
background: #333;
border-radius: 2px;
}
.nav-menu {
display: none;
}
#menu-toggle:checked + .hamburger + .nav-menu {
display: block;
}
レスポンシブ対応
PC画面では常にメニューを表示し、スマホではハンバーガーに切り替えます。
@media (min-width: 768px) {
.hamburger {
display: none;
}
.nav-menu {
display: block !important;
}
}
初心者が気をつけたいポイント
- labelとinputのid・forの対応:一致していないとクリックが効かない
- 選択状態を使うため、必ずinputはhiddenで保持:画面に表示しないよう注意
- +セレクタの順番:
input + label + nav
の順でないと動作しません
おわりに
JavaScriptなしでも、CSSの工夫でメニュー開閉を実現できます。アニメーションやスライド効果を加えれば、より洗練された印象に。次回はCSSトランジションやtransformを使ったアニメーションバージョンも紹介予定です!
Web制作やHTML/CSSの学習に役立つ情報を初心者向けに発信しています。
プロフィールはこちら