ザリガニデザインオフィス

アニメーションで×印になるハンバーガーボタン

お知らせ:ハンバーガーボタン×ドロワーメニューのテンプレートを作成しました。詳しくはこちら

3本のハンバーガーボタンがクリックするとアニメーションと共に×に変化するハンバーガーボタンです。時々みますよね。そして、このサイトにも採用しています。以下がそのソースコードになります。

画像は一切使わないのがポイント

アニメーションを使う関係上、画像を使うと面倒ですので、HTML+CSSでハンバーガーボタンを構成します。HTMLの<span class=”bar”>がそれぞれ3本線になります。MENUとアクティブ時のCLOSE表記がそれに続いています。

<button type="button" class="btn_menu">
  <span class="bar bar1"></span>
  <span class="bar bar2"></span>
  <span class="bar bar3"></span>
  <span class="menu">MENU</span>
  <span class="close">CLOSE</span>
</button>

そして、このbarに大きさと色、太さを指定し、さらに動きを付けるためにtransitionのCSSを掛けています。trasnform-originで変形(transform)の基準を左上にしています。

button span.bar {
  display: block;
  height: 2px;
  background-color: #333;
  margin: 10px 0;
  transition: all 0.2s;
  transform-origin: 0 0;
}

それをjQueryによってクリックするとクラスを付け加えたり取り除いたりしています。buttonをクリックするとbuttonに”active”のクラスが付き、

 button.active span.bar {
   width: 49px;
 } 
 button.active .bar1 {
   transform: rotate(30deg);
 }
 button.active .bar2 {
   opacity: 0;
 }
 button.active .bar3 {
   transform: rotate(-30deg);
 }
 button.active .menu {
   display: none;
 }
 button.active .close {
   display: block;
 }

bar1とbar3は30度ずつ曲がります。bar2はいらないのでフェードアウトします。ただし3本で並んでいる関係上、全てをdisplay:noneにしてしまうと真ん中が抜けてしまうのでopacityを0にしているだけです。また、斜めになる分だけ長さも必要になりますので49pxに伸ばしています。active時は「MENU」の文字は消え、代わりに「CLOSE」の文字が出てきます。

再度クリックすると、activeのクラスがなくなるのでもとの形に戻ります。

これでアニメーションで×印になるハンバーガーボタンの完成です。

余談

CSSのみで作る方法もありますが、個人的にはあまりオススメはしていません。以下に詳しく書いてあります。

「CSSだけで作るハンバーガーボタン」をあまりオススメしない理由