はじめに
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 を活用し、パフォーマンスが優れています:
transformopacity
一方、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で複雑なアニメーションを実現できます。 パフォーマンスに配慮しながら、ユーザーエクスペリエンスを向上させるアニメーションを活用してください。