keyframesを使ってブログに雪を降らせる
ブログに季節感を
どんどんと寒くなってきて、ところによっては雪も降っているようですね。大阪では、まぁ雪は降りません。と、こんな話をする季節になってまいりました。冬ですね。
そこで、「ブログにも季節感を出そう」というわけで、今回はメインブログの方でCSSの@keyframes
を利用して雪を降らせました。もちろん、jQueryなどは一切使っておりません。CSSのみです。
keyframesとanimation
CSSで、ある要素に動きをつけるためには、transition
もしくはanimation
を使う2つの方法があります。
今回使用するanimation
はどのように動くかを指定でき、ペアとして使う@keyframe
ではどのような動きをするかを指定することができます。
記述方法
keyframes
は前に@
をつけます。
@keyframes [動きの名前]{ 0% { [プロパティ]: [値] } 100% { [プロパティ]: [値] } }
0%
は動きの始まりを意味し、100%
は動きの終わりを意味します。
また、50%
など、始まりと終わり以外にも指定することで、反復運動などの複雑な動きも実装することができます。
次にanimation
の記述方法です。
要素 { animation: [アニメーションに関するプロパティ] }
簡単に説明してしまいましたが、アニメーションのプロパティは8つあります。詳しくは以下の記事を
【CSS3】@keyframes と animation 関連のまとめ - Qiita
ちなみに、animation
や@keyframes
はCSS3から新しく追加されたプロパティであるため、一部ブラウザではベンダプレフィックスを付ける必要があります。
雪を降らせる
See the Pen SnowEffect by Puchutech (@puchutech) on CodePen.
最初にリストで10個の項目(以下、雪)を用意しておきます。雪の色を透過することにより、重なったときにいい感じになります。
雪にそれぞれ、アニメーションの長さanimation-duration
とアニメーションの遅延animation-delay
を設定し、10個の雪が全てバラバラに降ってくるようにしました。また、それぞれの雪の大きさもバラバラにしています。
keyframesはこんな感じ。
@keyframes "snow" { 0% { transform: translateY(0px); } 100% { transform: translateY(500px); } }
最初、雪は0の位置に配置され、0から100%になるまでにY軸方向(縦)に500px下がっていきます。 このとき、animationでは
.effect_snow{ animation: snow 30s linear infinite; }
と記述しており、一定の変化量にするためイージングのプロパティをlinear
、アニメーションをループさせるためにinfinite
を指定しています。
@keyframes中に使っているtransform
も一部ブラウザで対応していないため、ベンダプレフィックス(-webkit-
など)を付けています。
各ブラウザの対応状況
「animation」「@keyframe」
- 10.0
- 43.0
- 16.0
- 30.0
- 9.0
接頭語(ベンダープレフィックス)-webkit-
をつけることでChrome4.0~,Safari4.0~,Opera15.0~に対応させることが出来ます。
また、-moz-
をつけることでFirefox5.0~、-o-
をつけることでOpera12.0~に対応させることができます。
「transform」
- 10.0
- 36.0
- 16.0
- 30.0
- 9.0
接頭語(ベンダープレフィックス)-webkit-
をつけることでChrome4.0~,Safari4.0~,Opera15.0~に対応させることが出来ます。
また、-moz-
をつけることでFirefox5.0~、-o-
をつけることでOpera12.0~に対応させることができます。
あとがき
こんな風にCSSのみで要素をかなり自由に動かせると、webデザインの幅も広がりますね。