本文へ移動
easeweb
ご相談
トピックを検索

キーボードやスクリーンリーダーで使えないカルーセル

トップページのカルーセルの矢印とドットがクリックしか受け付けないか、ボタンにしても、どのスライドを表示中か、スライドが変わったことを伝えません。

WCAG 2.2
SC 2.1.1ASC 4.1.2A
必須とする規格
Section 508 · EN 301 549(EU) · JIS X 8341-3
問題あり <div class="carousel-next"></div>
アクセシビリティの問題を示した図: Tabは矢印とドットを飛ばす。
01

問題

キーボード利用者は1枚目以外のスライドを表示できません。矢印とドットを操作できるようになっても、スクリーンリーダー利用者には、どのスライドを表示中か、変わったことが伝わりません。

02

試してみる

Tabキーで2枚目のスライドを表示し、それが表示中だとスクリーンリーダーに伝わるか確かめてください。

「問題1」では、Tabキーは矢印とドットを飛ばします。「問題2」ではキーボードで操作できますが、下の欄を見てください。どのドットも表示中とは読まれず、「次へ」やドットを押しても新しいスライドは読み上げられません。

問題あり 修正できますか?

紙と光

秋の展覧会、1月31日まで。

展覧会を見る
開館時間

スクリーンリーダーの読み上げ:

(Tabでカルーセルへ移動するか、ドットをクリック)

再現デモです。「問題あり」は意図的にアクセシブルでない状態にしています。

03

修正方法

矢印とドットを名前のあるボタンにし、表示中のドットを示し、新しいスライドを読み上げます。

  1. 1矢印とドットはすべて、名前のあるHTML標準のbuttonにする。
  2. 2表示中のドットには aria-current を付け、見た目はその属性から描く。
  3. 3ボタンで表示したスライドは、フォーカスを動かさずに読み上げる。
修正前

クリックしか受け付けない矢印とドット

<div class="carousel">  <div class="slides">    <div class="slide">      <h2>紙と光</h2>      <p>秋の展覧会、1月31日まで。</p>      <a href="/exhibitions/paper-and-light">展覧会を見る</a>    </div>    <div class="slide" hidden>      <h2>金曜は夜まで開館</h2>      <p>展示室とカフェは21時まで開いています。</p>      <a href="/visit">ご来館案内</a>    </div>    <div class="slide" hidden>      <h2>会員になる</h2>      <p>1年間入館無料。新しい展覧会をいち早くご覧いただけます。</p>      <a href="/membership">今すぐ入会</a>    </div>  </div>  <div class="carousel-prev"></div>  <div class="carousel-next"></div>  <div class="carousel-dots">    <span class="carousel-dot is-current"></span>    <span class="carousel-dot"></span>    <span class="carousel-dot"></span>  </div></div>
修正後 矢印とドットをボタンにする
<section class="carousel" aria-roledescription="カルーセル" aria-label="おすすめ">  <button type="button" class="carousel-prev">    <svg aria-hidden="true" focusable="false"><use href="#icon-previous"></use></svg>    <span class="visually-hidden">前のスライド</span>  </button>  <button type="button" class="carousel-next">    <svg aria-hidden="true" focusable="false"><use href="#icon-next"></use></svg>    <span class="visually-hidden">次のスライド</span>  </button>  <div class="slides" aria-live="polite">    <div class="slide" role="group" aria-roledescription="スライド" aria-label="3枚中1枚目">      <h2>紙と光</h2>      <p>秋の展覧会、1月31日まで。</p>      <a href="/exhibitions/paper-and-light">展覧会を見る</a>    </div>    <div class="slide" role="group" aria-roledescription="スライド" aria-label="3枚中2枚目" hidden>      <h2>金曜は夜まで開館</h2>      <p>展示室とカフェは21時まで開いています。</p>      <a href="/visit">ご来館案内</a>    </div>    <div class="slide" role="group" aria-roledescription="スライド" aria-label="3枚中3枚目" hidden>      <h2>会員になる</h2>      <p>1年間入館無料。新しい展覧会をいち早くご覧いただけます。</p>      <a href="/membership">今すぐ入会</a>    </div>  </div>  <div class="carousel-dots">    <button type="button" class="carousel-dot" aria-current="true"><span class="visually-hidden">スライド1</span></button>    <button type="button" class="carousel-dot"><span class="visually-hidden">スライド2</span></button>    <button type="button" class="carousel-dot"><span class="visually-hidden">スライド3</span></button>  </div></section>

この方法を選ぶ理由:まずHTMLの要素を使う

AI コーディングアシスタントで修正しますか? このガイドを Markdown で取得

04

修正の確認

マウスを使わない4つの確認

確認方法: キーボード、スクリーンリーダー、強制配色

4件中0件を確認済み

OS、ブラウザーと支援技術のバージョン、ビルド、実施日、各手順の実際の結果を記録してください。カルーセル、スライド、ライブラリを変更した際は、再度確認します。

制限

このサンプルは、どのアプリケーションでも同じ結果になることを保証するものではありません。扱うのは、矢印とドットに届くか、何を伝えるかです。自動で切り替わるカルーセルには、止める手段も必要です(2.2.2)。一時停止できない、流れる文字、カルーセル、アニメーションを参照してください。スライドにフォーカスが入ったときに切り替えを止める方法も扱っています。各スライドの文字と背景の写真のコントラスト(1.4.3)と、情報を伝える写真の代替テキストも、別に確認が必要です。

よくある問題を再現した学習用のサンプルです。実在のクライアントの診断結果ではありません。コードは出発点となる実装例のため、実際の製品でも確認してください。ここでは支援技術でのテスト結果は報告していません。

コードを更新しても、使いやすさを保つために

ガイドの内容を、コーディングエージェントやCIで使える開発ルールにまとめます。更新後は、キーボードとスクリーンリーダーで再テストし、問題が再発していないか確認します。

再テストの進め方