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

キーボードでもスクリーンリーダーでも選べない星評価

レビューのフォームで、クリックした星まで塗られる5つの星を、クリックのハンドラー付きのspanや、display: noneで隠したラジオボタンで作っています。そのためTabは星に届かず、スクリーンリーダーには評価が伝わらず、選んだ評価は塗られた星の見た目にしか表れません。

WCAG 2.2
SC 2.1.1ASC 4.1.2ASC 1.3.1A
必須とする規格
Section 508 · EN 301 549(EU) · JIS X 8341-3
問題あり <span class="star" onclick="rate(4)">
アクセシビリティの問題を示した図: 手の操作:星はどうやって選ぶの?
01

問題

キーボードやスイッチの利用者は評価を選べず、スクリーンリーダーの利用者には星も、どれを選んだかも伝わらないため、商品を評価することも、付けた評価を確かめることもできません。

02

試してみる

星をクリックしてから、マウスを使わずに、Tabで星へ移動し、矢印キーで星4つを付けてください。

マウスなら、どちらの作り方でも星が塗られます。下の欄に、フォーカスの移動や選択の変化に合わせたスクリーンリーダーの読み上げが出ます。星そのものや、どれを選んだかは読み上げられるでしょうか?「問題2」の星は、本物のラジオボタンをdisplay: noneで消して作っています。

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

総合評価

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

(Tabでフォームを移動)

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

03

修正方法

星を、設問で名前を付けた一つのラジオボタンのグループとして作り、各星に値で名前を付けます。

  1. 1星はラジオボタンか、aria-checkedを持つrole="radio"で作り、設問で名前を付けた一つのグループにまとめる。
  2. 2各星には「星1つ」から「星5つ」のように、値で名前を付ける。
  3. 3塗られた星とフォーカスの枠は、チェックとフォーカスの状態から描く。
修正前

Onclick付きの5つのspan

<form action="/reviews" method="post">  <p class="question">総合評価</p>  <div class="stars">    <span class="star" onclick="rate(1)"></span>    <span class="star" onclick="rate(2)"></span>    <span class="star" onclick="rate(3)"></span>    <span class="star" onclick="rate(4)"></span>    <span class="star" onclick="rate(5)"></span>  </div>  <input type="hidden" name="rating">  …  <button type="submit">レビューを投稿</button></form>
修正後

描いた星の上にラジオボタンを重ねる

<form action="/reviews" method="post">  <fieldset class="stars">    <legend class="question">総合評価</legend>    <label class="star">      <input type="radio" name="rating" value="1">      <span class="visually-hidden">星1つ</span>    </label>    <label class="star">      <input type="radio" name="rating" value="2">      <span class="visually-hidden">星2つ</span>    </label>    <label class="star">      <input type="radio" name="rating" value="3">      <span class="visually-hidden">星3つ</span>    </label>    <label class="star">      <input type="radio" name="rating" value="4">      <span class="visually-hidden">星4つ</span>    </label>    <label class="star">      <input type="radio" name="rating" value="5">      <span class="visually-hidden">星5つ</span>    </label>  </fieldset>  …  <button type="submit">レビューを投稿</button></form>

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

AI コーディングアシスタントで修正しますか? このガイドを Markdown で取得、または全ガイドをコーディングエージェントで使う。

04

デザインの案

キーで選べさえすれば、評価は星でも数字でも顔でも描けます。

評価の描き方を4通り並べました。クリックしてから、マウスを使わずにTabと矢印キーで試してください。3つは適合します。残る1つは、マウスなら半分の星を付けられますが、キーでは付けられません。

デザインファイルで

  • デザインファイルに、星は5つの選択肢を持つ一つの設問、つまりラジオボタンのグループだと書き、ラジオボタンで作られるようにする。
  • 星の上に設問を書き、各星には、スクリーンリーダーが読み上げる「星1つ」から「星5つ」の名前を付ける。
  • Tabで移動し、矢印キーで選択を動かしたときの見た目として、フォーカスの枠が付いた星を描く。
  • 何も選んでいないときの評価を描き、一度選んだ後に取り消せるかどうかを書く。

合格

  • 総合評価
    両端に言葉を添えた数字の円 1から5の数字を入れた直径40pxの円を5つ並べ、両端の下に「不満」と「とても満足」を添えます。アンケートでよく見る形です。数字がそのまま評価なので、ひと目で、白黒でも読み取れます。選んだ円は#1a1a1aで塗られ、白に対して17.40:1です。
  • 総合評価 顔を選んでください
    選んだ顔の言葉が下に出る表情の列 とても不満からとても満足までの5つの顔に、それぞれの意味で名前を付け、選んだ顔の言葉を列の下に書きます。顔の表情を読み取れなくても伝わります。選んだ顔には淡い琥珀色と、#b45309の輪(白に対して5.02:1)が付きます。
  • 総合評価
    控えめな「取り消す」が付く星 空のままでもよい評価には戻り道が必要です。選んだ星は、キーでは選択を外せないからです。星を選ぶと、星の後に#4b5563の下線付きの「取り消す」(7.56:1)が現れ、マウスでもキーボードでも星を空に戻せます。

不合格

  • 総合評価
    ポインターの位置で決まる半分の星WCAG 2.1.1 4つ目の星の左半分をクリックすると3.5になりますが、Tabと矢印キーでは星1つ単位でしか移れず、半分はどのキーでも付けられません。半分が必要なら選択肢を10個描き、必要でなければ半分の星はやめます。
05

修正の確認

5つの確認

確認方法: キーボード、スクリーンリーダー、マウス、強制配色、タッチ

5件中0件を確認済み

OS、ブラウザーと支援技術のバージョン、ビルド、実施日、各手順の実際の結果を記録してください。評価のコンポーネントやテーマを変更した際は、再度確認します。

制限

このサンプルは、どのアプリケーションでも同じ結果になることを保証するものではありません。CSSは最小限の例なので、星の大きさ、コントラスト、フォーカスの枠を実際の配色で確認してください。同じ形の灰色の星と黄色の星のように、色だけで見分ける星は別の問題で、色だけに頼る表示のトピックで扱います。そのガイドは準備中です。設問が結び付いていないラジオボタンのグループは設問名がないラジオボタンとチェックボックスのグループで扱います。レビューのフォーム全体を、キーボード、スクリーンリーダー、スマートフォンで確認してください。

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

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

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

再テストの進め方