mcpField
C
css-animation-patterns

css-animation-patterns

github.com/oakossデザイン・UI20179 回インストール10 週間前に更新
リポジトリ

css-animation-patterns について

CSS によるインターフェースの動きを実装するためのリファレンススキルです。トランジション、キーフレーム、スクロール駆動アニメーション、ビュー遷移を扱い、合成プロパティの性能、動きを抑える設定、API のフォールバックを重視します。

主な機能

  1. 01トランジションとキーフレームアニメーション
  2. 02スクロール・ビュー駆動タイムライン
  3. 03SPA・MPA のビュー遷移
  4. 04コンポジターを意識した性能指針
  5. 05動きを抑える設定とフォールバック

活用シーン

  1. 01インターフェースの状態変化をアニメーション化
  2. 02スクロール連動の表示効果を作成
  3. 03ページやルートの切り替えに動きを追加
  4. 04動きの設定に配慮したローディング表示を作成

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/oakoss/agent-skills --skill css-animation-patterns

インストール後、Claude Code で/css-animation-patternsを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
scroll-driven.md
transforms-and-performance.md
transitions-and-keyframes.md
view-transitions.md

詳細

CSS アニメーションのパターン

概要

CSS アニメーションとトランジションを使用すると、キーフレーム、トランジション、変形に加え、最新のスクロール駆動型 API やビュー遷移 API によって、Web インターフェースでハードウェアアクセラレーション対応の動きを実現できます。滑らかな 60fps のパフォーマンスを保つため、アニメーションには合成プロパティ(transform、opacity、filter)のみを使用し、常に prefers-reduced-motion を尊重してください。

ブラウザーのレンダリングパイプラインは、Style、Layout、Paint、Composite の 4 つの段階で構成されます。合成のみのプロパティをアニメーションさせると、Layout と Paint が完全にスキップされ、GPU のコンポジタースレッド上で実行されます。これは CSS アニメーションにおいて、最も重要なパフォーマンス原則です。

最新の CSS には、強力な API が 2 つ追加されています。スクロール駆動型アニメーションは、キーフレームの進行を時間ではなくスクロール位置や要素の表示状態に連動させます。また、View Transitions APIは、SPA と MPA の両方で、DOM の状態間にスナップショットを使用したアニメーション付き遷移を作成します。

使用する場面: 要素の状態変化、ページ遷移、スクロール連動エフェクト、ローディングインジケーター、マイクロインタラクション、ルート変更アニメーション、スクロールに応じた表示パターン、パララックスエフェクト、スクロールに連動する進行状況インジケーター。

使用しない場面: 複雑な物理シミュレーション(JS アニメーションライブラリを使用)、Canvas/WebGL のレンダリング、フレーム単位でスクリプト制御する必要があるアニメーション(Web Animations API を直接使用)、高度なドラッグ&ドロップ操作(JS でポインターイベントを使用)。

ブラウザーサポートの概要

機能ChromeFirefoxSafari
トランジション、キーフレーム、変形完全対応完全対応完全対応
個別の変形プロパティ104+72+14.1+
@starting-style117+129+17.5+
transition-behavior: allow-discrete117+129+17.4+
スクロール駆動型アニメーション115+未対応26+
同一ドキュメント内のビュー遷移111+144+18+
ドキュメント間のビュー遷移126+未対応18+
view-transition-class125+144+18+

新しい機能を段階的に利用するには、@supports を使用してください。アニメーションなしでも機能するフォールバックを必ず用意してください。

クイックリファレンス

パターンAPI主なポイント
状態遷移transition: property duration easingプロパティの変更時に実行されます。パフォーマンスのため、合成処理のみで動作します
離散的な遷移transition-behavior: allow-discretedisplay、visibility の遷移を有効にします
登場アニメーション@starting-style { ... }DOM に追加された要素の初期状態を指定します
キーフレームアニメーション@keyframes name + animation shorthand複数ステップのシーケンスに対応し、forwards の塗りつぶしモードをサポートします
変形transform: translate() scale() rotate()GPU 合成され、レイアウトの再計算が発生しません
個別の変形translate、rotate、scale異なるタイミングで個別にアニメーションできます
スクロール進行度animation-timeline: scroll()アニメーションをコンテナーのスクロール位置に連動させます
ビュー進行度animation-timeline: view()アニメーションをスクロールポート内の要素の表示状態に連動させます
アニメーション範囲animation-range: entry 0% entry 100%アニメーションを駆動するタイムラインの区間を制御します
名前付きスクロールタイムラインscroll-timeline-name + scroll-timeline-axis要素間で再利用できるスクロールタイムライン
名前付きビュータイムラインview-timeline-name + view-timeline-axis表示状態の追跡に使える、再利用可能なビュータイムライン
ビュー遷移(SPA)document.startViewTransition(callback)スナップショットベースで DOM の更新をアニメーション化します
ビュー遷移(MPA)@view-transition { navigation: auto }ドキュメント間の遷移に対応します。同一オリジンに限ります
遷移名view-transition-name: hero要素を識別し、独立した遷移グループに分けます
遷移クラスview-transition-class: card名前付き要素をグループ化し、共通の遷移スタイルを適用します
遷移タイプstartViewTransition({ types: [...] })ナビゲーションの方向に応じた条件付きスタイルを指定します
GPU ヒントwill-change: transform要素をコンポジターレイヤーに昇格します。使用は控えめにしてください
モーション設定@media (prefers-reduced-motion: reduce)アクセシビリティのため、アニメーションを無効化または簡略化します
カスタムイージングcubic-bezier() or linear()タイミング曲線を細かく調整できます。複数点のイージングには linear() を使います
ステップイージングsteps(n, jump-term)フレーム単位の離散的なアニメーションです
アニメーション合成animation-composition: accumulate同じプロパティに対する複数のアニメーションの合成方法を制御します
段階的な遅延animation-delay: calc(var(--i) * 60ms)CSS カスタムプロパティを使って要素ごとに遅延を設定します
レンダリングの封じ込めcontain: layout styleレンダリング範囲を分離し、アニメーションのパフォーマンスを向上させます
コンテンツの可視性content-visibility: auto画面外のコンテンツのレンダリングをスキップします

よくある間違い

間違い正しいパターン
width、height、top、leftをアニメーションさせるレイアウトに影響しないアニメーションにはtransform: translate()とscale()を使います
すべての要素にwill-changeを追加する頻繁にアニメーションする要素にのみ適用し、アニメーション後に削除します
prefers-reduced-motionへの対応がないモーションを@media (prefers-reduced-motion: no-preference)で囲みます
あらゆる場所でtranslateZ(0)のハックを使う代わりにwill-changeを使い、必要な場合にのみ適用します
animationのショートハンドより前にanimation-timelineを宣言するanimationの後にanimation-timelineを宣言します(ショートハンドによってautoにリセットされます)
スクロール駆動アニメーションにanimation-durationを設定する再生時間はスクロールによって制御されます。autoを使うか省略し、Firefoxとの互換性のために1msを設定します
view-transition-nameは一意である必要があることを忘れる対象となる各要素には、ページスナップショットごとに異なる名前が必要です
スクロール駆動アニメーションのフォールバックを用意しないプログレッシブエンハンスメントには@supports (animation-timeline: scroll())を使います
GPU合成を期待してbackground-colorをアニメーションさせる安定してGPU合成されるのはtransform、opacity、filterのみです
transition: allを使う予期しないトランジションやパフォーマンス低下を避けるため、プロパティを正確に指定します
JavaScriptアニメーションでDOMの読み取りと書き込みを交互に行うまず読み取りをまとめてから書き込むか、requestAnimationFrameを使います
ReactのビュートランジションでflushSyncを使わないReactは更新をまとめるため、コールバック内でnavigate()をflushSyncで囲みます
機能チェックなしでstartViewTransitionを呼び出す必ずif (!document.startViewTransition)でフォールバックを用意します

委任

  • アニメーションの実装:Exploreエージェントを使って、参考ファイル内のパターンを見つけます
  • パフォーマンス監査:Taskエージェントを使って、コンポーネント全体のアニメーションパフォーマンスをレビューします
  • アクセシビリティレビュー:Taskエージェントを使って、prefers-reduced-motionへの対応状況を確認します
  • コードレビュー:アニメーション関連のPRレビューをcode-reviewerエージェントに委任します

ux-designerスキルが利用可能な場合は、ビジュアルモーションデザインに関する判断を委任します。 それ以外の場合は、次を推奨します:npx skills add oakoss/agent-skills --skill ux-designer

参考資料

コメント