トピックを検索
止まらずに動き続けるボタンやバッジのアニメーション
目を引くために申し込みボタンを脈打たせ、その動きを無限に繰り返す設定にしているため、ページを開いている間ずっと、ほかの内容の横で動き続けます。
animation: pulse 1.5s ease-out infinite; 問題
注意の障害がある人や、ボタンの横の文章を読んでいる人は、止まらない脈動に何度も目を引き戻され、ページにはそれを止める手段がありません。
あるプロジェクト管理アプリのトップページには、料金と、プランに含まれる内容を説明する3行の横に、「無料で試す」という大きなボタンが1つあります。見逃されないように、このボタンは脈打っています。ボタンから輪が広がって消える動きが、ページを読み込んだ瞬間から1.5秒ごとに、ページを開いている間ずっと続きます。「脈打つボタン」のサンプルからコピーした数行のCSSで、その最後が infinite になっています。同じことは、形を変えてウェブのあちこちで起きています。光り続ける「New」のバッジ、「下へスクロール」を伝えて跳ね続ける矢印、揺れ続けるチャットの吹き出し、内容が読み込まれた後もきらめき続けるスケルトン表示、回り続ける飾りのアイコンです。
達成基準2.2.2「一時停止、停止、非表示」は、自動で始まり、5秒を超えて続き、ほかの内容と並んで表示される、動く、点滅する、スクロールする情報に適用されます。この脈動はページの読み込みとともに始まり、終わらず、訪問者が読んでいる文章のすぐ横にあります。そのため、一時停止、停止、非表示にする仕組みが必要ですが、ページにはありません。達成基準の解説書は、アニメーションを含め、動きを感じさせるすべての内容を対象にしており、情報と飾りを区別していません。目的が何であれ、動きがページのほかの部分から注意をそらすことが問題だからです。達成基準自身の出口は5秒です。5秒以内に自然に止まる動きには操作が不要で、達成方法G11とG152がまさにそれを説明しています。5秒未満で終わる点滅と、数回で止まるように設定したアニメーション画像です。飾りであれば、これが簡単な直し方です。
ボタンは、ページの中で見てもらうために作られた唯一のものです。そのため、料金、プラン、条件という、人が読む内容のちょうど真ん中にあります。
10グループ中2グループに影響
- 全盲 (影響なし)
- 弱視 (影響あり)
- 色覚 (影響なし)
- ろう (影響なし)
- 難聴 (影響なし)
- 発話 (影響なし)
- 手の操作 (影響なし)
- 届く範囲・力 (影響なし)
- 認知 (影響あり)
- 光過敏 (影響なし)
- 言語・認知・学習の能力が限られる 文章の横の脈動が何度も目を引き戻すため、注意の障害がある人は、読みに来た料金や機能に集中できません。止める手段もありません。
- 視覚が限られる 画面拡大ソフトでは、脈動のたびに視線が引き戻されます。画面に近づいて読む人には、広がる輪がボタンの横の文字にかかって見えます。
この診断ツールは、終わりなく、または5秒を超えて繰り返すCSSアニメーション、スクリプトのアニメーション、SVGアニメーションをすべて見つけ、時間の長さと、そばに一時停止ボタンがあるかを添えて、人が確認する項目として挙げます。動きが飾りか情報か、不可欠かどうかは判断できないため、問題としてではなく確認項目として挙げます。数秒ごとにスクリプトがクラスを付け直して再び始めるアニメーションや、アニメーションGIFは見えません。AIツールは、脈動を動きを減らす設定のメディアクエリで囲んで終えることが多く、その設定を見つけた人にしか効果がありません。あるいは一時停止ボタンを提案しますが、飾りにはまったく大げさです。ネット上の「目を引くボタン」のサンプルの多くは infinite で終わるため、AIが書くCSSもこの問題を一緒に持ち込みがちです。
試してみる
ボタンを5秒見てから、ポインターを乗せ、Tabキーを押してください。
下の表示は、ボタンが動いている時間を数えます。問題のある側では止まりません。「デモを停止」はこの学習ページのボタンで、アプリのものではありません。
問題あり 修正できますか?
0秒動いていて、この後も続きます。
修正方法
脈動を数回で5秒以内に止めるか、ボタンを動かさないか、ホバーとフォーカスのときだけ動かします。
- 1飾りは、自動で5秒を超えて動かさない。
- 2自動で始まる動きは no-preference のクエリの中に書く。
- 3ホバーとフォーカスで始めるのは短いアニメーション1回で、繰り返さない。
<a class="cta" href="/signup">無料で試す</a>3回脈打って止まる
<a class="cta" href="/signup">無料で試す</a>この方法を選ぶ理由:動きはオプトインにする
infinite のため、ページを開いている間ずっと、すべての訪問者に対して1.5秒ごとに輪が広がり、ページにはそれを止めるものがありません。
変わるのは1つの値だけです。infinite が 3 になります。1.5秒を3回で4.5秒のうちに終わるため、ページが開いたときには目を引き、その後はボタンが止まって、訪問者は落ち着いて読めます。no-preference の中に書いてあるため、動きを減らしたいと伝えている人には表示されません。これが成り立つのは、何もアニメーションを再び始めない間だけです。数秒ごとやスクロールのたびにクラスを付け直すスクリプトがあると、また終わりのない動きに戻ります。回数か長さを変えるときは、回数×長さを5秒未満に保ちます。
どの方法も2.2.2を満たします。3回で止める方法は、値を1つ変えるだけで、デザインが求めた「ページが開いたときに目を引く」ことを保ち、止まる仕組みも組み込まれています。動かないボタンは、負担がなく誰の気も散らしませんが、大きさ、色、余白でデザインが目を引く役目を担う必要があります。ホバーとフォーカスで動かす方法は、ページの離れた場所から目を引き寄せることがありません。それが利点であり、代償でもあります。注意を引くのではなく、反応を返すものです。動きが依頼の一部なら3回で止める方法を、デザインを変えられるなら動かないボタンを、動きがもともと反応を返すためのものなら、ホバーとフォーカスで動かす方法を選びます。
5秒は、動き始めてからすべての繰り返しを通して数えます。animation-iteration-count × animation-duration に、スクリプトが繰り返しの間に入れる待ち時間を加えたものです。2秒の animation-delay の後に1.5秒を3回動く脈動は、4.5秒動くため満たします。
動きを減らす設定のメディアクエリは、終わりの代わりにはなりません。動きで気が散る人の多くはその設定を知らず、2.2.2はページ自体が止まることを求めています。それでも、動きを no-preference の中に書く価値はあります。負担がなく、設定している人の役に立つためです。動きを減らす設定を無視するアニメーションも参照してください。
ループする飾りには、どれも同じ方法が使えます。終わりを作るか、まったく動かさないかです。
- 光ったり点滅したりする「New」や「Sale」のバッジ:数回で止めるか、より強い色の動かないバッジにします。
- 跳ねる「下へスクロール」の矢印:2〜3回跳ねたら止めます。
- きらめくスケルトン表示:内容が届いたらきらめきを止め、読み込みが長引くときは動かない灰色の四角にします。
<animateTransform repeatCount="indefinite">で描いたSVGアイコン:repeatCountに数を指定するか、動かないアイコンにします。- ループするアニメーションGIFやLottie:数回だけループするように書き出すか、プレーヤーの設定で止めます。
読み込み中を示すスピナーは別です。達成基準の解説書は、ページのどこも使えない間の読み込みアニメーションを、ほかの内容と並んでいないため不可欠なものとして扱っています。ボタンやパネルの中のスピナーのように、読める内容の横にあるものは、読み込みが終わったら止めなければなりません。そこで5秒を超えて回り続ける可能性があるなら、ほかの動きと同じく2.2.2の対象です。数秒たったら、「読み込み中…」のような動かない文字の状態表示か、作業に合わせてだけ進む進行状況バーに置き換えます。
流れる文字、たとえばティッカーや自動で切り替わるカルーセルは、5秒以内に終わらせると読めないため、一時停止ボタンが必要か、まったく動かさない必要があります。これは別のガイドで扱います:一時停止できない、流れる文字、カルーセル、アニメーション。
AI コーディングアシスタントで修正しますか? このガイドを Markdown で取得
修正の確認
5つの確認
確認方法: 動きを減らす設定、キーボード、マウス、ズーム
OS、ブラウザーと支援技術のバージョン、ビルド、実施日、各手順の実際の結果を記録してください。デザイン、CSSフレームワーク、アニメーションのライブラリを変更した際は、再度確認します。
制限
このサンプルは、どのアプリケーションでも同じ結果になることを保証するものではありません。扱うのは動きだけです。1秒間に3回を超える閃光は、2.3.1の別の確認項目で、目視ではなく閃光の分析ツールで確認します。アニメーションが飾りか情報か、止まった後のページが落ち着いて読めるかは、人が判断する必要があります。
よくある問題を再現した学習用のサンプルです。実在のクライアントの診断結果ではありません。コードは出発点となる実装例のため、実際の製品でも確認してください。ここでは支援技術でのテスト結果は報告していません。
コードを更新しても、使いやすさを保つために
ガイドの内容を、コーディングエージェントやCIで使える開発ルールにまとめます。更新後は、キーボードとスクリーンリーダーで再テストし、問題が再発していないか確認します。