【ITニュース解説】El arte de dar vida a tu web: Guía completa de animaciones con CSS
2025年10月03日に「Dev.to」が公開したITニュース「El arte de dar vida a tu web: Guía completa de animaciones con CSS」について初心者にもわかりやすく解説しています。
ITニュース概要
CSSアニメーションはWebサイトを魅力的にし、ユーザーの目を引く。主にトランジションとキーフレームの2つがあり、シンプルか複雑かで使い分ける。トランジションはホバー時の色変化など単一の変化に、キーフレームは多段階で自動再生する複雑な動きに使う。これらを習得すればサイトに動的な表現を加えることが可能だ。
ITニュース解説
Webサイトで動く視覚的な効果、つまりアニメーションは、単なる飾りではなく、ユーザーがWebサイトを使いやすくし、注目してほしい場所に誘導し、サイト全体を現代的で活気のあるものにするための強力な道具である。素晴らしい視覚効果がどのように作られているのか疑問に思う人もいるかもしれないが、その中心にはCSS(Cascading Style Sheets)を使った二つの主要なアニメーション手法、すなわち「トランジション」と「キーフレーム」が存在する。
まず、CSSトランジションについて説明する。トランジションは、Web要素にアニメーションを適用する最も簡単な方法だ。これは、要素が特定の状態から別の状態に変化する際に、その変化をスムーズに、そして素早く見せるのに最適である。例えば、ボタンにマウスカーソルを合わせたときに、ボタンの色が瞬時に変わるのではなく、ゆっくりと滑らかに変化するといった効果がこれにあたる。
トランジションを作成するために必要なCSSプロパティは主に三つある。一つ目はtransition-propertyで、これは、どのCSSプロパティにアニメーションを適用したいかを指定する。例えばcolor(文字色)、background-color(背景色)、transform(変形)などが挙げられる。もし全てのプロパティの変化をアニメーションさせたい場合はallという値を指定できる。二つ目はtransition-durationで、アニメーションがどのくらいの時間で完了するかを設定する。例えば0.5sと指定すれば0.5秒かけて変化が完了する。三つ目はtransition-timing-functionで、アニメーションの速度の変化パターンを制御する。easeはアニメーションがゆっくり始まり、速くなり、そしてゆっくり終わるという最も一般的なパターンだ。他にもlinear(常に一定の速度)、ease-in(ゆっくり始まり、加速する)、ease-out(速く始まり、減速する)、ease-in-out(ゆっくり始まり、加速し、減速して終わる)といった値がある。
具体的な例として、ボタンの背景色をマウスホバー時に変更するアニメーションを考えてみよう。通常のボタンのスタイル定義に加え、transition-propertyにbackground-color、transition-durationに0.3s、transition-timing-functionにeaseを設定する。そして、マウスカーソルがボタンの上に重なった際(:hover状態)に、background-colorの値を別の色に設定する。この設定により、ユーザーがマウスをボタンに乗せると、背景色が瞬時に切り替わるのではなく、0.3秒かけて滑らかに変化するアニメーションが実現する。
次に、キーフレームとアニメーションについて解説する。トランジションが単純な「AからBへの変化」という一連の動きに適しているのに対し、キーフレームは、複数の段階を持つより複雑なアニメーションを作成する際にその真価を発揮する。キーフレームを使うと、アニメーションの特定の時点(例えば開始時、中間点、終了時など)で要素がどのような状態であるべきかを細かく定義できるため、より凝った視覚効果を生み出すことが可能だ。
キーフレームを使ったアニメーションを作成するには二つのステップが必要となる。まず、@keyframesルールを使って、アニメーションの具体的な動きを定義する。このルールにはアニメーションの名前を付け、アニメーションの開始時(0%またはfrom)、中間点(例えば50%)、終了時(100%またはto)など、様々なパーセンテージで要素のスタイルを指定する。例えば、0%では元の位置に、50%では上に移動し、100%では再び元の位置に戻るといった具合だ。
次に、定義したアニメーションを実際のWeb要素に適用する。これにはanimationというCSSプロパティを使用し、様々なサブプロパティを通じてアニメーションの振る舞いを制御する。
animation-nameは、先ほど@keyframesで定義したアニメーションの名前を指定する。animation-durationは、アニメーションの一回の再生にかかる時間を設定する。animation-timing-functionは、トランジションと同様にアニメーションの速度変化パターンを指定するものだ。animation-iteration-countは、アニメーションが何回繰り返されるかを設定し、特定の回数を指定できる他、infiniteと設定すれば無限に繰り返される。animation-directionは、アニメーションの再生方向を制御し、例えばalternateと設定すると、一回目は順方向に再生され、二回目は逆方向に再生されるといった交互の動きが可能になる。最後にanimation-fill-modeは、アニメーションが開始される前と終了した後に、要素がどのようなスタイルを維持するかを制御する。forwardsを指定すると、アニメーションの最終状態が維持される。
具体的な例として、ある要素が上下に跳ねるような「バウンド」アニメーションを作成してみよう。
まず、@keyframes reboteという名前でアニメーションを定義する。0%と100%では、transform: translateY(0)で要素が元の縦位置にあることを示し、50%ではtransform: translateY(-50px)で要素が上方向に50ピクセル移動することを定義する。これにより、要素は元の位置から上に移動し、また元の位置に戻るという動きの基本が作られる。
次に、このアニメーションをelemento-rebotandoというクラスを持つ要素に適用する。animation-nameにrebote、animation-durationに1s、animation-iteration-countにinfinite(無限繰り返し)、animation-timing-functionにease-in-out(ゆっくり始まり、速くなり、ゆっくり終わる)、そしてanimation-directionにalternate(順方向と逆方向を交互に)を設定する。これらのプロパティを組み合わせることで、要素は1秒かけて上に移動し、次に1秒かけて元の位置に戻るという動きを無限に繰り返し、まるで跳ねているかのような、滑らかで連続的なバウンド効果が生まれるのだ。
では、トランジションとキーフレームはどのように使い分けるべきだろうか。
トランジションは、ユーザーのマウスホバー(:hover)、入力フィールドへのフォーカス(:focus)、クリック中(:active)といった、特定のアクションによって引き起こされる、シンプルな一方向のスタイル変化に最適だ。つまり、「状態Aから状態Bへ」という単一のステップのアニメーションに使うと良い。
一方、キーフレームは、Webページが読み込まれたときに自動的に開始されるアニメーションや、複数の複雑な状態変化を順番に実行したい場合、あるいはアニメーションの途中の各段階を厳密に制御したい場合に適している。例えば、要素が画面内を複雑に移動したり、サイズや透明度を段階的に変化させたりするような、多段階で複雑な動きにはキーフレームを使うのが適切である。
これらのCSSアニメーションの二つの主要なテクニックを習得することは、フロントエンド開発者にとって非常に重要だ。様々なCSSプロパティや値を試し、実際にWebサイトに動的な表現を加えることで、ユーザーにとって忘れられない魅力的な体験を作り出すことができるようになるだろう。