トピックを検索
一時停止ボタンのないまま流れ続ける背景動画
トップページの見出しの後ろで、消音の動画がページを開いた瞬間から繰り返し流れ続け、止める手段がページのどこにもない
<video autoplay muted loop playsinline> 問題
動きで気が散る人や、画面拡大ソフトで読む人が、見出しの後ろで流れ続ける映像を止められない
あるコーヒー焙煎店のトップページは、映像から始まります。焙煎した豆が山の上に転がり落ちる映像が、「毎週月曜日に焙煎する新鮮なコーヒー」という見出しと「コーヒーを見る」ボタンの後ろ一面に流れています。デザインは映像の上に言葉だけを置いたすっきりしたもので、音に驚かせないよう、動画は消音です。再生はループで、8秒の映像が終わるとすぐ最初に戻り、ページを開いている間ずっと繰り返します。
一時停止ボタンはありません。ヒーローをクリックしても、ポインターを重ねても何も起きません。Tabキーを押すと、メニューから「コーヒーを見る」、その下の今週のコーヒーへと進みますが、動画を止めるものはどこにもありません。スマートフォンでは最初の画面いっぱいにヒーローが広がり、画面のどの文字の後ろでも、豆が転がり続けます。
達成基準2.2.2「一時停止、停止、非表示」の対象は、動く内容のうち、自動で始まり、5秒を超えて続き、ほかの内容と並行して表示されるものです。見出しの後ろの映像は3つの条件をすべて満たします。autoplay で始まり、loop で続き、見出しやボタン、ページのほかの部分も同時に表示されています。そのため、一時停止、停止、非表示にする手段が必要ですが、このページにはありません。動画には controls がなく、pause() を呼ぶページ独自のボタンもありません。
muted を付けても解決しません。消えるのは音だけで(音は1.4.2「音声の制御」の対象です)、動きはそのまま残ります。しかも、音の出ない動画は、利用者がまだ何もクリックしていなくても、ブラウザーが自動再生を許します。音のある動画なら自動再生がブロックされることがあっても、消音のループはほとんどの訪問で動き出します。
ヒーローはページの先頭にあるため、まだ何も読まないうちに動きが始まり、見出しを読んで次にどこへ進むかを決める間も、ずっと目に入り続けます。
10グループ中2グループに影響
- 全盲 (影響なし)
- 弱視 (影響あり)
- 色覚 (影響なし)
- ろう (影響なし)
- 難聴 (影響なし)
- 発話 (影響なし)
- 手の操作 (影響なし)
- 筋力・可動域 (影響なし)
- 認知 (影響あり)
- 光過敏 (影響なし)
- 言語・認知・学習の能力が限られる 見出しやページの最初の文章のすぐ後ろで映像が動くため、注意の障害がある人は何度も動きに目を引き戻され、読みに来た内容に集中できません。ページには、映像を止める手段もありません。
- 視覚が限られる 画面拡大ソフトでは、見出しが表示範囲いっぱいに広がり、その文字の後ろ一面で豆が転がり続けます。読んでいる言葉と一緒に、動きも拡大されます。
この診断ツールは、controls のない動画のうち、音を出さずに(消音か、音声トラックがない状態で)自動で再生され、ループするか5秒を超えて続くものをすべて挙げます。そばに「一時停止」「停止」「再生」を表す名前のボタンが見つかったか、そのボタンが通常時に隠れていたり完全に透明だったり、Tabの順序から外れていたりしないかも添えます。ただし、ボタンを押して本当に動画が止まるかは確かめられず、動画から離れた場所にある操作や別の名前の操作も見つけられないため、どれも人が確認する項目です。autoplay 属性を使わずにスクリプトで再生する動画は、ページを読み込んだ時点で再生中の場合だけ見つかります。AIによる修正は、動きを減らす設定かどうかで再生を分ける処理を加えただけで終わることがよくありますが、その設定を見つけた人にしか効きません。ヒーローにポインターを重ねたときだけ現れる一時停止ボタンを加える修正もありますが、キーボードでは一度も表示されず、スマートフォンにはホバーするポインターがありません。
試してみる
見出しの後ろの動画を、まずマウスで、次にTabキーで止めてみましょう
ヒーローをクリックし、ポインターを重ね、Tabキーでページを進んでみてください。ショップの中に、豆の動画を止めるものはありません。「デモを停止」はこの学習ページのボタンで、ショップのものではありません。次に修正を適用し、一時停止ボタンを押すか、短い動画がひとりでに止まるのを確かめてください。
問題あり 修正できますか?
修正方法
動画を止められるようにするか、5秒以内に終える
<section class="hero"> <video class="hero-video" src="beans.mp4" poster="beans.jpg" autoplay muted loop playsinline></video> <div class="hero-text"> <h1>毎週月曜日に焙煎する新鮮なコーヒー</h1> <p>シングルオリジンの豆を、焙煎したその週にお届けします。</p> <a href="/shop">コーヒーを見る</a> </div></section>問題点3点
- 動画はページの読み込みと同時に始まり、
loopによって、ページを開いている間ずっと8秒の映像を繰り返します。 mutedで音は消えますが、動き続けます。controlsがなく、ページ独自のボタンもないため、マウスでもキーボードでもタッチでも止められません。
ヒーローの一時停止ボタン
<section class="hero"> <video class="hero-video" src="beans.mp4" poster="beans.jpg" muted loop playsinline aria-hidden="true"></video> <button type="button" class="hero-pause"> <svg aria-hidden="true" focusable="false"> <use href="#icon-pause"></use> </svg> <span class="visually-hidden">背景動画を一時停止</span> </button> <div class="hero-text"> <h1>毎週月曜日に焙煎する新鮮なコーヒー</h1> <p>シングルオリジンの豆を、焙煎したその週にお届けします。</p> <a href="/shop">コーヒーを見る</a> </div></section>修正の手順6ステップ
- ヒーローの中の言葉より前に、HTML標準の
<button>を置きます。キーボードでは「コーヒーを見る」より先に届きます。見た目は右上の角に置くので、読む順序でも最初に来ます。ホバーしなくても、どの画面幅でも常に表示されます。 - 白いアイコンの下に暗い円を敷き、映像の最も明るいコマでも最も暗いコマでもコントラストを保ちます。
- ボタンで動画そのものの
pause()とplay()を呼びます。動画は、もう一度押すまで止まったままです。 - アイコンと隠した名前は、動画の
playとpauseのイベントに合わせて「背景動画を一時停止」と「背景動画を再生」の間で切り替えます。ブラウザーが再生を始めなかったときも、ボタンは正しい状態を伝えます。 - 動画は雰囲気づくりのためだけのものなので、
aria-hidden="true"でスクリーンリーダーから隠し、何を操作するかはボタンに伝えさせます。 autoplayを外してスクリプトで再生を始め、動きを減らす設定にしている人には止まったままにします。これは補助です。2.2.2を満たすのはボタンで、スクリプトが動かなければ何も動きません。
これで修正前の例は直り、ループする映像もデザインもそのままで、2.2.2を満たします。
この方法を選ぶ理由:自動で動くものは、止められるようにする
どちらも満たします。一時停止ボタンは、デザインの中心だった終わりのない映像を残せます。ヒーローの角のボタンと数行のスクリプトが必要で、利用者がボタンを見つけるまで、豆は全員の前で動き続けます。1回だけ再生する短い動画は作る手間がほとんどなく、誰も何かを探す必要がありませんが、デザイナーはループを手放します。映像は伝えたいことを4秒で伝え、写真として成り立つコマで終わる必要があります。オープニングの映像で足りるなら短い動画を、動く映像がブランドの一部なら一時停止ボタンを選びます。
ヒーローにポインターがある間や、中にフォーカスがある間に止める仕組みは、親切として残してもかまいませんが、2.2.2が求める手段にはなりません。達成基準の解説書は、フォーカスが動く内容にある間しか続かない一時停止を認めていません。ホバーしたときだけ現れる一時停止ボタンも同じです。スマートフォンにはホバーするポインターがなく、opacity: 0 で隠すとキーボードは見えないボタンに届き、visibility: hidden で隠すとキーボードはそもそも届きません。
ボタンには、ほかのアイコンボタンと同じ条件がそろっている必要があります。名前、後ろにあるどの色に対しても3:1のコントラストがあるアイコン、24×24ピクセル以上の大きさ(上のボタンは44ピクセル)、どのコマの上でも見えるフォーカス表示(上の白い枠は、内側と外側に暗い帯があります)、一緒に切り替わるアイコンと名前です。押すと名前が変わるボタンは、スクリーンリーダーによっては新しい名前を読み直さないため、利用者が使うものでも確認します。記号を知らない人のために、アイコンの横に「一時停止」と言葉を添えるサイトもあります。
利用者が選んだ状態は保ちます。sessionStorage などに訪問中保存し、動画を再生する前に読むことで、再読み込みしたときや同じヒーローのある次のページで、また動き出さないようにします。電池を節約するために、ヒーローが画面の外に出たら動画を止めるスクリプトはかまいませんが、利用者が止めた動画を、画面に戻ったときに再生してはいけません。
HTML標準の controls でも一時停止できますが、ヒーローの上に再生バーが表示され、再生位置のバーなど、ヒーローには要らない操作も付くため、多くのデザインでは上のような1つのボタンを使います。
動きを減らす設定は尊重する価値があります。一時停止ボタンの方法では、その設定のときに動画を止めたままにしています。短い動画でも、その設定のときは autoplay を付けないようにできます。ただし、それだけでは直りません。動きで気が散る人がその設定を知っているとは限らず、2.2.2が求めているのはページ上の仕組みです。操作をきっかけに始まるアニメーションにこの設定が求めることは、動きを減らす設定を無視するアニメーションで扱います。
短い動画の5秒は、ファイルを読み込み終えたときからではなく、動画が動き始めたときから数えます。コンテンツ管理システムで編集者がヒーローの動画を差し替えられる場合は、そこで長さを確認し、ボタンのないまま長い動画が公開されないようにします。
ほかの内容と並んで自動で動く映像には、どこでも同じ問題が起きます。どれも、同じ2つの方法で直せます。
- ページの下のほうのセクションでループする動画。たとえば、回転し続ける商品の映像。
- 動画の代わりに置かれ、終わりなくループするアニメーションGIF、WebP、Lottie。
- Vimeoの背景用オプションや、YouTubeのコントロールを非表示にして、自動再生とループを設定した埋め込み動画。
映像ではない流れる文字やカルーセルなどは、一時停止できない、流れる文字、カルーセル、アニメーションで扱います。脈打つボタンや回るアイコンは、ふつうは自然に止まるようにする別の方法で直します:止まらずに動き続けるボタンやバッジのアニメーション。
デザインの案
止められるようにすれば、映像は残せる
ヒーローの後ろの動画を止める操作を、4通りに描きました。それぞれマウスで試してから、マウスを使わずにTabキーで進んでみてください。3つはホバーしなくても見えて押せますが、1つはマウスにしか姿を見せません。
デザインファイルで
- ヒーローを、一時停止の操作が常に見える状態で描く。ホバー時だけでなく、止めた後の「再生」の状態も描く。
- 操作には暗い色か明るい色の下地を付け、映像の最も明るいコマでも最も暗いコマでも3:1以上を保つ。
- 最小24 × 24ピクセルで描き、映像の上でのフォーカスの枠も描く。
- 操作を置かない場合は、動画が5秒以内で1回だけ再生されることを、ヒーローの横に書く。
合格
毎週月曜日に焙煎
言葉の入った一時停止ボタン ヒーローの下の角に置いた濃い色のボタンです。アイコンと「一時停止」の文字は#21160fの上の白で17.70:1あり、どのコマの上でも読めます。記号を知らない人にも言葉で伝わり、アイコンと一緒に「再生」に変わります。毎週月曜日に焙煎
ヘッダーの「動き」スイッチ サイトのヘッダーにある小さな「動き」スイッチで、この動画とサイト内のほかの動くものをすべて止め、ページを移っても止まったままにします。ヒーローの映像の上には何も描かずに済みます。スイッチのオフの状態も、どのページでも同じ位置に描きます。毎週月曜日に焙煎
静止画のヒーローと「焙煎を見る」 ヒーローは映像の1コマの静止画で始まり、「焙煎を見る」ボタンを添えます。押すまで何も動かず、押した後は同じボタンで止められます。最初の画面は誰にとっても落ち着いていて、見たい人は映像を見られます。
不合格
毎週月曜日に焙煎
ホバーで現れる一時停止アイコンWCAG 2.2.2 ポインターをヒーローに重ねている間だけ角のアイコンが現れ、それ以外のときは映像の上に何もありません。スマートフォンにはホバーするポインターがなく、Tabキーで移動すると、見えないままのアイコンにフォーカスが移ります。サンプルは4秒で止まりますが、実際のパターンはループし続けます。
修正の確認
5項目
確認方法: キーボード、タッチ、マウス、動きを減らす設定、スクリーンリーダー
OS、ブラウザーと支援技術のバージョン、ビルド、実施日、各手順の実際の結果を記録してください。ヒーロー、その動画、再生のスクリプトを変更した際は、再度確認します。
制限
このサンプルは、どのアプリケーションでも同じ結果になることを保証するものではありません。扱うのは動きだけです。映像の上の文字は、どのコマの上でもコントラストが必要で、これはブランドカラーや写真の上でコントラストが足りない文字で扱います。1秒間に3回を超えて点滅する映像は、2.3.1の別の確認項目で、閃光の分析ツールで確認します:発作を誘発するおそれのある点滅するバナーや動画。音付きで再生される動画は止められない自動再生の音声で、見るための動画は字幕のない動画と、確認されていない自動字幕とキーボードで再生できない、または字幕ボタンのない動画で扱います。動画が止まった後のページが落ち着いて読めるかは、人が判断する必要があります。
よくある問題を再現した学習用のサンプルです。実在のクライアントの診断結果ではありません。コードは出発点となる実装例のため、実際の製品でも確認してください。ここでは支援技術でのテスト結果は報告していません。
EaseWebのサービス
修正した問題を、次のリリースで再発させない
このガイドのような修正方法を、コーディングエージェントが従うルールと、CIのチェックに組み込みます。あわせて定期的に、キーボードとスクリーンリーダーで手動の再テストを行います。