Now Loading...

Web制作

【CSSアニメーション】CSSで高度な動きをつけよう!「keyframes」「animation」の使い方

トップ > ブログ > Web制作 > 【CSSアニメーション】CSSで高度な動きをつけよう!「keyframes」「animation」の使い方

CSSで簡単にアニメーションをつけられる手段の一つにtrnasitionがあります。

keyframesanimationは、詳細な指定ができるため高度な動きが実現できます。サイトを閲覧している中で「面白い」アニメーションだと感じる動きは、大体keyframesanimationが使われています。

魅力的なサイトを制作するためや自身のレベルアップのためにも、しっかりと身につけていきましょう!

animationとkeyframesの関係性

高度な動きをつけるためには、animationkeyframesを使います。

animationは、transitionのように「アニメーションの時間」や「開始するまでの時間」などを指定できることに加えて、さらに詳細な指定ができます。

そして、animationで実際にどのような「動き」を実現させたいかを指定します。

言葉での説明だとわかりずらいかと思いますので、実際のコードを見てみましょう。

コード例

<div class="animation-class"></div>
.animation-class {
	width: 50px;
	height: 50px;
       transform: ratate(0);
	animation-name: animation-rotate;     //アニメーションの名前を指定
	animation-duration: 8s;                         //アニメーション時間が8秒
	animation-timing-function: linear;  //アニメーションは一定の動き
	animation-delay: 1s;                               //アニメーション開始を1秒遅らせます
	animation-iteration-count: infinite;                //アニメーションを無限に繰り返します
	animation-play-state: running;             //アニメーションを再生します
}
.animation-class:hover {
	animation-play-state: paused;              //ホバーされたらアニメーションを停止します
}
@keyframes animation-rotate {
	0% {
            transform: rotate(0);                    //0~2秒間の間に90度回転します
                                                                   //0~2秒間の間に背景色を赤色に変化します
         }
	25% {
            width: rotate(90deg)                   //2~4秒間の間に90度地点から180度回転します
            background-color: red;               //2~4秒間の間に背景色を黄色に変化します
         }
        50%{
            transform: rotate(180deg);         //4~6秒間の間に180度地点から270度回転します
            background-color: yellow;          //4~6秒間の間に背景色を青色に変化します
         }
         75%{
            transform: rotate(270deg);         //6~8秒間の間に270度地点から360度回転します
            background-color: blue;             //6~8秒間の間に黒色に変化します
         }
        100%{
             transform: rotate(360deg);
             background-color: #000;
         }
}

animationの指定

animationは、transitionよりも指定できるプロパティが多いです。そのため、細かなアニメーションの動きを実現できます。

プロパティ説明初期値
animation-nameアニメーションの名前none
animation-durationアニメーションが開始してから終了するまでの時間0s
animation-timing-functionアニメーションのイージング(加速度)ease
animation-delayアニメーションが開始するまでの時間0s
animation-iteration-countアニメーションを繰り返す回数1
animation-directionアニメーションの再生方向(順番・逆再生)normal
animation-fill-modeアニメーション開始と終了時のスタイル状態none
animation-play-stateアニメーションの再生・停止running
animation上記のプロパティを一括指定できる

animation-name

名前をつけ、@keyframsで指定することでアニメーションを実現できます。

animation-duration

アニメーションが開始されてから完了するまでの時間を指定します。所要時間を秒数またはミリ秒数で指定します

animation-timing-function

アニメーションが変化する速度を指定します。

説明
easeアニメーションの開始・終了付近の動きがゆっくり変化
linear一定の速度で変化します
ease-inアニメーション開始時はゆっくり変化し、徐々に速く変化
ease-outアニメーション開始時は速く変化し、徐々にゆっくり変化
ease-in-outアニメーションの開始・終了付近の動きがゆっくり変化(easeよりゆっくり変化)
step-startアニメーションの開始時点で終了状態へ一気に変化
step-endアニメーションの開始時点では変化せず、終了時に一気にアニメーションが完了した状態になります
steps関数型の値。アニメーションが進行する時間と度合いをステップ数と変化のタイミング(各ステップの起点にしたい場合はstart、終点にしたい場合はendを指定します。)として指定。例えば、アニメーションの変化を2段階で各ステップの終了時に発生させるには、steps(2,end)と指定
cubic-bezier()関数型の値。アニメーションが進行する時間をX軸、変化の度合いをY軸とした三次ベジェ曲線の軌跡によって、アニメーションの進行度を指定

animation-delay

アニメーションが開始するまでの時間を指定します。

animation-iteration-count

アニメーションを実行する回数を指定します。初期値では、アニメーションは1回のサイクルが終了すると停止するように設定されていますが、このプロパティで再生する回数を指定できます。

停止させずに無限にループさせる場合は、infiniteを指定します。

animation-direction

アニメーションのサイクルごとの再生方向を指定します。逆方向に再生した場合は、animation-timing-functionの値も逆の動きになります。

説明
normalアニメーションを順方向に再生
reverseアニメーションを逆方向に再生
alternateアニメーションを最初に順方向で再生し、終了すると逆方向に再生
alternate-reverseアニメーションを最初に逆方向で再生し、終了すると順方向に再生

animation-fill-mode

アニメーション再生中・再生後のスタイルを指定します。

説明
noneアニメーション再生後は、元のスタイルが適用
backwardsアニメーション再生後は、最初のキーフレーム(0%)のスタイルが適用
forwardsアニメーション再生後は、最後のキーフレーム(100%)のスタイルが適用
bothアニメーション再生後は、最後のキーフレーム(100%)のスタイルが適用

animation-play-state

アニメーションの再生・停止を指定します。

説明
runningアニメーションを再生
pausedアニメーションを停止

animation

上記のプロパティを一括で指定します。順番は上記の通りに記述することをおすすめします。

秒数を指定するものがanimation-durationanimation-delayの2つがありますので、どちらも指定した場合はanimation-duration → animation-delayの順番で適用されます。

.animation-class{
  animation: name 2s infinite;
}

keyframesの指定

animation-nameを指定し、どのタイミングでどのような変化をさせたいかを設定します。

.animation-class {
	width: 50px;
	height: 50px;
       transform: ratate(0);
	animation-name: animation-width;
	animation-duration: 6s;
}

@keyframes animation-width {
	0% {
            width: 50px;
         }
        25%{
            width: 100px;
         }
        50%{
            width: 75px;
         }
        100%{
             width: 100px;
         }
}

上記では、animation-durationを6秒に指定しているので、最初の2秒間で幅を100pxに変化、次の2秒間で幅を75pxに変化最後の2秒間で幅を100pxに変化します。

関連記事