【CSS】アニメーション
アニメーションとは
アニメーションとは、プロパティの変化をどのタイミングで、どのくらいの速度で、どのように変化させるかを決めます。
以下はホバーした時にプロパティが変化する例です。
.elm {
background: red;
width: 100px;
}
.elm:hover {
background: blue;
width: 200px;
}
アニメーションなし
アニメーションあり
アニメーション用のプロパティにはtransition
とanimation
の 2 種類あります。
基本的なアニメーションは、JavaScript は使わずとも、この 2 つのプロパティで設定することができます。
transition
transition
は簡易的なアニメーションの設定ができます。
例えばボタンがホバーされたときの色の変化などに使用されます。
transition
では以下のプロパティを組み合わせてアニメーションを設定します。
transition-property
アニメーションを適用するプロパティを指定します。
例えば最初のホバーのアニメーションを背景色(background
)のみ適用します。
.elm {
background: red;
width: 100px;
transition-property: background;
}
.elm:hover {
background: blue;
width: 200px;
}
すべてのプロパティに適用したい場合はtransition-property: all
と指定します。
transition-duration
プロパティの変化にかかる時間を指定します。
.elm {
background: red;
width: 100px;
transition-property: all;
transition-duration: 1s;
}
.elm:hover {
background: blue;
width: 200px;
}
0.5s
1s
2s
transition-timing-function
プロパティが時間と共にどのように変化するかを指定します。
プロパティ値には、滑らかに変化するcubic-bezier
と段階的に変化するsteps
があります。
cubic-bezier
cubic-bezier
は、プロパティがどのような速さで変化するかを、4 つの数値を用いたベジェ曲線を基に表現します。
ベジェ曲線についてはこちらを参考にしてください。
cubic-bezier
では、linear
、ease
、ease-out
、ease-in-out
、ease-in
とあらかじめ数値が決められたものを使用することができます。
それぞれの動きについては以下のプレビューを参考にしてください。
.elm {
background: red;
width: 100px;
transition-property: all;
transition-duration: 1s;
transition-timing-function: ease;
}
.elm:hover {
background: blue;
width: 200px;
}
cubic-bezier(0.25, 0.5, 0.75, 1.0)
linear | cubic-bezier(0.0, 0.0, 1.0, 1.0)
ease | cubic-bezier(0.25, 0.1, 0.25, 1.0)
ease-out | cubic-bezier(0.0, 0.0, 0.58, 1.0)
ease-in-out | cubic-bezier(0.42, 0.0, 0.58, 1.0)
ease-in | cubic-bezier(0.42, 0.0, 1.0, 1.0)
steps
steps
は指定した回数で段階的にプロパティを変化させます。
また開始と終了の状態を省略するか(ジャンプ)を指定します。
ジャンプには以下のものがあります。 動きについてはプレビューを参考にしてください。
ジャンプ | 開始 | 終了 |
---|---|---|
jump-none | - | - |
jump-start | 省略 | - |
jump-end | - | 省略 |
jump-both | 省略 | 省略 |
.elm {
background: red;
width: 100px;
transition-property: all;
transition-duration: 1s;
transition-timing-function: steps(5, jump-none);
}
.elm:hover {
background: blue;
width: 200px;
}
steps(5, jump-none)
steps(5, jump-start)
steps(5, jump-end)
steps(5, jump-both)
step-start | steps(1, jump-start)
step-end | steps(1, jump-end)
transition-delay
プロパティの変化が開始するまでの待ち時間を指定します。
.elm {
background: red;
width: 100px;
transition-property: all;
transition-duration: 1s;
transition-timing-function: ease;
transition-delay: 1s;
}
.elm:hover {
background: blue;
width: 200px;
}
delay: なし
delay: 1s
一括指定
上記 4 つのプロパティはtransition
プロパティでまとめて指定することができます。
transition: <property> <duration> <timing-function> <delay>;
property
とduration
は必須で、その他は省略することができます。
animation
animation
プロパティは、transition
よりも詳細な状態の変化などを表現することができます。
keyframes
keyframes
は、アニメーションの段階によってどのようにプロパティが変化するかを定義します。
@keyframes キーフレーム名
として宣言し、段階は%
で表現します。
@keyframes animation1 {
0% {
background: red;
}
25% {
background: yellow
},
50% {
background: green;
}
75% {
background: blue;
}
100% {
background: red;
}
}
animation-name
使用するkeyframes
を指定します。
.elm {
animation-name: animation1;
}
animation-duration
transition-duration
と同じ説明のため割愛します。
.elm {
animation-name: animation1;
animation-duration: 4s;
}
animation-timing-function
transition-timing-function
と同じ説明のため割愛します。
.elm {
animation-name: animation1;
animation-duration: 4s;
animation-timing-function: ease;
}
animatino-delay
transition-delay
と同じ説明のため割愛します。
.elm {
animation-name: animation1;
animation-duration: 4s;
animation-timing-function: ease;
animation-delay: 1s;
}
animation-iteration-count
アニメーションを何回繰り返すかを指定します。
animation-iteration-count: 2
とすれば 2 回、animation-iteration-count: 1.5
とすれば 1 回半アニメーションが実行されます。
またinfinite
を指定することで永続的に実行することができます。
.elm {
animation-name: animation1;
animation-duration: 4s;
animation-timing-function: ease;
animation-delay: 1s;
animation-iteration-count: infinite;
}
animation-direction
アニメーションの再生開始時の方向と次回再生時の方向転換を指定します。 プロパティ値には以下のものがあります。
言葉ではわかりにくいと思うのでプレビューを参考にしてください。
プロパティ値 | 再生開始時の方向 | 次回再生時の方向転換 |
---|---|---|
normal | 順方向 | 転換なし |
reverse | 逆方向 | 転換なし |
alternate | 順方向 | 転換あり |
alternate-reverse | 逆方向 | 転換あり |
.elm {
animation-name: animation1;
animation-duration: 4s;
animation-iteration-count: infinite;
animation-direction: normal;
}
normal
reverse
alternate
alternate-reverse
animation-fill-mode
アニメーションのdelay
中と終了後に、アニメーションのスタイルを適用するかを指定します。
プロパティ値には以下のものがあります。
プロパティ値 | delay | 終了後 |
---|---|---|
none | - | - |
forwards | - | 適用する |
backwards | 適用する | - |
both | 適用する | 適用する |
.elm {
animation-name: animation1;
animation-duration: 4s;
animation-delay: 2s;
animation-iteration-count: 1;
animation-fill-mode: none;
}
none
forwards
backwards
both
animation-play-state
アニメーションの実行状態を指定します。
running
とすると実行中、paused
とすると停止中になります。
.elm {
animation-name: animation1;
animation-duration: 4s;
animation-play-state: running;
}
一括指定
上記のアニメーションプロパティは、animation
プロパティによってまとめて指定できます。
animation: <name> <duration> <timing-function> <delay> <iteration-count>
<direction> <fill-mode> <play-state>;
name
はどの位置で指定しても動作します。
最低限name
とduration
の指定が必要になります。