1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

cssのanimationのstepで少し躓いたのでまとめておく

Last updated at Posted at 2022-06-07

意外と複雑な仕組みだったので備忘録

.active {
    animation: blink 1.0s steps(2) infinite
}
@keyframes blink {
    0% {background: white;}
    100% {background: black;} 
}

例えばこのようなものを考えると,背景は黒にはならない。
ここでのstepsの2は2分割を表しているが,この2分割は0%-50%と50%-100%の区間で分割することを表している。
そして,この区間はそれぞれ0%,50%の値を用いる。
これはstepsの第二引数のデフォルトがendだからである。
(すなわち第二引数をstartにすると50%と100%の値を用いることになる)

話がずれたがどうすれば良いかというと,50%を用いるならここにblackを持ってくれば良い。

.active {
    animation: blink 1.0s steps(2) infinite
}
@keyframes blink {
    0% {background: white;}
    50% {background: black;} 
}

しかしこれは動かない。正確には動くけどちょっと違う。コマ送りが多い。
なぜこんなことになるかというと,どうやらキーフレームを置く場所で分割しようとするみたいだ。
すなわち50%に置いたことで0-50,50-100をそれぞれ2分割しようとする。つまり
0,25,50,75の値が繰り返されることになる。これは望んだ動作ではない。
2分割しなければ良いので,stepsを1に変えれば良い。すなわち

.active {
    animation: blink 1.0s steps(1) infinite
}
@keyframes blink {
    0% {background: white;}
    50% {background: black;} 
}

で良いことになる。

(ドキュメントにstepsの初期値が書いていないのはなぜ)

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?