CSSアニメーションまとめ @key-frameとanimationプロパティ

<!-- wp:paragraph -->
<p>最近、初めての案件をいただくことになり、</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>その１回目のデザイン案をいただきました。そのときに、トップページにアニメーション指定があったので、あらかじめ、実装してみたので、CSSアニメーションについてまとめます。</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2>基本：@keyframesでアニメーションの流れを、animationプロパティで動き方を指定する方法</h2>
<!-- /wp:heading -->

<!-- wp:heading {"level":3} -->
<h3>@keyframes</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>まずは、アニメーションの動きの設定。要素の状態を記述していきます。たとえば、文字サイズをだんだん大きくするものであれば、font-sizeプロパティの値を変化させます。</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>下の例では、h1要素に対してアニメーションを指定しています。</p>
<!-- /wp:paragraph -->

<!-- wp:html -->
<p class="codepen" data-height="300" data-default-tab="html,result" data-slug-hash="OJmRwJo" data-user="sonho463" 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/sonho463/pen/OJmRwJo">
  </a> by Son Hiroki Hong-su (<a href="https://codepen.io/sonho463">@sonho463</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async="" src="https://cpwebassets.codepen.io/assets/embed/ei.js"></script>

<!-- wp:paragraph -->
<p>@keyframesでは<br>・アニメーションの名前を設定<br>・0%から１００％の間でプロパティの値変化を記述<br>フォントサイズ36px　→　最後に64pxを指定しました。<br>0%のときの値は省略できます。</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>ここにいろいろまとめて記述もできます。<br>例えば、ここで、opacityなども合わせて記述すると、文字が大きくなりながら、透明度も変化させるといったことがかんたんにできます。</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3>animationプロパティ</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>次に、アニメーションを付与する要素に、animationプロパティを追加していきます。</p>
<!-- /wp:paragraph -->

<!-- wp:code -->
<pre class="wp-block-code"><code>h1{
animation-name: bigger;
animetion-duration: 3s;
animation-fill-mode: forwards
}</code></pre>
<!-- /wp:code -->

<!-- wp:paragraph -->
<p>animation関連のプロパティは全部で８個ありました。今回はそのうち３つを指定しています。</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":4} -->
<h4>animation-name</h4>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>@keyframesで設定した名前。どのアニメーションを付与するか。これだけでは、まだ動きません。</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":4} -->
<h4>animation-duration </h4>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>アニメーションの経過時間を設定。sまたはmsで指定します。</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":4} -->
<h4>animation-fill-mode</h4>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>アニメーションが終わったときの挙動を設定します。<br>none（デフォルト） アニメーションが終わったら最初の状態　<br>forwards  アニメーションの最後の状態を保持<br>backwards　アニメーションの最初の状態にもどる<br>both　両方・やってみるとforwardsと同じ挙動でした。</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>アニメーションが終わって最初の状態か、最後の状態かというところしか必要ないようにしか思えていません。だけど、これからいろいろ複雑なアニメーションになってくると、４つの値を使い分けないと行けないときがくるのだろうと思っています。</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2>やってみて</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>１．対応していないプロパティ</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>例えば今回はbackground-clip:text;が当てられた要素にアニメーションを付与して、アニメーションが終わったら、background-clip: unset;にしようとしたかったので、１００％のところにunsetを設定しました。すると、unsetが先に実行されてしまいました。</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>いろいろ考えて、最終的には、animationではなく、JavaScriptとtransitionを組み合わせて、そこに、さらに、setTimeoutを使ってゴリゴリに思い通りの挙動に持っていきました。</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>なにかもっとスマートな方法がありそうな気がしています。ご指摘ください。</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>２．複数のアニメーションのタイミング</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>複数のアニメーションを同時に付与できるのですが、このタイミングの制御がとてもむずかしいです。animation-delayプロパティを使って、タイミング制御しようとしたのですが、あまりうまく行きませんでした。今後の研究課題です。</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2>まとめ</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>もっともっと、animationをたくさん使っていきたいなと思います。</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>アニメーションのもりすぎは良くないですが、自分の事業用サイトなど作るときには、１つのアピールになると思うので、いろいろかっこいいアニメーションを眺めて、自分で再現するなど、今後は練習を重ねていきたいと思います。</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>参考URL</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><a href="https://developer.mozilla.org/ja/docs/Web/CSS/animation">MDN - animation</a><br><a href="https://qiita.com/7968/items/1d999354e00db53bcbd8">【CSS3】@keyframes と animation 関連のまとめ</a></p>
<!-- /wp:paragraph -->