はじめに

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

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

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;

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

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

まとめ

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