その他

ボタンの三本線がバツになるハンバーガーメニュー(CSSのみ)

ボタンの三本線がバツになるハンバーガーメニュー(CSSのみ)

See the Pen HTML+CSSだけで作るハンバーガーメニューボタン by チータツ (@cheese_fuji) on CodePen.

まずはボタンから。
アコーディオンメニューを実装したものは、後ほど紹介します。

CSSの解説

クリックの判断はチェックボックスを使用。
チェックが入った時にボタン内の線を45度回転させて動かします。

  • クリックを判断するためにチェックボックスを作成
    • input 属性を使用して作成
    • idを設定(サンプルはid: open
    • チェックボックス自体はdisplay: noneで隠しておく
  • チェックボックスのお供 label 属性でボタンを作成
    • display: blockでブロック要素に
    • position: relativeで線の起点にする
    • cursor: pointerでホバー時のマウスポインターを指に
  • ボタン内の三本線を用意
    • spanで上・中・下の線を作成
    • topで上から等間隔に並べる
    • leftで左右真ん中に
    • transitionで遷移時間(アニメーション用)を指定する
  • クリック後に(チェックボックスに✔が入ったら)三本線を動かす
    • 上の線は中央に移動して45度回転
    • 中央線は非表示に
    • 下線は中央に移動して-45度回転

クリックしたらチェックボックス(非表示)に✔が入り、✔が入っている時だけ三本線を×にするという流れになっています。

チェックボックスで動くメニューボタンの仕組み

また、チェックボックスinput type="checkbox"とラベルlabelはセットで使用します。ラベルがクリックされるとチェックボックスに✔が入る関係です。

注意点としては、idを指定しておかないと他のチェックボックスまで反応してしまうため、チェックボックスとラベルの両方に同じidを指定しましょう。

応用CSS

アコーディオンメニュー実装版

チェックボックスやボタンと同じ階層にメニューの中身を設置すれば、アコーディオン(展開)メニューになります。

メニューの中身はopacity: 0visibility: hiddenで非表示にしておき、チェックボックスに✔が入った時(ボタンクリック時)だけopacity: 1visibility: visibleで表示します。

See the Pen HTMLとCSSで作るハンバーガーメニュー by チータツ (@cheese_fuji) on CodePen.