などの疑問や悩みを解決してまいります。
JavascriptやjQueryでアニメーションを実装することが当たり前でしたが、今ではCSSだけでアニメーションが実装できるようになってきました。
今回はCSSでアニメーションを実装するための@keyframes
とanimation
プロパティについて解説していきます。
本記事の目次
@keyframesとは
まず@keyframes
とは何か説明していきます。
@keyframes
とはアニメーションの一連の動きを制御する「アットルール」と呼ばれるものです。
@keyframes
はどのような書き方をするか見てみましょう。
@keyframes animation {
from {
transform: scale(0);
}
to {
transform: scale(1);
}
}
@keyframes
はアニメーションの動きをfrom
(0%)~to
(100%)で表すことができます。
上記の「from
」は0%、アニメーションの開始を意味します。
また「to
」は100%、アニメーションの終わりを意味します。
そして「from
」の入れ子にtransform: scale(0);
が指定しています。
scale() - CSS: カスケーディングスタイルシート | MDN
transform: scale(0);
は要素のサイズを示すもので、scale()
関数の引数には「0」が指定されているので、アニメーションの開始時には要素の大きさは0ということになります。
「to
」の入れ子にtransform: scale(1);
が指定しています。
つまり、アニメーションが終わるときには要素は元サイズにするという指定がされています。
これを実行すると要素のサイズを拡大させるアニメーションが開始します。
どのような動きになるかをanimation
プロパティも指定しながら実際に見てみましょう。
@keyframesとanimationプロパティを使ったアニメーション作成
それでは@keyframes
を使ってアニメーションを実装していくのですが、@keyframes
だけではアニメーションを実装することはできません。
アニメーションに関するanimation
プロパティも同時に指定していくことでアニメーションを作成することができます。
そのanimation
プロパティを実際に@keyframes
と併用して解説していきます。
まずは以下のコードを用意しました。
See the Pen @keyframeについて by koutarou mori (@koutarou-mori) on CodePen.
今はまだピンクの円形の要素なだけですが、ここにanimation
プロパティを追加していき様々な動きを確認しつつanimation
プロパティをマスターしていきましょう。
animation-nameプロパティ
@keyframes
を使用するには、まず使用するアニメーションの名前を決めて、その名前をanimation-name
プロパティの値に指定して結びつける必要があります。
animation-name
プロパティをアニメーションさせたいセレクタに指定します。
今回はcircle
クラスにアニメーションを設定したいので、circle
クラスにanimation-name
プロパティを指定します。
今回はわかりやすく「animation
」としました。
そしてアニメーションさせたい内容の@keyframes
と結び付けます。
@keyframes
へのanimetion-name
プロパティの設定方法は簡単で、@keyframes
の記述の後にanimetion-name
プロパティに指定した名前を記述するだけで簡単に結びつけることができます。
See the Pen @keyframeについて by koutarou mori (@koutarou-mori) on CodePen.
当然ですが結び付けただけでまだアニメーションの動きの指定ができていないので、次に実際に動かしてみましょう。
animation-durationプロパティ
animation-duration
プロパティはアニメーションが開始してから終了するまでの時間を指定するプロパティです。
時間を指定する際の単位は以下の通りです。
ポイント
〇 「s」は秒単位を示し、1sとすると1秒ということになる
〇 「ms」はミリ秒単位を示し、1000msで1秒となる(0.5sだと500msと同じになり0.5秒ということになる)
今回は円形を3秒間かけてアニメーション指定していきたいと思います。
See the Pen animetion-duration by koutarou mori (@koutarou-mori) on CodePen.
このように@keyframes
で設定したアニメーションの動きを3秒間かけて実行することができました。
animation-delayプロパティ
animation-delay
プロパティはアニメーションの開始時間を指定するプロパティです。
指定した時間分アニメーションの開始を遅らせて実行することができます。
今回はアニメーションの開始を3秒間遅らせて、逆に円形を縮小させるアニメーションを実行したいと思います。
See the Pen animation-delay by koutarou mori (@koutarou-mori) on CodePen.
このようにアニメーションの開始を3秒送らせて円形の縮小アニメーションができました。
しかし、縮小して見えなくなった円形の要素がアニメーション終了後に元に戻ります。
これだと少し違和感がありますので、アニメーション終了後の制御について解説していきます。
animation-fill-modeプロパティ
animation-fill-mode
プロパティはアニメーションの開始前と終了後の要素の状態をどうするか指定するプロパティです。
指定できる値には以下のものがあります。
値 | 効果 |
---|---|
forwards | アニメーションが終了する時にその状態のCSSを適用 |
backwards | アニメーションが終了する時にアニメーションする前のCSSを適用 |
both | forwardsとbackwardsの両方が適応 |
none(初期値) | アニメーション終了時にCSSを適用しない |
初期値はnone
なので、CSSはそのまま適用されず元に戻ってしまいます。
なのでアニメーションが修了した後もCSSを反映させたままにしたいので、animation-fill-mode: forwards;
を指定します。
See the Pen animation-fill-mode by koutarou mori (@koutarou-mori) on CodePen.
このようにアニメーションが終了した後も、縮小されたままを維持していますね。
animation-iteration-countプロパティ
animation-iteration-count
プロパティはアニメーションを繰り返す回数を指定することができます。
指定方法は以下の通りです。
値 | 効果 |
---|---|
infinite | 無限に繰り返す |
数値指定(初期値は「1」) | 指定した数値分繰り返す |
今回はinfinite
を指定して無限に繰り返す動きを実装したいと思います。
See the Pen animation-iteration-count by koutarou mori (@koutarou-mori) on CodePen.
このように繰り返しアニメーションを実行させることができました。
animation-directionプロパティ
先程@keyframes
の値を逆にして拡大から縮小のアニメーションを作成したのですが、animation-direction
プロパティを使用して再生方向を指定することができます。
値 | 効果 |
---|---|
reverse | アニメーションの終了時(100%)から開始時(0%)に向かって逆方向に再生 |
alternate | 順方向と逆方向を交互に再生。行って戻るようなイメージ |
alternate-reverse | 逆方向から始まり、順方向と逆方向を交互に再生 |
normal(初期値) | アニメーション開始時(0%)から終了(100%)に向かって順方向に再生 |
このプロパティを使用して、元に戻してみましょう。
See the Pen animation-direction by koutarou mori (@koutarou-mori) on CodePen.
このように拡大 ⇒ 縮小から縮小 ⇒ 拡大に変更することができました。
animation-timing-functionプロパティ
animation-timing-function
プロパティを使用することで、アニメーション途中の加速度を変更することができます。
指定できる値は以下の通りです。
値 | 効果 |
---|---|
linear | 一定のスピードで変化 |
ease(初期値) | 開始時と終了時をゆっくり変化 |
ease-in | 最初はゆっくりで、だんだん速く |
ease-out | 最初は速く変化し、だんだんゆっくり変化 |
ease-in-out | 「ease」よりも開始時と終了時をさらにゆっくり変化 |
step-start | 開始時に最後の段階へ一気に変化 |
step-end | 終了時に最後の段階へ一気に変化 |
今回はease-in
を使用して円形の要素の拡大を開始時は速くして、だんだんスピードを緩やかにしていきたいと思います。
See the Pen animation-timing-function by koutarou mori (@koutarou-mori) on CodePen.
このようにアニメーションの加速度を変更することができました。
animation-play-stateプロパティ
animation-play-state
プロパティはアニメーションの再生と停止を適用させることができるプロパティです。
値 | 効果 |
---|---|
running | アニメーションを再生 |
paused | アニメーションを停止 |
今回は再生ボタンと停止ボタンを用意しました。
jQueryを使用して、再生ボタンをクリックしたら円形要素のcircle
クラスに再生用のクラスrunクラスを付与、停止ボタンをクリックすると停止用のpaused
クラスを付与するようにしています。
これでアニメーションの再生、停止を制御できるようになりました。
See the Pen animation-play-state by koutarou mori (@koutarou-mori) on CodePen.
いかがでしょうか。
animation
プロパティを使用したら簡単にアニメーションの再生と停止を制御することが可能になります。
@keyframesを使用していろいろな動きをアニメーションで表現してみる
いままでは@keyframes
内のルールを「from
」と「to
」のみでアニメーションを設定していましたが、さらに細かく、複雑にしてみましょう。
アニメーションの過程を%にして設定していきます。
以下のように@keyframes
のルールを設定することもできます。
See the Pen @keyframe色々 by koutarou mori (@koutarou-mori) on CodePen.
今回はアニメーションを20%毎にCSSを指定して、動きに変化を加えています。
指定しているCSSの説明
border-radius
プロパティは要素の角を丸くするプロパティです。
border-radius - CSS: カスケーディングスタイルシート | MDN
border-radius
プロパティを20%ごとに適当な値を入れることで、角が丸くなったり、角ばったりなるようにしています。
background-color
プロパティは要素の背景色を指定するプロパティです。
background-color - CSS: カスケーディングスタイルシート | MDN
background-color
プロパティを20%ごとに違う色を指定することで、アニメーションの過程で指定した色に変化するようにできます。
transform
プロパティのscale()
関数に加えてrotate()
関数を追加しました。
rotate()
関数は要素を回転させることができる関数です。
rotate() - CSS: カスケーディングスタイルシート | MDN
rotate()関数の引数にdegという単位を用いて、正の数値と負の数値を20%ごとに指定することで要素を左に回転したり、右に回転させたりすることができます。
そこにscale()
関数にも適当な数値を入れることで、大きくなったり小さくなったりさせることができます。
@keyframeとanimationプロパティのまとめ
ここまでお疲れさまでした。
今回の記事の重要なポイントのみまとめました。
ポイント
@keyframes
とはアニメーションの一連の動きを制御する「アットルール」と呼ばれるもの@keyframes
は「from」「to」もしくは%を指定してアニメーションの内容を決めることができるanimation-name
プロパティはアニメーションを定義するための名称を決めるプロパティanimation-duration
プロパティはアニメーションが開始してから終了するまでの時間を指定するプロパティanimation-delay
プロパティはアニメーションの開始時間を指定するプロパティanimation-fill-mode
プロパティはアニメーションの開始前と終了後の要素の状態をどうするか指定するプロパティanimation-iteration-count
プロパティはアニメーションを繰り返す回数を指定するプロパティanimation-direction
プロパティは再生方向を指定するプロパティanimation-timing-function
プロパティはアニメーション途中の加速度を変更するプロパティanimation-play-state
プロパティはアニメーションの再生と停止を適用させるプロパティ
@keyframesとanimationプロパティ、そしてCSSを駆使すると様々なアニメーションを作成することができますので、いろいろ試してみてください。
試しながらコードを書いているうちに覚えていきますよ!