See the Pen
HTML+CSSだけで作るハンバーガーメニューボタン by チータツ (@cheese_fuji)
on CodePen.
まずはボタンから。
アコーディオンメニューを実装したものは、後ほど紹介します。
CSSの解説
コードを見る
余計な装飾を省いています。
HTML
<!-- チェックボックス -->
<input type="checkbox" id="open">
<!-- ボタン -->
<label for="open" class="menu-btn">
<span class="top-bar"></span> <!--上の線-->
<span class="center-bar"></span> <!--中の線-->
<span class="under-bar"></span> <!--下の線-->
</label>
CSS
/*** ボタン全体 ***/
.menu-btn{
display: block;
position: relative;
width: 50px; /*ボタンの幅*/
height: 50px; /*ボタンの高さ*/
border: 1px solid #000;
cursor: pointer; /*クリック可能を伝える*/
}
/*** ボタンの三本線(共通) ***/
.menu-btn span{
position: absolute;
width: 40%; /*線の長さ*/
height: 2px; /*線の太さ*/
left: calc(50% - 40% / 2); /*中央から長さの半分を引く*/
background: #000; /*線の色*/
transition: .4s;
}
/* 上・中・下の線 */
.top-bar{
top: calc(35% - 2px / 2); /*上から35%の位置*/
}
.center-bar{
top: calc(50% - 2px / 2); /*上から50%の位置*/
}
.under-bar{
top: calc(65% - 2px / 2); /*上から65%の位置*/
}
/** クリック後(✔が入った後)の線 **/
/*上の線*/
#open:checked ~ .menu-btn > .top-bar {
top: calc(50% - 2px / 2); /*中央に移動*/
transform: rotate(45deg); /*45度回転*/
}
/*中の線*/
#open:checked ~ .menu-btn > .center-bar{
opacity: 0;/*透明*/
}
/*下の線*/
#open:checked ~ .menu-btn > .under-bar{
top: calc(50% - 2px / 2); /*中央に移動*/
transform: rotate(-45deg); /*-45度回転*/
}
/*** チェックボックスは非表示に ***/
#open{
display: none;
}
クリックの判断はチェックボックスを使用。
チェックが入った時にボタン内の線を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を指定しましょう。
チェックボックスの基本的な使い方はコチラが参考になります。
<input type="checkbox">の使い方
応用CSS
アコーディオンメニュー実装版
チェックボックスやボタンと同じ階層にメニューの中身を設置すれば、アコーディオン(展開)メニューになります。
メニューの中身はopacity: 0とvisibility: hiddenで非表示にしておき、チェックボックスに✔が入った時(ボタンクリック時)だけopacity: 1とvisibility: visibleで表示します。
See the Pen
HTMLとCSSで作るハンバーガーメニュー by チータツ (@cheese_fuji)
on CodePen.