〽️何を扱っているのか。 〽️4つのサンプル。 〽️他のプロパティとの兼ね合い。 〽️複雑になってきた。
⬆︎CSSアニメーションについてのまとめページはこちら。
こんにちは、「ふ」です。
今回はCSSアニメーションのanimation-fill-modeについて紹介します。
早速ですがサンプルを示します。
playボタン⬆︎を押してみてください。
要素が左から右へ移動するCSSアニメーションが、1度だけ実行されます。アニメーション終了後は、開始前の状態(規定値)に戻ってしまいます。
※再度プレビューするときは、1度resetボタンを押してから再びplayを押してください。
ここにanimation-fill-modeの「forwards」を適用してみましょう。
■ CSS
animation-fill-mode:forwards;
「play」を押して実行すると、アニメーションが1回実行されたあと、終了時の状態がそのまま維持されます。
このようにanimation-fill-modeは、CSSアニメーションにおいて、キーフレーム開始前後の状態を指定するプロパティです。
どういった仕組みになっているのか。詳しくみていきましょう。
animation-fill-modeには、4つの値が用意されています。
① none(初期値。キーフレーム開始前と終了後、規定値を維持)
② forwards(キーフレーム終了後、最後に採用されたキーフレームを維持)
③ backwards(キーフレーム開始前、最初に採用されたキーフレームを維持)
④ both(②と③の両方の条件を満たす)
💧4つの値を理解するにあたって、下準備が必要です。
そもそも何をどうしているのか。
animation-fill-modeは、「キーフレーム開始前と終了後」に、どの状態を維持するかを指定します。
「アニメーションの前後」ではなくて、「キーフレームの前後」。
これは、どこを指しているのでしょうか?
次のようなCSSアニメーションを考えてみます。
既定値が背景色coral、キーフレーム0%は背景色がforestgreenに変わり、キーフレーム100%は背景色はそのままで右へと移動した状態です。
加えてここにanimation-delayを施します。「1秒」としましょう。
.sample { background-color:coral; animation:sample 2s 「「11s」」; } @keyframes sample { 0% { background-color:forestgreen; margin-left:0; } 100% { background-color:forestgreen; margin-left:80%; } }
このCSSアニメーションの流れはこの⬆︎ようになっています。
animation-delayを掛けているので、アニメーション自体が開始されてもキーフレームが開始されるまでに「待機時間」が発生しています。
animation-fill-modeが参照する「開始前」というのは、このdelayによる「待機時間」の部分を指します。つまり、「キーフレームが開始される前」ということですね。
animation-delayが発生している場合、CSSアニメーション自体の開始タイミングとは一致しません。
animation-fill-modeの参照する「終了後」は「キーフレームの完了後」を指します。これについてはCSSアニメーション自体の終了タイミングと常に一致します。
・キーフレームの開始前 ←アニメーションスタート時のanimation-delayが適用されている状態。
・キーフレームの終了後 ←アニメーション完了後に同じ。
指定できる「状態」は、先ほど示した「既定値、最初に採用されたキーフレーム、最後に採用されたキーフレーム」です。
キーフレームの開始前を「既定値にするかor最初のキーフレームにするか」また、キーフレームの終了後を「既定値に戻すor最後のキーフレームの状態にするか」、
それらの指定を行うのが、animation-fill-modeプロパティなのです。
animation-fill-modeの役割、お分かりいただけたでしょうか?
今度は実際のサンプルを通して、その動きを見ていきましょう。
#sample { 「「4/*既定値*/」」 background-color:coral; animation:sample 2s linear; } @keyframes sample{ bb「「4/*最初のキーフレーム*/」」 bb0% { background-color:forestgreeen; margin-left:0; } bb「「4/*最後のキーフレーム*/」」 bb100% { background-color:forestgreen; margin-left:80%; }
先程のCSSアニメーション。animation-delayを一旦外した状態で試していきます。
animation-fill-mode:「「1none」」;
初期値の「none」です。何も指定されない場合はこの値が採用されます。
キーフレーム開始前と開始後のいずれにも、「既定値」が採用さています。先程animation-delayの指定を外したので、「待機時間 = キーフレームの開始前」は存在しません。確認できるのはキーフレーム終了後の挙動だけです。
animation-fill-mode:「「1forwards」」;
「forwards」を指定すると、キーフレーム終了後には最後のキーフレームの内容が維持されます。先ほどと同じく見た目では確認できませんが、キーフレーム開始前は既定値が選択されています。
「CSSアニメーションで終わりの状態を維持する」ならこれですね。
扨(さて)ここで元のCSSアニメーションにanimation-delayを掛けてみます。
#sample { background-color:coral; animation:sample 2s linear 「「11s」」; }
delayを指定したことで、キーフレームが開始されるまでに「1s」の待機時間ができました。 これを初期値noneのままで実行してみましょう。
待機時間中、つまり「キーフレーム開始前」は既定値の「背景色:coral」の状態が採用されています。
「backwards」は、キーフレーム開始前に「最初のキーフレーム」を採用します。終了後は既定値のままです。
animation-fill-mode:「「1backwards」」;
先程の「none」におけるサンプルと比べてみてください。
アニメーションを実行すると先づ1sの待機時間に入りますが、そこでいきなり最初のキーフレーム「背景色:forestgreen」が採用されています。
animation-fill-mode:「「1both」」;
「both」は②のforwardsと③のbackwardsの両方の条件を満たします。
キーフレーム開始前は最初のキーフレームの内容、キーフレーム終了時は最後のキーフレームの内容が採用されます。
③のbackwardsや④のbothは、JavaScriptなどを使ってCSSアニメーションを発火させたときに効果を発揮します。
CSSアニメーション、発火のタイミングを制御する。
〽️ 好きなタイミングで発火/消火。
animation-fill-modeは、他のCSSアニメーションプロパティとの兼ね合いによって、結果が変わってきます。
前回の記事⬆︎で紹介したanimation-directionは、「キーフレームの方向」を変化させるプロパティでした。
そして今回のanimation-fill-modeは、「最初と最後のキーフレーム」を扱うのでしたね。
ではfill-modeが「forwards」で、directionに「reverse」を適用した場合。
キーフレームの方向が逆転するため、fill-modeで「終了後に採用されるキーフレーム」の対象は0%のほうと成増。
#sample { animation:sample 2s linear 「「1reverse forwards」」; }
元々の「100%のキーフレーム」からCSSアニメーションが開始され、終了後は0%のキーフレームの状態が維持されます。
さらに。
animation-directionの「alternate」は、キーフレームの方向を反転させて繰り返すものでした。
そうすると、CSSアニメーションの繰り返し回数(animation-iteration-count)によっても「終了後に採用されるキーフレーム」は変わってきます。
・ iteration-countが「2」であれば、最後のターンはキーフレームが逆転しているので、終了後は0%のキーフレームが採用されます。
#sample { animation:sample 2s linear 「「1alternate forwards 2」」; }
・ iteration-countが「3」などの奇数の場合、最後のターンは順方向。
したがって終了後に採用されるのは100%のキーフレーム。
#sample { animation:sample 2s linear 「「1alternate forwards 3」」; }
このようにanimation-fill-modeは、他のプロパティからの影響を大きく受けることに成増。
コーディングを進める中で、思い通りのCSSアニメーションにならない場合には、周りのプロパティ指定についてもチェックしてみてください。
最後までお読みくださり、ありがとうございます。
今回のanimation-fill-modeで、CSSアニメーションのプロパティは8つある中のの7つ目となりました。
知れば知るほど複雑になってきますね💧
フーノページのCSSアニメーション基本コーナーでは「入門者向け」とうたいながらも、実際はかなり深い内容まで掘り下げて紹介しています。従ってしっかりと内容を理解していただければ、「専門書レベルの知識を取得した」と言っていいでしょう。
残るプロパティは1つ、「animation-play-state」です。次回も頑張って学習していきましょう!
ではまた〜♫
swift、web、ガジェットなど。役立つ情報や観ていてたのしいページを書いていきたいと思います。