夏休みも残りわずかとなり、暑さもずいぶんと和らいできました。そんな中、特別授業ということで初心者向けにCSS3のAnimationの授業を行いました。
初心者向けといいながら、かなりイレギュラーな部分を題材にしたのですが、資料としていろいろとまとめましたので、書いておこうと思います。
まずは、HTML, CSS, JavaScriptの役割と、HTMLの書き方とCSSとの関係を理解してもらいます。
ここ1年ぐらい、高校生や初心者向けの講座では、CodePenを利用しています。
アプリケーションの使い方やファイルの設定など、コーディングすること以外の準備が必要なくjQueryなどライブラリの読み込みも簡単に設定ができ、コードを書き換えると自動でリロードもしてくれます。今回も最初からCodePenで書いていきます。
Green
Blue
Red
CSSでは、HTMLのタグとセレクタの関係、クラスで個別に設定ができるという事を説明します。
p{
font-size: 50px;
font-weignt: bold;
}
.green {
color: green;
}
.blue......
書き込むとすぐに、文字の大きさが変わったり、各単語に色が塗り分けられたりと、関係性がわかりやすいと思います。
さて、ここからHTMLの文字にCSSでアニメーションをつけていきます。
あまり調べてなかったのですが、CSS3のアニメーションでは、意外と設定次第でいろいろな事ができるようです。
参考:Animate.css Just-add-water CSS animations
CSSアニメーション
比較的簡単な、「Slide Up」「Slide Down」「Fade In」「Bounce」を作りながら各プロパティと動きの説明し、プロジェクターで投影しながら一緒にコーディングして動かしていきます。最終的には、テキストを画像に換えて、ボタンで動くようにしました。
See the Pen oJkjK by tridentwebdesign (@tridentwebdesign) on CodePen.
キャラクターはFirefoxのマスコットキャラクター「フォクすけ」を利用させてもらいました。
今回は「Bounce(バウンド)」で説明します。
最初に、HTMLを書きます。classも設定しておきます。
Bounce
そしてCSSは、アニメーションの設定をします。
.bounce{
visibility: visible;
animation-name: bounce;
-webkit-animation-name: bounce;
animation-duration: 1.6s;
-webkit-animation-duration: 1.6s;
animation-timing-function: ease;
-webkit-animation-timing-function: ease;
transform-origin: 50% 100%;
-ms-transform-origin: 50% 100%;
-webkit-transform-origin: 50% 100%;
}
要素(テキスト)が動きますので、動いた場所に他の要素が入ってこないようにvisivility : visibleを設定します。次に
- アニメーションの名前 animation-name
- アニメーション一回の時間 animation-duration
- アニメーションのタイミング・進行の動き animation-timing-function
- 要素の基準点 transform-origin
を設定します。
animation-name
設定するアニメーションに名前を付けましょう。今回はそのまま“bounce”と言う名前にします。
animation-duration
要素にキーフレームアニメーションを適用する場合の、 アニメーション一回分の時間の長さを指定します。初期値は0(=動かない)で、マイナスの値を入れても0と認識されますので必ず設定します。単位はs(=秒)となります。今回は、“1.6s”といれます。
animation-timing-function
始点と終点間の変化の仕方を調整する事ができます。これを一般的には、イージングとよびアニメーション作成ソフトでは、ベジェ曲線で表されます。以下の図のような4つのコントロールポイント(P0、P1、P2、P3)で定義されます。
P0は始点、P3は終点なので固定となりますので、P1のX1,Y1、P2のX2,Y2を設定する事で、変化の仕方を変更する事ができます。細かい設定は、下記の記事に紹介されているジェネレーターを利用すると便利です。
参考:【便利】timing-functionのシミュレーター|しばさんのおはなし
一般的な変化の仕方については、下記の値が準備されています。
値 | 説 明 |
---|
ease | cubic-bezier(0.25, 0.1, 0.25, 1) に等しい関数です。 |
---|
linear | cubic-bezier(0, 0, 1, 1) に等しい関数です。 |
---|
ease-in | cubic-bezier(0.42, 0, 1, 1) に等しい関数です。 |
---|
ease-out | cubic-bezier(0, 0, 0.58, 1) に等しい関数です。 |
---|
ease-in-out | cubic-bezier(0.42, 0, 0.58, 1) に等しい関数です。 |
---|
step-start | steps(1, start) に等しい関数です。 |
---|
step-end | steps(1, end) に等しい関数です。 |
---|
steps(数値, [,start | end ] ) | 2つのパラメータでステップ関数を指定します。 |
---|
cubic-bezier(数値, 数値, 数値, 数値) | 3次ベジェ曲線(cubic-bezier)を指定します。 数値は曲線パラメータ2点の座標で (x1, y1, x2, y2) です。 |
---|
transform-origin
要素の変形の原点を指定します。指定の方法は、変形前の要素の左上位置(0,0)から右下方向への距離をパーセント(X%, Y%)、距離(X, Y)、もしくはキーワード(水平方向〔left・center・right〕垂直方向〔top・center・bottom〕)で指定します。
中心の下を動かして上に延びるようにしたかったので(50%, 100%)に設定しました。
続けて、animation-name: bounceのキーフレームを設定します。キーフレームとは時間上のあるポイントをマークしたもので、そのポイントでの空間上の位置や、不透明度、オーディオボリュームなどの値を指定します。CSSでは、パーセントで定義します。
@keyframes bounce {
0% {
transform: translateY(0%) scaleY(0.6);
}
60%{
transform: translateY(-100%) scaleY(1.1);
}
70%{
transform: translateY(0%) scaleY(0.95) scaleX(1.05);
}
80%{
transform: translateY(0%) scaleY(1.05) scaleX(1);
}
90%{
transform: translateY(0%) scaleY(0.95) scaleX(1);
}
100%{
transform: translateY(0%) scaleY(1) scaleX(1);
}
}
transform:translate() で、移動する方向(XorY)と距離を設定します。
transform:scale() で要素の拡大する方向(XorY)と割合を設定します。バウンドするアニメーションになりますので、縮んでから伸びて着地でまた、縮むように要素の大きさや移動を調整します。こちらも@keyframesのジェネレーターなんかもありますので、複雑な動きなどはこちらで確認するといいでしょう。
ベンダープレフィックスを入れる事で、一部対応のブラウザでも表示する事ができます。
@-webkit-keyframes bounce {
0% {
-webkit-transform: translateY(0%) scaleY(0.6);
}
60%{
-webkit-transform: translateY(-100%) scaleY(1.1);
}
70%{
-webkit-transform: translateY(0%) scaleY(0.95) scaleX(1.05);
}
80%{
-webkit-transform: translateY(0%) scaleY(1.05) scaleX(1);
}
90%{
-webkit-transform: translateY(0%) scaleY(0.95) scaleX(1);
}
100%{
-webkit-transform: translateY(0%) scaleY(1) scaleX(1);
}
}
bounceの文字を画像に変えて、簡単なJavaScriptでクリックイベントにして終了です。
さて、今回、アニメーションの設定をしてると気になった事が、CSSの小数点は何桁まで認識されるのでしょうか?
とGoogle先生に聞いてみたら、しっかりと調べられている方がいらっしゃいました。
CSS の小数点以下の数値を各ブラウザはどのように解釈するか | Unformed Building
かなり細かい設定まで可能のようです。
ということは、その気になれば超大作アニメーションも。。。