DEVELOPER
CSSアニメーションの書き方|keyframes・イージング・終了後の状態
2026-07-28 公開
CSSアニメーションは、@keyframesで途中の見た目を定義し、animationプロパティで再生時間や回数を指定します。本記事では、コピーして試せる最小構成から、終了後の状態、イージング、動きに配慮した実装までを順番に整理します。
まず動かすための最小コード
次の例では、要素を少し下から表示しながら不透明にします。キーフレーム名のfade-upは、利用側のanimationにも同じ名前を書く必要があります。
.notice {
animation: 600ms ease-out 0s 1 normal both fade-up;
}
@keyframes fade-up {
from {
opacity: 0;
transform: translateY(16px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
fromは0%、toは100%と同じ意味です。途中の状態が必要なら、40%や75%のようなキーフレームを追加できます。
animationの指定を左から読む
animationは複数プロパティの一括指定です。時間の値が2つある場合、最初が再生時間、次が開始までの遅延です。名前と他の値の判別を明確にするため、キーフレーム名は最後に置くと読みやすくなります。
animation: 800ms ease-in-out 150ms 2 alternate both card-pop;
| 値 | 例 | 役割 |
|---|---|---|
| 再生時間 | 800ms | 1回のアニメーションにかかる時間 |
| イージング | ease-in-out | 進行速度の変化 |
| 遅延 | 150ms | 開始まで待つ時間 |
| 再生回数 | 2 / infinite | 繰り返す回数 |
| 方向 | alternate | 往復や逆再生の方法 |
| 終了前後 | both | 開始前・終了後にキーフレームのスタイルを適用するか |
| 名前 | card-pop | 利用する@keyframesの名前 |
終了後の見た目を残すには
初期値のanimation-fill-mode: noneでは、再生後に通常のCSSへ戻ります。終了時のキーフレームを適用し続けたい場合はforwards、開始前と終了後の両方へ反映したい場合はbothを使います。
forwardsは要素の通常スタイルを書き換える機能ではありません。アニメーション効果として終了時の値を保持します。確定後の状態をアプリの状態として扱う場合は、クラスの付け替えなども検討してください。
イージングの選び方
linear:一定速度。回転や進捗表示に向くease-out:速く始まり、ゆっくり止まる。要素の登場に使いやすいease-in:ゆっくり始まり、加速する。画面外へ消える動きに使いやすいease-in-out:開始と終了が穏やか。往復する動きに使いやすいcubic-bezier(...):加速カーブを細かく調整するsteps(...):連続変化ではなく段階的に切り替える
見た目だけで決めにくい場合は、実際の要素をプレビューしながら比較するのが確実です。
滑らかさとアクセシビリティ
位置や大きさの演出では、可能ならtop、left、widthなどではなく、transformとopacityを中心に組み立てます。また、動きを減らす設定を選んでいる利用者向けにprefers-reduced-motionを用意します。
@media (prefers-reduced-motion: reduce) {
.notice {
animation: none;
}
}
重要な情報をアニメーションだけで伝えず、一時停止できない長い動きや激しい点滅も避けてください。
動かないときの確認項目
animation-durationが省略され、初期値の0sになっていないかanimationと@keyframesの名前が一致しているか- 後から指定した
animationで、先の個別指定を上書きしていないか - 同じプロパティを複数のアニメーションで同時に変更していないか
- 終了後に戻る動作を不具合と誤認していないか。必要なら
forwardsかbothを確認する
設定を画面で比較してCSSを生成
再生時間、回数、方向、fill-mode、イージングを選び、プレビューしながらanimationと@keyframesの雛形を作れます。