GIF ローダーとベクター アニメーション: チームが UI でアニメーション化された GIF を置き換える理由
アニメーション化された GIF が UI ローダーやアイコンに適していない理由、代わりに何を使用するか (CSS、SVG、Lottie、ビデオ、状態ベースのランタイム)、およびその選択方法。
核心
アニメーション化された GIF は最大 256 色のパレットに制限され、オンまたはオフの透明度があり、拡大縮小時にぼやけ、アプリの状態に反応できません。 UI ローダーとアイコンの場合、CSS または SVG アニメーションは通常、より軽くて鮮明です。 Lottie はよりリッチなイラストに適しています。 ExodeUI や Rive などの状態ベースのランタイムは、読み込み、成功、エラーによってアニメーションを変更する必要がある場合に最適です。
GIF できること、できないこと
MDN の画像形式ガイドでは、GIF の各ピクセルが最大 256 色のパレットへのインデックスであると説明し、GIF などの古い形式は WebP や AVIF などの新しい形式と比べてパフォーマンスが低いと述べています。 UI の場合、実際的な問題は、グラデーションのバンディング、透明な背景のギザギザのエッジ、高密度画面でのスケーリングのぼやけ、およびアプリの動作に応答する方法がないことです。
代わりに何を使用するか
アニメーションが何をする必要があるかによって選択してください。
- シンプルなスピナーまたはパルス: CSS アニメーションまたはインライン SVG。小さく、シャープで、動きを軽減するために簡単に一時停止できます。
- イラスト付きループまたはアイコン: Lottie またはアニメーション SVG。ベクター、スケーラブル、単純なアートワーク用に小さい。
- 写真または複雑な映像: ビデオ (WebM または MP4) またはアニメーション WebP/AVIF (GIF ではありません)。
- 成功またはエラーに変わるローダー: アプリの状態によって駆動される、ExodeUI や Rive などの状態ベースのランタイム。
ローダーは何が起こっているかを把握する必要があります
GIF は、リクエストに 1 秒かかったとしても 1 分かかったとしても同じようにループし、作業が完了したときにチェックマークになることはできません。状態ベースのローダーは、読み込みから成功またはエラーに移行し、進行状況を表示することができるため、回転する画像よりもはるかに多くのことを人々に伝えることができます。
アクセシビリティ
ループ GIF は、独自にモーション低減設定を尊重できません。 CSS、SVG およびランタイム アニメーションは、ユーザーがモーションを減らしたい場合に一時停止したり簡略化したりできます。また、ローダーに「結果の読み込み中」などのアクセス可能なラベルを付けて、スクリーン リーダー ユーザーが何が起こっているかを把握できるようにします。
覚えておきたい原則
- GIF パレットは最大 256 色を保持し、スケールが不十分です
- 単純なローダーには CSS または SVG を使用してください
- イラスト付きループには Lottie を使用し、映像にはビデオを使用します
- 読み込みが成功またはエラーになる必要がある場合は、状態ベースのランタイムを使用する
- 動きの軽減をサポートし、アクセス可能なラベルを追加します
よくある質問
出典
- Image file type and format guide — MDN ウェブ ドキュメント
- lottie-web — GitHub (Airbnb)
- prefers-reduced-motion — MDN ウェブ ドキュメント