diff --git a/README.md b/README.md index b0adf7c..ce1f6cd 100644 --- a/README.md +++ b/README.md @@ -688,6 +688,51 @@ CSP を `Page.setBypassCSP` で迂回すると本番と異なる絵を撮るこ 比較するだけなので、キャレット隠蔽やアニメーション静止は撮影側で行うこと (Playwright なら `caret: 'hide'` / `animations: 'disabled'` に相当)。 +#### `prefers-reduced-motion` のエミュレーション(プロジェクト単位・既定 OFF) + +プロジェクト設定の `emulate_reduced_motion`(`PATCH /v1/projects/{id}`)を +有効にすると、storybook モードの撮影を `prefers-reduced-motion: reduce` を +エミュレートした状態で行う。ページのナビゲーション前に +`Emulation.setEmulatedMedia` で一度設定するので、CSS メディアクエリにも、 +初期化時に `matchMedia` を読む JS にも、実利用者が OS で reduce を +設定したときと同じ条件で見える。 + +**効く範囲は狭い。** 上の静止機構が `getAnimations()` に載るもの +(CSS animation / transition / Web Animations)を実装の行儀に依存せず +止めるのに対し、reduced-motion が動きを止められるのは +**canvas / `requestAnimationFrame` など JS が毎フレーム描き直す実装のうち、 +`prefers-reduced-motion` を自分で尊重するものだけ**である。 + +- **効くもの**: rAF / canvas 駆動で、かつメディアクエリ(CSS)や + `matchMedia`(JS)を見て動きを抑える実装 +- **効かないもの**: + - メディアクエリを見ない rAF / canvas 実装(尊重しない実装に + ブラウザ側から強制する手段は無い) + - アニメーション画像(GIF / APNG)・`