ハンバーガーメニューの三本線の アイコンを変化させる方法
スマートフォンサイトなどで用いられる三本線のメニュー(ハンバーガーメニュー)のアイコンを
開閉時に合わせて変化させる方法をご紹介します。
方法1:Webアイコンフォント Font Awesome を使った方法
Font Awesome の基本的な知識と使い方についてはこちらの記事でご紹介しています。
・html
1 2 3 4 5 6 7 |
<head> <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.13.0/css/all.css" /> </head> <body> <div class="menu_btn01"><a href="#"><span> </span></a></div> </body> |
・css
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
.menu_btn01 a { width: 40px; height: 40px; background-color: #379AD6; display: flex; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; justify-content: center; } .menu_btn01 a::after { content: "\f0c9"; font-family: "Font Awesome 5 Free"; font-size: 2rem; font-weight: 900; color: #FFF; } .menu_btn01 a.active::after { content: "\f00d"; } |
・前提
メニューを開いた時はaタグに「active」というclassが付くよう、jQueryで制御します。
・1~13行目
メニューの大枠(色が付いた)部分です。
5~11行目は子要素を上下中央に配置する為に指定します。
・15行目~
a のメニュー枠に、after要素で三本ラインのFont Awesome iconを配置します。
・21行目~
開いた時(.active が付いた時)はafter要素のアイコンをバツ印アイコンに変更します。
方法2:cssのみで実現する方法
・html
1 |
<div class="menu_btn02"><a href=""><span> </span></a></div> |
・css
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
.menu_btn02 a { width: 40px; height: 40px; background-color: #379AD6; display: flex; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; justify-content: center; position: relative; } .menu_btn02 span, .menu_btn02 span::before, .menu_btn02 span::after { content: ""; display: block; width: 20px; height: 2px; background-color: #FFFFFF; position: absolute; margin: 0 auto; right: 0; left: 0; } .menu_btn02 span::before { bottom: 8px; } .menu_btn02 span:after { top: 8px; } .menu_btn02 .active span { background-color: transparent; } .menu_btn02 .active span::before { bottom: 0; -webkit-transform: rotate(45deg); transform: rotate(45deg); } .menu_btn02 .active span::after { top: 0; -webkit-transform: rotate(-45deg); transform: rotate(-45deg); } |
・1~13行目
メニューの大枠(色が付いた)部分です。
12行目のpositionの指定以外は方法1と同一となります。
・15~27行目
span と疑似要素で三本ラインを設定します。
.menu_btn02 span 真ん中のライン
.menu_btn02 span::before 上のライン
.menu_btn02 span::after 下のライン
となります。
・28行目~33行目
真ん中のラインと上下のラインに余白がつくよう、positionで調整しています。
・35行目以降
メニューを開いた際(.active が付いたとき)の指定となります。
・35~37行目
transparent で真ん中の線を透明にし、見えなくします。
・38行目~
上下の線を transform: rotate で斜めに回転させます。
position で余白をとったままだと回転させた際に位置がずれてしまうのでそれぞれ0にします。