1. ステップ5~Web Fonts with CSS編その2
CSSアニメーションについて説明します。Font Awesome の公式で用意されたアニメーションクラスはクルクル回るアニメーションとカチカチ回るアニメーションだけですが、ステップ3で紹介した「 Font Awesome Animation 」では、Font Awesome アイコンにより一層の様々な動きを持たせることが可能です。まずは、Font Awesome Animation の詳細を説明する前にその準備として、CSSのアニメーションで使うプロパティを中心に説明していきます。
2.Font Awesome のスタイリング with CSS その2
2-1. アイコンを回転させるアニメーション with CSS
Font Awesome の公式で用意されているアニメーションクラスは、fa-spin クラスと fa-step クラスです。fa-spin クラスを追加するとアイコンを回転させることができます。fa-pulse クラスを追加すると8ステップで回転させることができます。
<div class="myfa-3x">
<i class="myfa-spin fas fa-fan"></i>
<i class="myfa-spin fas fa-compass"></i>
<i class="myfa-spin fas fa-car-crash"></i>
<i class="myfa-pulse fas fa-sync"></i>
<i class="myfa-pulse fas fa-spinner"></i>
</div>
.myfa-3x{font-size: 3.0em;}
.myfa-spin{
animation: myfa-spin 2s infinite linear;
}
.myfa-pulse{
animation: myfa-spin 1s infinite steps(8);
}
@keyframes myfa-spin{
0%{transform: rotate(0deg);}
100%{transform: rotate(360deg);}
}
3.CSSアニメーション入門 ~ アイコンを動かす
CSSのアニメーション機能には、①animation と②transition があります。ここでは上 2-1. のアイコンを回転させるクラスを教材にして、①animation の使い方を解説していきます。
3-1. CSSアニメーションの特徴
一言でいえば、CSSアニメーションの特徴は使い方が簡単ということでしょう。アニメーションのプログラミングは基本的に難しく、しかも労力の割には見た目がショボくなりがちなのですが、CSSアニメーションは文字に限らずアイコンや画像の扱い方にも優れていて見た目が派手なアニメーションを比較的簡単に作ることができます。
アニメーションは、たくさんの画像(フレーム)を次から次へと切り替えて動きを持たせるわけですが、CSSアニメーションの場合は、我々が自分で数個のフレームを用意して配置するだけで、その配置したフレーム間のフレームをCSSアニメーション側が自動的につくってくれます。この自分で用意するフレームをキーフレームと呼びます。このキーフレームを中心にCSSアニメーションは展開されます。
3-2. animation の構成
次の例を見ましょう。アニメーションを自作の myfa-spin クラスを呼んでいます。myfa-spin クラスでは、animation プロパティでキーフレームのリスト名 kfs を2秒間でアニメーションしなさいと指定しています。 kfs は、 @keyframes kfs と宣言して、アニメーションの中身、つまりキーフレームを設定しています。animation プロパティの設定とキーフレームの作成がCSSアニメーションで我々がやることのメインになります。
/* アニメーションのクラスを呼ぶ */
<i class="myfa-spin fas fa-car-crash"></i>
/* アニメーションのクラス */
.myfa-spin{
animation: kfs 2s;
}
/* キーフレームの設定 */
@keyframes kfs{
0%{transform: rotate(0deg);}
100%{transform: rotate(360deg);}
}
3-3. CSS keyframes
次の例は、2枚のキーフレームです。始まりのキーフレーム(0%)に「角度0度」、終わりキーフレーム (100%)に「角度360度」 を用意しているだけです。アニメーションが始まると2枚のキーフレーム間のフレームは、CSSアニメーションが作成してくれます。その自動的に作成されるフレームに対して、「カクカクにして」とか「最初なめらかに」とか「一定速度で」とかを animation プロパティで指定することができます。アニメーションの開始フレームは、(0%)フレームで、終了フレームは、(100%)フレームになります。( 0%~100% )間のフレームは自作または自動で作成することになります。
@keyframes kfs{
0%{transform: rotate(0deg);}
100%{transform: rotate(360deg);}
}
この例では、@keyframes でキーフレーム宣言、kfs はキーフレームリスト名(キーフレーム識別名)です。(0%)フレーム つまりアニメーションの開始フレームをキーフレームとして登録しています。1枚目のキーフレームは、transform の rotate(0deg)で 回転0度の画像ですね。同様に(100%)フレーム つまりアニメーション終了時に、2枚目のキーフレームとして回転360度の画像を登録しています。1回転するアニメーションにキーフレームを2枚だけ用意したことになります。回転0度と回転360度の間の角度、例えば回転10度とか回転120度とかの画像は、CSSアニメーションが自動で作ってくれます。キーフレーム数は何枚でもOKです。数を増やせばアニメーションに細かな動きを持たせることができるでしょう。
3-4. animation プロパティは8つのプロパティを一括指定
animation プロパティは、CSSアニメーションに関係する8つのプロパティを一括指定することができます。上例の回転アニメーションを例に、具体的に見ていきましょう。
3-4-1. キーフレームと所要時間を指定
ということで、animation プロパティにキーフレームリスト animation-name プロパティの値とアニメ1周の所要時間 animation-duration プロパティの値を指定することから始めます。最低限この2つの値を指定すれば、Font Awesome のアイコンをアニメーションできます。「スタート」ボタンを押すと、2秒間でアイコンが時計回りに一周しました。所要時間の指定には、秒またはミリ秒の単位である s または ms が必要です。
<i class="myfa-spin fas fa-car-crash"></i>
.myfa-spin{
font-size: 3em;
animation: kfs 2s;
}
@keyframes kfs{
0%{transform: rotate(0deg);}
100%{transform: rotate(360deg);}
}
3-4-2. アニメーションの繰り返し回数を指定
次に、animation-iteration-count プロパティの値を追加して、繰り返し回数を指定します。「0」以上の数を指定できます。単位はつけません。繰り返し回数を設定しない場合の既定値は、「1」です。無限に繰り返す場合は、「 infinite 」を指定します。「0」を指定しても良いですが、いつまで経ってもアニメーションは動かないのでそれなりの覚悟が必要です。
<i class="myfa-spin fas fa-car-crash"></i>
.myfa-spin{
font-size: 3em;
animation: kfs 2s infinite;
}
@keyframes kfs{
0%{transform: rotate(0deg);}
100%{transform: rotate(360deg);}
}
3-4-3. アニメーションのイージングを指定
animation-timing-function プロパティの値を指定して動きの速さに変化を付けることができます。「カクカクにして」とか「最初なめらかに」とか「一定速度で」とかいう風にです。詳細は後ほど説明します。ここでは、「 linear 」を指定してアニメーション速度を等速にしました。上の例と回転の仕方が違うことがわかると思います。上の例では、animation-timing-function プロパティの値を指定していないので、既定値である「 ease 」が適用されています。
<i class="myfa-spin fas fa-car-crash"></i>
.myfa-spin{
font-size: 3em;
animation: kfs 2s infinite;
}
@keyframes kfs{
0%{transform: rotate(0deg);}
100%{transform: rotate(360deg);}
}
3-4-4. アニメーションの再生方向を指定
animation-direction プロパティの値を指定すると、アニメーションの再生方向を変更できます。「 reverse 」を指定して再生方向を逆にしてみました。再生方向を逆にすると、キーフレームリストも(100%)から始まり、逆に向かって(0%)で終了します。つまり、開始フレームが(100%)フレーム、終了フレームが(0%)フレームになります。
<i class="myfa-spin fas fa-car-crash"></i>
.myfa-spin{
font-size: 3em;
animation: kfs 2s infinite linear reverse;
}
@keyframes kfs{
0%{transform: rotate(0deg);}
100%{transform: rotate(360deg);}
}
3-4-5. 開始時間を指定、開始時終了時のフレームを指定
animation-delay プロパティの値はアニメーションの開始時間を変更します。animation-delay プロパティの値の指定には、秒またはミリ秒の単位である s または ms が必要です。下の例では、3s を指定して、アニメーション開始時間を3秒遅らせました。animation-fill-mode プロパティの値はアニメーション開始前とアニメーション終了後にどのフレームを表示するかを指定します。下の例では、アニメ開始前(遅延中の3秒間)は、(0%)キーフレーム(color:blue)、アニメ終了時は、(100%)キーフレーム(color:red)が表示されるように、「 both 」を指定しました。
<i class="myfa-spin fas fa-car-crash"></i>
.myfa-spin{
font-size: 3em;
color: skyblue;
animation: kfs 2s 3 linear normal 3s both;
}
@keyframes kfs{
0%{
transform: rotate(0deg);
color: blue;
}
100%{
transform: rotate(360deg);
color: red;
}
}
アニメ開始前の状態
「スタート」ボタンを押す前は、初期設定値の空色( color:skyblue )です。「スタート」ボタンを押すと3秒間の待ち状態で、この時は(0%)キーフレームの青色( color:blue )が表示され、3秒後にアニメーションが始まり「青色→赤色と1回転」が3周回で アニメーション が終了、アニメ終了時は(100%)キーフレームの赤色(color:red)のままです。「リセット」ボタンを押すと、初期設定値の空色(color:skyblue)に戻ります。このように animation-fill-mode プロパティは アニメーション開始時・終了時に通常のアイコン画像か、(0%)フレームか、(100%)フレームかの3つのうちどれを表示するか(この例では空色・青色・赤色)を指定します。
3-4-6. アニメーションの再生・一時停止を指定
animation-play-state プロパティの値には、アニメーションを再生中( running )か一時停止( paused )を指定します。再び再生すると一時停止させたフレームから再生されます。
<i class="myfa-spin fas fa-car-crash"></i>
.myfa-spin{animation: myfa34a-spin 2s infinite linear;}
@keyframes myfa34a-spin{
0%{transform: rotate(0deg);}
100%{transform: rotate(360deg);}
}
animation-play-state: 「paused」 一時停止中
3.5 CSSアニメーションで使うプロパティの詳細
CSSアニメーションのプロパティは、様々な値のものが多いです。ここではその値を詳しく見ていきたいと思います。
3-5-1. animationプロパティ
animationプロパティは、CSSアニメーションで使う8個のプロパティを一括して指定します。必ずすべてを指定する必要はなく、指定しない場合は既定値が採用されます。ただ、animation-name(キーフレームリスト名) と animation-duration(所要時間)は必須です。また、それぞれのプロパティで個別に値を指定しても構いません。一括指定の場合の並び順ですが、単位が同じ animation-duration と animation-delay を除いて自由です。順番は、animation-duration が必ず先です。animation-name がどれかのプロパティの値と同じ文字列の場合も無効です。一括・個別の指定例と既定値は以下の通りになります。
.anime-ikkatu{
/* 一括設定 */
animation: kfs-name 2s;
}
.anime-kobetu{
/* 個別設定 既定値 */
animation-name: none;
animation-duration: 0s;
animation-timing-function: ease;
animation-iteration-count: 1;
animation-direction: normal;
animation-delay: 0s;
animation-fill-mode: none;
animation-play-state: running;
}
@keyframes kfs-name {
0% {fontisize: 1em;}
33% {fontisize: 2.7em;}
82% {fontisize: 3.4em;}
100% {fontisize: 1em;}
}
3-5-2. animation-nameプロパティ
animation-name プロパティには、 @keyframes のキーフレームリスト名(キーフレーム識別名)を指定します。キーフレームリスト名を指定しないとアニメーション機能は停止します。既定値は「 none 」です。
3-5-3. animation-durationプロパティ
animation-duration プロパティには、アニメーションの開始から終了までの所要時間を指定します。指定には、秒またはミリ秒の単位である s または ms が必要です。既定値は、0s です。
3-5-4. animation-timing-functionプロパティ
animation-timing-functionプロパティには、イージング、つまりアニメーションの滑らかさを指定します。ベジェ曲線系の値とステップ系の値に分けられます。
「ベジェ曲線系」:cubic-bezier(p1, p2, p3, p4) に4値を入れることで、ベジェ曲線を自由に指定できます。ベジェ曲線は、illustrator や inkscape などペンツールをお使いの皆さんにはお馴染みのアレですね。ベジェ曲線の勾配がアニメーションの滑らかさになります。特徴的な曲線には、 ease、linear など名前が付けられています。既定値は、ease です。
値 | 説明 |
---|---|
ease(既定値) | これ → |
linear | 等速 → |
ease-in | これ → |
ease-out | これ → |
ease-in-out | これ → |
cubic-bezier(p1, p2, p3, p4) | 二次元ベジェ曲線 |
cubic-bezier(0.6, 1.5, 0.3,-0.5) | これ → |
cubic-bezier(0.8,-0.5, 0.2, 1.5) | これ → |
cubic-bezier(1,-0.0, 1,-0.3) | これ → |
「ステップ系」:動きがカクカクに見えるようなアニメーション。ステップ数(自然数)と、(0%)フレーム・(100%)フレームを含めるかどうかの値の二つを指定します。 animation-timing-functionプロパティに、steps( n , [飛び] ) を指定します。[飛び]を省略した場合は、(0%)フレームが飛ばされます。[飛び]の値は表のとおりです。
steps( n ,[飛び])の[飛び]値 | 説明 |
---|---|
start(既定値) | 0%を飛ばす |
end | 100%を飛ばす |
jump-start | 0%を飛ばす |
jump-end | 100%を飛ばす |
jump-none | 両方飛ばさない |
jump-both | 両方飛ばす |
step-start | steps(1, jump-start) |
step-end | steps(1, jump-end) |
[飛び]は例えばキーフレームで
0%{ transform: rotate(0deg);}
100%{ transform: rotate(360deg);}
と、表示される画像が同じであった場合、アニメーションの繰り返し時に(100%)フレームと次の(0%)フレームの重複を避けるためにフレームを飛ばす役割を果たします。
3-5-5. animation-delayプロパティ
animation-delay プロパティには、アニメーションが始まる瞬間からの時間のずれ、オフセット時間を指定します。正の数を指定すると例えば、5s だと5秒後にアニメーションが開始されます。負の数を指定すると例えば、2s だと2秒前にアニメーションが開始された前提で、2秒過ぎたフレームから始まります。指定には、秒またはミリ秒の単位である s または ms が必要です。既定値は、0s です。
値 | 説明 |
---|---|
0s、0ms(既定値) | 即開始 |
値 | 説明 |
---|---|
1(既定値) | 1回だけ再生する |
負以外の数 | 繰り返される回数 |
infinite | 無制限に繰り返す |
3-5-7. animation-directionプロパティ
animation-direction プロパティには、再生の向きを順方向、逆方向、行ったり来たり、来たり行ったりの4通りのうち、いずれかを指定します。既定値は、normal です。
値 | 再生方向 |
---|---|
normal(既定値) | 順方向 |
reverse | 逆方向 |
alternate | 順→逆→順→逆→ |
alternate-reverse | 逆→順→逆→順→ |
3-5-8. animation-fill-modeプロパティ
animation-fill-mode プロパティには、アニメーション開始時とアニメーション終了時に表示されるキーフレームを指定します。表示されるのは、通常画像・(0%)フレーム・(100%)フレームのいずれかです。none の場合は、キーフレームは選択されずに通常画像が表示されます。再生方向が順方向の場合は下表の通りです。再生方向が逆だと表示されるキーフレームは、0% と 100% が逆になります。再生方向が行ったり来たり方向だとそのときの再生方向で表示されるキーフレームが決まります。既定値は、none です。
値 | 説明 |
---|---|
none(既定値) | 通常の見た目 |
forwards | 終了時に100%キーフレーム表示 |
backwards | 開始前に0%のキーフレーム表示 |
both | 両方ともキーフレーム表示 |
3-5-9. animation-play-stateプロパティ
animation-play-state プロパティでは、アニメーションが実行中か、または停止中かを指定します。停止した後に実行すると、停止した位置からアニメーションが再生されます。既定値は、running です。
値 | 説明 |
---|---|
running(既定値) | アニメーション実行中 |
paused | アニメーション停止中 |
4.おわりに・・・3次元の回転を少し
今回、自動車をくるくる回したアニメーションのキーフレームは、2次元時計回りの回転が基本でした。これを次のように書き換えると3次元の回転になります。xyz 軸のそれぞれの方向に何度回すかを指定するだけです。90度、180度、360度の倍数で設定してやると区切りのよい回転になります。
<i class="myfa-spin fas fa-car-crash"></i>
.myfa-spin{
font-size: 3em;
animation: kfs 10s infinite linear;
}
@keyframes kfs{
0% {transform: rotateX(180deg) rotateY(3600deg) rotateZ(-180deg); }
100% {transform: rotateX(-180deg) rotateY(0deg) rotateZ(180deg); }
}
3次元回転をSVG画像に埋め込んでみました。
コメント