CSS3アニメーションの基本脱エンジニアっぽさ! クライアントの笑顔を引き出すCSS3アニメーション(1)(2/3 ページ)

» 2013年07月04日 17時00分 公開
[内田 順一,Chime of Shigan]

 なお、複数のCSSプロパティを変化させることも可能です。通常のAの状態では幅100pxなのを、マウスオーバしたBの状態のときに幅200pxに広げるようにします。a:hoverのセレクタに「width:200px;」を加え、「transition-property: background」の後ろにカンマを打って、「width」を追加します。

  1. /*ボタンに対して何もしていない状態(A)*/
  2. a{
  3. display:inline-block;
  4. color:#fff;
  5. width:100px;
  6. padding:10px;
  7. text-align:center;
  8. background:blue;
  9. text-decoration:none;
  10. /*アニメーション指定*/
  11. transition-property: background, width;
  12. transition-duration:1s;
  13. transition-timing-function:ease-out;
  14. transition-delay:0.5s;
  15. }
  16. /*ボタンに対してマウスオーバした状態(B)*/
  17. a:hover{
  18. background:red;
  19. width:200px;
  20. }
【CSS側】

 非常に簡単ですね。

 しかし、このままでは、ブラウザの種類やバージョンによってはアニメーションが実行されません。なるべく多くのブラウザで動作するよう、transitionプロパティ全てに、ベンダプレフィックスを付けたものを追加します。

  1. /*ボタンに対して何もしていない状態(A)*/
  2. a{
  3. display:inline-block;
  4. color:#fff;
  5. width:100px;
  6. padding:10px;
  7. text-align:center;
  8. background:blue;
  9. text-decoration:none;
  10. /*アニメーション指定*/
  11. /*Firefox向け*/
  12. -moz-transition-property: background, width;
  13. -moz-transition-duration:1s;
  14. -moz-transition-timing-function:ease-out;
  15. -moz-transition-delay:0.5s;
  16. /*Chrome、Safari向け*/
  17. -webkit-transition-property: background, width;
  18. -webkit-transition-duration:1s;
  19. -webkit-transition-timing-function:ease-out;
  20. -webkit-transition-delay:0.5s;
  21. /*Opera向け*/
  22. -o-transition-property: background, width;
  23. -o-transition-duration:1s;
  24. -o-transition-timing-function:ease-out;
  25. -o-transition-delay:0.5s;
  26. transition-property: background, width;
  27. transition-duration:1s;
  28. transition-timing-function:ease-out;
  29. transition-delay:0.5s;
  30. }
  31. /*ボタンに対してマウスオーバした状態(B)*/
  32. a:hover{
  33. background:red;
  34. width:200px;
  35. }
【CSS側】

(3)animationの設定方法

 次に、animationの設定方法を学びます。もう一度、AとBの状態を指定しただけのものにスタイルシートを戻します。

  1. /*ボタンに対して何もしていない状態(A)*/
  2. a{
  3. display:inline-block;
  4. color:#fff;
  5. width:100px;
  6. padding:10px;
  7. text-align:center;
  8. background:blue;
  9. text-decoration:none;
  10. }
  11. /*ボタンに対してマウスオーバした状態(B)*/
  12. a:hover{
  13. background:red;
  14. }
【CSS側】

 animationで指定できるのは、以下の6つです。

  1. アニメーション名
    アニメーションの変化をまとめた記述に付ける名前
    (例)animation-name:btn;
  2. アニメーションしている時間の長さ(1回分)
    Aの状態からBの状態に変化するのに何秒かけるか
    (例)animation-duration:2s;
  3. アニメーションの速度変化(イージング)
    始めは素早く動くけれども、変化の終盤はゆっくり動くなど、変化する過程にどう抑揚を付けるか
    (例)animation-timing-function:ease-out;
  4. アニメーションを開始するまでの時間
    マウスオーバなどのアクションがあってから、何秒経過してからアニメーションを始めるか
    (例)animation-delay:0s;
  5. アニメーションの繰り返し回数
    アニメーションを何回繰り返すか。「infinite」で無限指定も可能
    (例)animation-iteration-count:1;
  6. アニメーションの繰り返し方法
    アニメーションを、A→B、A→B……と一定方向に繰り返すか、またはA→B→A……と揺りかごのように反転して再生するか。反転再生のときは「alternate」を指定
    (例)animation-timing-function:normal;

 なお、これらは1つにまとめて指定できます。
(例)animation:btn 2s ease-out 0s 1 normal;

 余談ですが、transitionでも同様にまとめて指定できる……はずなのですが、Firefoxで動作しないため、transitionでは個別にCSSプロパティを記載するようにしています。

 さて、これを先ほどのtransitionとは逆に、Bの状態の方に記述します。

  1. /*ボタンに対して何もしていない状態(A)*/
  2. a{
  3. display:inline-block;
  4. color:#fff;
  5. width:100px;
  6. padding:10px;
  7. text-align:center;
  8. background:blue;
  9. text-decoration:none;
  10. }
  11. /*ボタンに対してマウスオーバした状態(B)*/
  12. a:hover{
  13. /*アニメーション指定*/
  14. animation:btn 2s ease-out 0s 1 normal;
  15. background:red;
  16. }
【CSS側】

 しかし、これだけでは動きません。

 どのタイミングで何をアニメーションさせるかをまとめた「キーフレーム」というものも、スタイルシートの中に追加して設定する必要があります。次のように設定します。

  1. @keyframes アニメーション名 {
  2. 0% { アニメーションさせたいCSSプロパティの初期状態 }
  3. 100% { アニメーションさせたいCSSプロパティ最終状態 }
  4. }

 今回、背景色を青から赤に変化させたいので、以下のように記述します。

  1. @keyframes btn {
  2. 0% {background:blue;}
  3. 100% {background:red;}
  4. }

 また、A→Bの状態変化の間に、別の変化を差し挟むこともできます。青から赤に背景色が変化する途中で、黄色になるようにします。

  1. @keyframes btn {
  2. 0% {background:blue;}
  3. 50% {background:yellow;}
  4. 100% {background:red;}
  5. }

 「50%」としている数字を小さくすれば、早く黄色になり、大きくすれば遅いタイミングで黄色になります。

Copyright © ITmedia, Inc. All Rights Reserved.

スポンサーからのお知らせPR

HTML5�偽X 險倅コ九Λ繝ウ繧ュ繝ウ繧ー

譛ャ譌・譛磯俣

注目のテーマ

4AI by @IT - AIを作り、動かし、守り、生かす
Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。