CSSでアニメーションを実装してみよう!ハンバーガーメニュー(三本線)編

mosです。
マークアップエンジニアとして2年が経ちました。

コーディングの仕事を始めると
JavaScriptを使ったアニメーションを実装する状況が訪れると思います。

しかしJavaScript未経験の方は「プログラミング」に対して苦手意識を持ってしまい、敬遠してしまうなんてこともありますよね。

そんなときに取り組みやすいのがCSS3を使ったアニメーションです!

実装したい内容によっては多少JavaScriptが必要なときもありますが、
主要部分はCSSで対応できますので、
コーディング経験の浅い方でも取り組みやすいかと思います。

それでは、解説していきます。

今回は、最近スマホサイトだけでなくPCサイトでもよく見かけるハンバーガーメニューのアニメーションについてです。

See the Pen Crazy Goo -webkit- by mos (@un-t_mos) on CodePen.

※今回少しだけJavaScriptを使います。分からない場合は、そのままコピーして活用ください。

仕組み

・JavaScript:クリック時に特定のclassを付けたり外したりする
・CSS:特定のclassが付与されたら三本線をクロス(バツ印に)する
・CSS:特定のclassが排除されたら三本線を元に戻す

※特定のclass:今回は「is-active」を使用

アニメーションの実装に使用するCSS3プロパティ

・transition
・transform

三本線を形成するHTMLとCSS

■イメージ

img_01

■HTML

<div class="btnHamburger">
<span class="line line_01"></span>
<span class="line line_02"></span>
<span class="line line_03"></span>
</div>

■CSS

/* クリックエリアと位置を指定 ---------------------- */
.btnHamburger {
  position: absolute;
  top: 0;
  left: 50%;
  margin-left: -25px;
  width: 50px; /* クリックエリアの横幅*/
  height: 50px; /* クリックエリアの高さ*/
  cursor: pointer;
}

/* 3本線の1本ごとに共通するスタイルを指定 ---------------------- */
.btnHamburger .line {
  position: absolute;
  top: 0;
  left: 0;
  display: block;
  width: 50px; /* 横幅 */
  height: 3px; /* 1本辺りの高さ */
  background: #000; /* 線の色 */

  /* 適用するプロパティ、変化する時間、変化する速度 */
  -webkit-transition: all 0.3s ease-out;
  transition: all 0.3s ease-out;
 }

/* 3本線の各線の位置を指定 ---------------------- */
.btnHamburger .line_01 { top: 10px; }
.btnHamburger .line_02 { top: 24px; }
.btnHamburger .line_03 { top: 38px; }

<transitionプロパティの解説>対応ブラウザ

時間的変化をまとめて指定する際に使用するショートハンドプロパティです。
下記4つのプロパティの値を設定します。

・transition-property: アニメーションを適用するCSSプロパティを指定
・transition-duration: アニメーションが完了するまでの所要時間を指定
・transition-timing-function:アニメーションの変化速度を指定
・transition-delay:アニメーションが始まるまでの時間を指定 ※今回は省略

三本線がクロスした時のスタイル

■イメージ

img_02

■CSS

/* 最上部の線のスタイル ---------------------- */
.btnHamburger.is-active .line_01 {
  top: 24px; /* 上から2番目の線の位置に変更 */

  /* 線を45度回転 */
  -webkit-transform: rotate(45deg);
  transform: rotate(45deg);
}

/* 上から2番目の線のスタイル ---------------------- */
.btnHamburger.is-active .line_02 {
  opacity: 0; /* 不透明度を下げて線を消す */
}

/* 最下部の線のスタイル ---------------------- */
.btnHamburger.is-active .line_03 {
  top: 24px; /* 上から2番目の線の位置に変更 */

  /* 線を135度回転 */
  -webkit-transform: rotate(135deg);
  transform: rotate(135deg);
}

<transformプロパティの解説>対応ブラウザ

移動、回転、縮尺、傾斜、遠近効果など要素を変形させるための関数を設定します。

・translate: 移動
・rotate:回転 ※今回はこれを使用
・scale: 縮尺
・skew:傾斜
・perspective:遠近効果

JavaScriptを使用して
特定のclassを付けたり外したりする処理

■JavaScript

$(function(){ //ページの内容(HTMLやCSSなど)を全て読み込み準備が整ったら実行
  $('.btnHamburger').on('click', function(){ //.btnHamburgerがクリックされた時の処理
    $(this).toggleClass('is-active'); //.is-activeを付ける・外す
  });
});

■上記JavaScriptを使う場合について

jQueryをまだ読み込んでいない場合は、headタグ内に下記を記述してください。

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>

以上になります。

読んでいるだけでは簡単さが伝わらないと思いますので、
実際にやってみてください!
プログラミングは考えずマークアップする感覚で実装することができます。

JavaScriptに苦手意識があると中々取り掛かれないですよね。
まず一言目に「何を書けばいいんだ?」でつまづき、
検索してみても「何書いてあるのか分かんない」状況となり挫折したりしますよね。

私も経験しました。

そんな状況を打破するためにも
まずは、このCSS3を使ったアニメーションを試してみてください!
新しい道がひらけますよ。