CSSで画像をアニメーションさせてみよう(1)キーフレームとは

普段利用しているウェブサイトやSNSでは、目を引く視覚効果、滑らかなアニメーションがふんだんに用いられています。

CSSを使うと、静止画像を、簡単なアニメーションに仕立て上げることができます。

この記事では、画像のサイズを変化させたり、左右に回転させたり、上下・左右に移動させたりするCSSの書き方のサンプルを紹介します。

サンプルの確認

以下の画面で、動作を確認してください。Monaca Educationのアイコンがさまざまにアニメーションしていますが、元々は静止画像です。CSSによってサイズを変えたり、移動させたりしています。

アプリとソースコードのインポート

以下のボタンをクリックすると、Monaca Educationにプロジェクトをインポートできます。

Monaca Educationにインポートする(要ログイン)

CSSのポイント

このサンプルのCSSを理解し、応用する上で、ポイントになるのは、キーフレーム(keyframes)という用語です。

キーフレームとは

CSSにおけるキーフレームは、アニメーションの中の特定の時点での、スタイルを定義するために使用する構文です。

コードの中で、次のように宣言します。


@keyframes アニメーション名 {
  0% {
    /* アニメーション開始時のスタイル */
  }
  /* 中間のスタイル(省略可能) */
  50% {
    /* アニメーションの中間点でのスタイル */
  }
  100% {
    /* アニメーション終了時のスタイル */
  }
}

@keyframesはキーワードで、続けて名前を付けます(「アニメーション名」の部分)。

中カッコ { } で囲んだ大きな枠の内側に、0% { … } 50% { … }という枠があります。

0%というのは「アニメーションの開始時点」のことで、50%は「アニメーション全体の半分まで動作した時点」のことです。そして、100%は、「アニメーションの終了時点」です。

0%、50%、100%のそれぞれの中カッコの枠の中では、CSSを使って対象の要素をどう表示するか指定します。

このキーフレームの定義をすると、フレームとフレームの間(※たとえば、0%と50%の間)の表示方法をWebブラウザが計算して、自動でアニメーションにしてくれるのです。

HTML要素のスタイルで、キーフレームを指定する

定義したキーフレームは、「どのように表示するか」の、表示方法を決めている(=アニメーション方法を決めている)だけです。「何を表示するか」は決めていません。

要素を指定して、表示方法としてキーフレームを利用するように指定します。


#img1 {
  width: 100px;
  /* 画像にアニメーションを適用。キーフレーム1を使う */
  animation: animateImage1 10s infinite;
 }

このCSSでは、ID属性が”img1”の要素に対するスタイルを指定しています。

幅(width)を100ピクセルにしているほか、属性animationを使い、キーフレームの名前を指定しています(上の例では「anmateImage1」)。

言い換えると、この部分で「HTMLの中の、ID属性がimg1の要素に対して、キーフレームanimateImage1を使う」という指定をしていることになります。

属性animateのその他の指定


#img1 {
  width: 100px;
  /* 画像にアニメーションを適用。キーフレーム1を使う */
  animation: animateImage1 10s infinite;
 }

属性animationでは、キーフレーム名の他に、10s、およびinfiniteという指定があります。

10sは10秒(second)のことで、一連のアニメーションを10秒間で実行するという意味になります(※この値を小さくするとアニメの動作は速く、大きくするとアニメの動作は全体的にゆっくりになります)。

infiniteは、「無限に」という意味で、繰り返し回数を決めずに、何度でも繰り返す、という指定になります。

以下のように、属性animation-iteration-countを指定すると、回数を決めることもできます。


#img1 {
  /* 画像にアニメーションを適用。キーフレーム1を使う */
  animation: animateImage1 10s;
  animation-iteration-count: 3;
}

CSSで、画像をアニメーションさせてみよう

CSSを使うと、動画ファイルを作らなくても、簡単な動作のアニメーションを作ることができます。

元の静止画像(絵、写真)と、CSSのさまざまなオプションを組み合わせてみてください。