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

CSSだけで描かれ、テキストのないアイコンと画像

料金プランの比較表で、チェックとダッシュを空のセルにCSSの背景画像として描いているため、スクリーンリーダーではすべてのセルが「空白」と読まれ、どのプランに何が含まれるのか分かりません。

WCAG 2.2
SC 1.1.1ASC 1.3.1A
必須とする規格
Section 508 · EN 301 549(EU) · JIS X 8341-3
問題あり <td class="no"></td>
アクセシビリティの問題を示した図: 全盲:ショップにギフトカードは付いている?
01

問題

比較表のすべてのセルが「空白」と読まれるため、スクリーンリーダー利用者は、どのプランにどの機能が含まれるのかが分かりません。

02

試してみる

表と、スクリーンリーダーの読み上げを比べてください。

下の欄に、ショップの列を下へ移動したときの読み上げが出ます。ショップに独自ドメインは付いていますか?ギフトカードは?

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

問題空のセルの背景画像で描いたチェックとダッシュ
スターターショッププロ
カード決済
独自ドメイン
ギフトカード

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

  1. カード決済、空白
  2. 独自ドメイン、空白
  3. ギフトカード、空白

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

03

修正方法

チェックとダッシュには、見える形か見えない形でHTMLに言葉を持たせるか、alt のある img にします。

  1. 1CSSの画像が示す内容は、言葉か alt のある img としてHTMLにも置く。
  2. 2何かが表示されているデータセルを、空のままにしない。
  3. 3CSSの画像は、消えても何も失われない飾りにだけ使う。
修正前 空のセルの背景画像で描いたチェックとダッシュ
<table class="plans">  <thead>    <tr>      <td></td>      <th scope="col">スターター</th>      <th scope="col">ショップ</th>      <th scope="col">プロ</th>    </tr>  </thead>  <tbody>    <tr>      <th scope="row">カード決済</th>      <td class="yes"></td>      <td class="yes"></td>      <td class="yes"></td>    </tr>    <tr>      <th scope="row">独自ドメイン</th>      <td class="no"></td>      <td class="yes"></td>      <td class="yes"></td>    </tr>    <tr>      <th scope="row">ギフトカード</th>      <td class="no"></td>      <td class="no"></td>      <td class="yes"></td>    </tr>  </tbody></table>
修正後

各セルに見えない言葉を入れる

<table class="plans">  <thead>    <tr>      <td></td>      <th scope="col">スターター</th>      <th scope="col">ショップ</th>      <th scope="col">プロ</th>    </tr>  </thead>  <tbody>    <tr>      <th scope="row">カード決済</th>      <td class="yes"><span class="visually-hidden">含まれる</span></td>      <td class="yes"><span class="visually-hidden">含まれる</span></td>      <td class="yes"><span class="visually-hidden">含まれる</span></td>    </tr>    <tr>      <th scope="row">独自ドメイン</th>      <td class="no"><span class="visually-hidden">含まれない</span></td>      <td class="yes"><span class="visually-hidden">含まれる</span></td>      <td class="yes"><span class="visually-hidden">含まれる</span></td>    </tr>    <tr>      <th scope="row">ギフトカード</th>      <td class="no"><span class="visually-hidden">含まれない</span></td>      <td class="no"><span class="visually-hidden">含まれない</span></td>      <td class="yes"><span class="visually-hidden">含まれる</span></td>    </tr>  </tbody></table>

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

04

デザインの案

比較表は、すっきりしたまま読めるようにできます。

プランに含まれるものの見せ方をさらに3通りと、答えがスタイルシートにしかない、よく見る2通りを示します。スクリーンリーダーに何が伝わるかは、それぞれの説明に書いています。

デザインファイルで

  • 各マークが表す言葉(「含まれる」「含まれない」など)を、ファイルのマークの横に書く。
  • どのセルや行にもマークか値を描き、「なし」を表すためにセルを空にしない。
  • 含まれない機能は、灰色や取り消し線だけでなく、専用のマークで描く。
  • マークはページに対して3:1以上で描き、横にコントラスト比を書く。

合格

  • ショッププロ
    スタッフのアカウント2無制限
    ストレージ5 GB100 GB
    チェックの代わりに実際の値 量のある機能は、「2」「無制限」のように、セルにそのまま書きます。凡例はいらず、スクリーンリーダーは各値を行と一緒に読みます。
  • ショッププロ
    独自ドメイン
    ギフトカード
    名前を付けた、塗りの丸と白抜きの丸 チェックより控えめなマークです。塗りの緑の丸は#1e7b34で5.33:1、白抜きの灰色の輪は#70757aで4.65:1です。どちらもセルの中の画像で、「含まれる」「含まれない」という名前を持ちます。
  • ショップ

    • 含まれる:カード決済
    • 含まれる:独自ドメイン
    • 含まれない:ギフトカード
    ショップを選ぶ
    含まれないものに印を付けたプランのカード 料金カードにすべての機能を並べ、それぞれの前にチェックかバツを置き、含まれない機能はやわらかい灰色(#6b7280、4.83:1)にします。マークには言葉があるため、バツは「含まれない」と読まれます。

不合格

  • ショップ

    • カード決済
    • 独自ドメイン
    • ギフトカード
    ショップを選ぶ
    灰色と取り消し線だけの、含まれない機能WCAG 1.3.1 よく見るカードの形ですが、ギフトカードが含まれないことを示すのは灰色と取り消し線だけで、どちらもスタイルシートによるものです。通常の設定のスクリーンリーダーは、ほかの行と同じように、含まれているかのように読みます。
  • ショッププロ
    サポート
    導入の手伝い
    CSSの星で描いたサポートの段階WCAG 1.1.1 マスク画像で切り抜いた星はどの大きさでもくっきり見えますが、セルの中身は空なので、「サポート」は段階なしで読まれます。行に「優先対応」のような言葉で段階を書くか、星を「3段階中3」という名前の1つの画像にします。
05

修正の確認

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

確認方法: スクリーンリーダー、スタイルを無効化

4件中0件を確認済み

OS、ブラウザーと支援技術のバージョン、ビルド、実施日、各手順の実際の結果を記録してください。料金表のテンプレートやスタイルシートを変更した際は、再度確認します。

制限

このサンプルは、どのアプリケーションでも同じ結果になることを保証するものではありません。パス、クラス名、プランは仮のものです。表のセルの読み方はスクリーンリーダーによって少しずつ違うため、利用者が使う支援技術で確認してください。SVGや img のアイコンを同じように使う場合も、同じ決まりに従います。名前がない、または読まれてしまうSVGアイコンと意味ではなく名前で読み上げられる絵文字を参照してください。実際に使用する支援技術で、操作全体を確認してください。

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

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

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

再テストの進め方