
CSS3 アニメーションを使ったWebサイトが増えてきました。サイトにちょっとしたアニメーションを付けるだけで、目を引くWebサイトになります。
今回は、SassとBourbonを使ってCSS3 アニメーションを作りたいと思います。
SassとBourbonを使うと、簡単にCSS3のアニメーションを作ることができるんです!
例えば、opacityを0から1にするアニメーションを1秒で実行するアニメーションを作りたいと思います。
Sassを使わず、CSSのアニメーションを記述する場合は下記の通りです。
.fadeIn {
-webkit-animation-name: fadeIn;
animation-name: fadeIn;
-webkit-animation-duration: 1s;
animation-duration: 1s;
-webkit-animation-iteration-count: 1;
animation-iteration-count: 1;
}
@-webkit-keyframes fadeIn {
0% {
opacity: 0;
}
100% {
opacity: 1;
}
}
@keyframes fadeIn {
0% {
opacity: 0;
}
100% {
opacity: 1;
}
}
Sassを使わずCSSのみでアニメーションを記述すると、アニメーションの名前や時間、回数を指定する必要があります。ベンダープレフィックスの記述も考えると、簡単なアニメーションを実装するためにこれだけのCSSを書くのは億劫です。
さらに、1パターンだけでなく、何通りものアニメーションを作るとなると、都度、このコードを書くのは時間がかかる作業になります。
そこで使うのは、Sass(scss)とBourbonというmixin集です。
Bourbonは、便利なmixinが詰まったライブラリ。最近ではCompassよりBourbonを利用してSassを書くことが多くなりました。導入もしやすく、Compassと違ってmixinをimportするだけなのでコンパイルも速いです。
positionをまとめて指定したり、グラデーションを指定したりするmixinが豊富に揃ってます。
Bourbonは、導入方法も簡単です。
Bourbonのmixin集をダウンロードして、Sassにimportするだけ。
導入方法やmixinの詳細については、公式ページに詳細が載ってるので、詳しく知りたい方はこちらを見てみてください。
先程も書きましたが、BourbonにはCSS3のアニメーションを扱うためのmixinが色々と用意されています。Bourbonのmixinを利用すると、ベンダープレフィックスを補完したCSSコードをコンパイルしてくれます。
今回、アニメーションに利用するmixinはこちら!
animationプロパティを使って、キーフレームアニメーションの設定ができます。animationプロパティを利用してアニメーションを行うためには、プロパティとは別にキーフレームを作成する必要があります。
キーフレーム名を指定します。キーフレームでアニメーションを指定する場合は、この指定が必要です。
アニメーションの再生時間を指定します。
アニメーションを繰り返す回数を指定することができます。
アニメーションのディレイ(再生開始時間を遅らせる)を指定します。
イージングを指定することができます。Bourbonにも豊富に用意されてるので、これを利用すると便利。
アニメーション中と再生後の表示の指定をすることができます。「web帳」というブログの記事がとても分かりやすく、参考になるかと思います。
キーフレームアニメーションの設定を行います。
Flashのタイムラインアニメーションと似たようなイメージでアニメーションの指定ができます。
@include keyframes(アニメーションの名前) {
0% {
opacity: 0;
}
100% {
opacity: 1:
}
}
Bourbonのmixinを利用して、アニメーションの指定をまとめるmixinを作りました。
まずは以下のmixinをSassに書きます。
Bourbonがimportされていないとエラーが出ますのでご注意を。
// アニメーションをセットするためのmixin
@mixin setAnimation($name: fadeIn, $duration: 1s, $delay: 0s, $easing: $ease-in-quad, $count: infinite, $mode: none) {
@include animation-timing-function($easing);
@include animation-duration($duration);
@include animation-iteration-count($count);
@include animation-delay($delay);
@include animation-name($name);
@include animation-fill-mode($mode);
}
// fadeInのキーフレーム
@include keyframes(fadeIn) {
0% {
opacity: 0;
}
100% {
opacity: 1;
}
}
// fadeInのアニメーションをセット
.fadeIn {
@include setAnimation($name: fadeIn, $duration: 1s, $count: 1);
}
このサンプルにある引数を説明しましょう。
アニメーションの名前を指定。指定がなければ、fadeInのアニメーションを行います。
アニメーションの再生時間を設定。指定が無ければ、再生時間が1秒のアニメーションを行います。
アニメーションの再生開始時間を指定します。指定が無ければ、ディレイなしでアニメーションが実行されます。
イージングを指定します。指定が無ければ、Bourbonのイージングの$ease-in-quadを利用したアニメーションを行います。
アニメーションを何回実行するかを指定します。指定が無ければ、1度だけアニメーションを行います。
アニメーション後の表示の指定をすることが出来ます。指定が無ければ、アニメーション前の状態に戻ります。
それでは、setAnimationのmixinを利用して、アニメーションをセットしてみます。
プロパティの指定は次の通り。
まずは、keyframesを指定します。
@include keyframes(fadeOut) {
0% { opacity: 1; }
100% { opacity: 0; }
}
次に、setAnimationのmixinにプロパティを指定して、投げます。
.fadeOut {
@include setAnimation($name: fadeOut, $duration: 1s, $delay: 2s, $count: 1);
}
キーフレームアニメーションを用意すれば、mixinに投げるだけで簡単にCSS3のアニメーションを作ることができます。自分のオリジナルのキーフレームアニメーションを作って、アニメーションを実行してみましょう!
何個かアニメーションのサンプルを用意してみました。
@include keyframes(rotateR) {
0% {
@include transform(rotate(-360deg));
}
100% {
@include transform(rotate(0deg));
}
}
.rotateR {
@include setAnimation($name: rotateR, $duration: 1s, $easing: linear);
}
@include keyframes(rotate) {
0% {
@include transform(rotate(-360deg));
}
60% {
@include transform(rotate(360deg));
}
100% {
@include transform(rotate(360deg));
}
}
.rotate {
@include setAnimation($name: rotate, $duration: 1s, $easing: linear, $count: infinite);
}
@include keyframes(fadeOut) {
0% {
opacity: 1;
}
100% {
opacity: 0;
}
}
@include keyframes(rotateR) {
0% {
@include transform(rotate(-360deg));
}
100% {
@include transform(rotate(0deg));
}
}
.rotateFadeOut {
$animationMix: rotateR, fadeOut;
@include setAnimation($name: $animationMix, $duration: 2s, $easing: linear, $count: infinite);
}
これらのサンプルは以下のURLに設置しています。
何かの参考になれば幸いです。
BourbonとSassを利用するとCSS3 アニメーションを簡単に実装することができます。Sassのfor文など使うことによって、同じアニメーションでもパターンが違うものを簡単に作れる!
CSS3 アニメーションは、作っていて楽しいですね。みなさんもお気に入りのアニメーションを作ってみてください!