SEARCH

CATEGORY

CSSだけでハンバーガーメニューを実装する方法|JavaScript不要のUIサンプル付き

HTMLとCSSだけで完結する、JavaScript不要のハンバーガーメニューの実装方法を紹介します。

チェックボックスと :checked 擬似クラスを利用することで、シンプルかつ軽量に開閉メニューを作ることができます。

実装の仕組み(checkbox + label)

今回の実装では、次のような仕組みを使います。

  1. チェックボックスを設置
  2. labelをクリックするとチェックが入る
  3. :checked を使ってメニューを表示する

:checked は「フォーム要素が選択状態のとき」に適用されるCSSの擬似クラスです。

  • 未チェック → 非表示
  • チェックあり → 表示

という制御をCSSで行います。

デモコード

See the Pen CSSだけでハンバーガーメニューの実装(checkbox + label) by mkl may (@mkl-may) on CodePen.

ポイントは以下の部分です。

for属性で紐付けることで、labelクリック=チェックONになります。

ハンバーガーアイコン部分

HTML

3本線は span で作っています。

CSS

チェックボックスは画面上には表示せず、「状態を保持するためのトリガー」として利用しています。

バーの変形は transform を使用しています。

translateY で上下位置を調整し、rotate で回転させることで「×」の形に変形させています。

これにより、

  • 上下の線 → ×に変形
  • 中央の線 → 非表示

という動きを作っています。

transitionを指定することで滑らかに変化します。

メニュー開閉部分

HTML

CSS

メニュー本体は「~(一般兄弟セレクタ)」を使用しています。
これは「同じ階層にある後続要素」を指定できるセレクタです。

これにより、チェック時のみ

  • opacity: 1
  • pointer-events: auto

を適用しています。

display: none はアニメーションできないため、
opacity と pointer-events を使うことで自然なフェード演出を実現しています。

この実装のメリット・デメリット

メリット

  • JavaScript不要
  • 軽量
  • 実装がシンプル
  • 外部依存なし

デメリット

  • aria-expanded などの状態制御ができない
  • Escキーで閉じるなどの制御ができない
  • フォーカス管理など、複雑な制御には向かない
  • 状態が複雑になるとCSSだけでは管理が難しくなる

実務では「簡易メニュー」に向いています。

※ 本格的なUIやアクセシビリティ対応が必要な場合は、JavaScriptとの併用を検討しましょう。

まとめ

CSSだけでも、実用的なハンバーガーメニューは作れます。

JavaScriptを使わないことで、

  • 実装が軽量になる
  • 依存関係が減る
  • トラブル要因を減らせる

といったメリットがあります。

軽量なサイトを作りたい場合は、ぜひ活用してみてください。