中級編-アニメーションでホームページを動かそう

今回はホームページにCSSやJavaScriptでアニメーションをつける方法について説明していこうと思います。やっぱりメニュー選択時などにアニメーションがあるのとないのとではそのページの面白さというのが全く違ってきますよね。アニメーションはホームページの内容とは関係しない部分ですが、ホームページを訪れた人が飽きないように楽しめるコンテンツとしてあった方がいいと思います。ですので、より特徴的で印象的なホームページを作るためにアニメーションはぜひマスターしておきたいところです( *｀ω´)


# 目次
[1.ホバーアニメーション](#1ホバーアニメーション)
[2.ホバーアニメーション(アンダーライン)](#2ホバーアニメーションアンダーライン)
[3.固定ヘッダーのサイズ縮小アニメーション](#3固定ヘッダーのサイズ縮小アニメーション)
[4.ハンバーガーメニューを使おう](#4ハンバーガーメニューを使おう)
[5.まとめ](#5まとめ)

# 1.ホバーアニメーション
以下の例でHeader部分のメニュー部分(Home・About・Topics)にマウスカーソルを合わせて(以下、ホバーすると言う)みてください。スマートフォン・タブレットの方はタッチしてみてください。
<p class="codepen" data-height="300" data-default-tab="result" data-slug-hash="ExbpZjy" data-user="charme0525" style="height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;">
  <span>See the Pen <a href="https://codepen.io/charme0525/pen/ExbpZjy">
  Hover1</a> by Charme (<a href="https://codepen.io/charme0525">@charme0525</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://cpwebassets.codepen.io/assets/embed/ei.js"></script>

メニュー部分をホバーするとその部分の背景色と文字色が変化しましたね。
クリックできる部分を強調する際にこのホバーアニメーションをよく使います。このアニメーションはCSSのみで実装でき、CSSソースコード内のコメントアウトで示した通り、その箇所のコードにより動作しています。

# 2.ホバーアニメーション(アンダーライン)
次はサブメニューのアニメーションを追加していきます。今度はホバー時にアンダーラインが表示されるアニメーションです。以下の例のサブメニュー部分を先ほどと同じようにホバーしてみてください。スマホタブレットの方はタッチしてみてください。
<p class="codepen" data-height="300" data-default-tab="result" data-slug-hash="LYOBmra" data-user="charme0525" style="height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;">
  <span>See the Pen <a href="https://codepen.io/charme0525/pen/LYOBmra">
  アンダーラインホバー</a> by Charme (<a href="https://codepen.io/charme0525">@charme0525</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://cpwebassets.codepen.io/assets/embed/ei.js"></script>
ホバーするとアンダーラインが左から右に現れ、ホバーを外すと右に消えていったかと思います。このアンダーラインホバーアニメーションでは他にも下から表示される場合や右から左に現れるといったようにさまざまな方向からの表示をすることができます。これもCSSのみで実装できるので、CSSのコメントアウトで示した部分を利用してみてください。

# 3.固定ヘッダーのサイズ縮小アニメーション
今度はヘッダーを固定表示した際のアニメーションです。ヘッダーを固定表示するとページ内のどの部分でもメニューを選択することができて大変便利なのですが、そのままのサイズで固定されると画面の邪魔になってしまいます。そこでページをスクロールした際にヘッダーの高さが小さくなって固定表示するというアニメーションを紹介します。実際に下の結果をスクロールしてみてください。
<p class="codepen" data-height="300" data-default-tab="result" data-slug-hash="RwjBgBe" data-user="charme0525" style="height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;">
  <span>See the Pen <a href="https://codepen.io/charme0525/pen/RwjBgBe">
  Untitled</a> by Charme (<a href="https://codepen.io/charme0525">@charme0525</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://cpwebassets.codepen.io/assets/embed/ei.js"></script>

このヘッダーサイズを変更するアニメーションではスクロール量を検知する必要があります。そのため、JavaScriptコードが必要となってくるのですが、jQueryを用いて簡単に実装できます。上の例でもjQueryで記述しています。
ヘッダーサイズを縮小する際にヘッダー内の表示方法を変更しないとメニュー部分がヘッダーからはみ出してしまったり不恰好になってしまうので、スクロールされるとサイズ変更とともにflexboxを使ってページタイトルとメニュー部分を配置し直しています。
jQueryのコードを簡単に解説すると<code>var scrollPos</code>に現在のスクロール量を入れ、その値が100pxより大きくなると<code>headerクラス</code>に<code>header-animationクラス</code>を追加します。スクロール量が100px以下だと<code>header-animationクラス</code>を削除します。
さらに、<code>header-animationクラス</code>追加時の動作をCSSで記述しています。

# 4.ハンバーガーメニューを使おう
まずハンバーガーメニューってなに？と思われたかもしれませんが、下の例に見覚えのある３本線のメニューアイコンがあるかと思います。それをクリック・タッチしてみてください。
<p class="codepen" data-height="300" data-default-tab="result" data-slug-hash="RwjBBNj" data-user="charme0525" style="height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;">
  <span>See the Pen <a href="https://codepen.io/charme0525/pen/RwjBBNj">
  ハンバーガー</a> by Charme (<a href="https://codepen.io/charme0525">@charme0525</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://cpwebassets.codepen.io/assets/embed/ei.js"></script>

ハンバーガーメニューを押すとサブメニューが表示されましたね。もう一度押すと、元に戻ります。
これはスマホ・タブレットなどのディスプレイが狭いデバイスでよく見るメニュー表示方法で、必要なときにメニューボタンをタップしてメニューを出すようにすることでメイン部分を広く見せることができます。
モバイル向けのサイトを作る際には必ずと言っていいほど使用されるので、ぜひ覚えておきましょう＿φ(￣ー￣ )

# 5.まとめ
今回は簡単なアニメーションを実際のホームページに組み込んだ場合の紹介となりました。アニメーションの実装方法はコピペで大丈夫です。数行程度で書けるのでコピペしてるうちに慣れていくと思います。
CSS・JavaScriptのアニメーションについての詳細な説明は別記事にて作成予定ですので、作成次第リンクを貼ります。
最後まで見ていただきありがとうございました。