HTML と CSS だけで webページに雪を降らせます。
先に例をだして、あとで解説をします。
例1
See the Pen snow1 by okm-uv (@okm-uv) on CodePen.
例2
これだと寂しいので雪を増やしましょう
See the Pen snow2 by okm-uv (@okm-uv) on CodePen.
例3
斜め方向にも降らしましょう
See the Pen snow3 by okm-uv (@okm-uv) on CodePen.
解説
何をしているか、例1 を使って説明します。
例1 の HTML はとても単純ですね。class に指定されている snow で見た目を整えて、 fall1 で動かしています。
ここでは動きに関することを紹介したいので fall1 について説明します。
fall1 の定義はこちらです。
.fall1 {
animation: fall1 10s linear infinite;
}
animation
まず animation とありますね。
animation はいくつかのプロパティを一括指定できるものです。
ドキュメントはこちらです。
今回は 4つの要素を指定しているのですが、それぞれ順に @keyframes name, duration, timing-function, iteration-count です。
animation の 4つめは本来 delay なのですが、 delay として解釈できない値が指定されたときはスキップされます (スキップされたプロパティにはデフォルト値が使われます)。delay に指定できる値は 200ms や 1s のような秒数で、 infinite は指定できないのでスキップされています。その結果として、本来は5番目である iteration-count に infinite を指定できています。
@kayframes name
定義した @keyframes の名前です。今回は fall1 の部分です。
@keyframes fall1 {
0% {
top: -20%
}
100% {
top: 120%
}
}
アニメーション時間について 0% を開始・100% を終了としたときに、どの時間にどの位置にいるかを指定します。今回の定義だと 0% (アニメーション開始) のときに top: -20% (画面外) の位置にいて、 100% (アニメーション終了) のときに top: 120% (画面外) の位置にいるようにアニメーションを指定しています。
ドキュメントはこちらです
duration
アニメーションが開始から終了するまでの時間を秒単位で指定します。
ドキュメントはこちらです
timing-function
どのようにアニメーションが変化するかを指定します。
今回指定している linear だと等速で動きます。
他には ease や steps(2) などを指定できます。これは文章で説明するには限界があるので、実際に変えて確認してみるのがいいかと思います。
ドキュメントはこちらです