はじめに

Webデザインにおいて、アニメーションは ユーザーエクスペリエンスを大幅に向上させることができます。 CSSアニメーションは、JavaScriptなしで滑らかで効率的なアニメーション効果を実現できる強力なツールです。 このガイドでは、基本から応用まで、CSSアニメーションについて詳しく解説します。

1. Transitionプロパティの基本

transitionは、CSS プロパティの値が変更される際に、その変更をアニメーションします。 最もシンプルで、頻繁に使用されるアニメーション手法です。

基本的な構文

.element { transition: property duration timing-function delay;
} /* 例 */
.button { background-color: blue; transition: background-color 0.3s ease-in-out;
} .button:hover { background-color: red;
}

Transitionのプロパティ

  • transition-property: アニメーション対象のプロパティ(all, color, width等)
  • transition-duration: アニメーション時間(秒またはミリ秒)
  • transition-timing-function: 時間に沿った動きの加速度(ease, linear, ease-in等)
  • transition-delay: アニメーション開始の遅延時間

2. @keyframesでアニメーション定義

より複雑なアニメーションを作成するには、@keyframesルールを使用します。 これにより、複数のキーフレームを定義して、詳細なアニメーションシーケンスを作成できます。

@keyframesの使用例

@keyframes slide { 0% { transform: translateX(0); opacity: 0; } 50% { opacity: 1; } 100% { transform: translateX(100px); opacity: 1; }
} .element { animation: slide 2s ease-in-out infinite;
}

3. Animationプロパティの詳細

animationプロパティは、定義された@keyframesをページ上の要素に適用します。

主要なプロパティ

  • animation-name: @keyframesで定義した アニメーション名
  • animation-duration: アニメーションの継続時間
  • animation-timing-function: 加速度曲線
  • animation-delay: 開始時間の遅延
  • animation-iteration-count: 繰り返し回数(数字またはinfinite)
  • animation-direction: 逆方向再生(normal, reverse, alternate)
  • animation-fill-mode: アニメーション前後の状態(forwards, backwards, both)

4. Transformプロパティとの組み合わせ

transformプロパティと組み合わせることで、移動、回転、スケーリングなど、 多彩なアニメーション効果を実現できます。

Transform アニメーション例

@keyframes rotate-scale { 0% { transform: rotate(0deg) scale(1); } 50% { transform: rotate(180deg) scale(1.2); } 100% { transform: rotate(360deg) scale(1); }
} .spinner { animation: rotate-scale 2s linear infinite;
}

5. パフォーマンス最適化

アニメーションを多用する場合、パフォーマンスに配慮する必要があります。 以下のプロパティは、ブラウザのGPU を活用し、パフォーマンスが優れています:

  • transform
  • opacity

一方、width、height、left などのレイアウトに関わるプロパティは、 レイアウト再計算を発生させるため、パフォーマンスに悪影響を与えます。

6. 実践的な例

ローディングスピナー

@keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); }
} .spinner { width: 40px; height: 40px; border: 4px solid #e8a040; border-top-color: transparent; border-radius: 50%; animation: spin 1s linear infinite;
}

パルスエフェクト

@keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.5; }
} .pulse { animation: pulse 1.5s ease-in-out infinite;
}

よくある質問(FAQ)

アニメーションをJavaScriptで制御できますか?

はい、できます。JavaScriptでクラスを追加・削除することで、CSSアニメーションを制御できます。 また、animation.play()やanimation.pause()で細かく制御することも可能です。

古いブラウザでも動作しますか?

CSS アニメーションはIE10以上で対応しています。古いブラウザをサポートする場合は、 -webkit- や -moz- などのベンダープレフィックスが必要です。

複数のアニメーションを同時に適用できますか?

はい。複数のアニメーション名をカンマで区切って指定できます: animation: slide 2s, fade 1s;

パフォーマンスを改善するコツは?

transformとopacityを使用し、レイアウト再計算を避けることが重要です。 また、不要なアニメーション終了時にanimation: noneで停止させることで、リソース消費を減らせます。

まとめ

CSSアニメーションは、Webページに生動感とプロフェッショナルな印象を与える強力なツールです。 transitionで簡単なアニメーション、@keyframesで複雑なアニメーションを実現できます。 パフォーマンスに配慮しながら、ユーザーエクスペリエンスを向上させるアニメーションを活用してください。