トピックを検索
ファイル名や同じ言葉が読まれる装飾画像
ワークショップのページで、葉の区切り線に alt がなくファイル名が読まれ、カードの写真は alt がリンクの文字と同じで、余分なTabの移動先にもなっています。
alt="Glazing mugs" tabindex="0" 問題
スクリーンリーダー利用者にファイル名や同じタイトルが二度読まれ、キーボード利用者は何もしない写真に止まります。
陶器の店に、ワークショップの一覧ページがあります。「ワークショップ」という見出しの下には、中央に葉が描かれた細い線があります。テーマに含まれる小さな装飾です。その下に、ワークショップごとのカードが並びます。棚に並んだマグカップの写真、「マグカップの釉薬がけ」というタイトル、日時が載っていて、カード全体が一つのリンクです。スクリーンリーダーは「ワークショップ、見出し」「divider-leaf.png、画像」「リンク、マグカップの釉薬がけ、画像、マグカップの釉薬がけ」と読みます。Tabキーを押すと、フォーカスはリンクに移り、次にその中の写真に移ります。写真にはフォーカスリングが出ますが、Enterを押しても何も起きません。カードごとにTabの移動先が二つあり、タイトルが二度読まれます。
1.1.1(非テキストコンテンツ)は、装飾を支援技術が無視できる形で実装することを求めています。区切り線は alt 属性がまったくない <img> です。alt がないことは「飛ばしてよい」という意味にはならず、スクリーンリーダーはファイル名を読みます。カードの写真は alt="マグカップの釉薬がけ" で、隣のリンクの文字と同じ言葉のため、リンクの名前にタイトルが二度入ります。写真には、フォーカス時に拡大する効果のために tabindex="0" も付いていて、リンクでもボタンでもない画像がTabの移動先になっています。どの画像もテキスト以上のことは伝えていませんが、無視できる形にはなっていません。
ページが長いほど、余計な読み上げが増えます。ワークショップが12件あれば、タイトルの繰り返しとTabの余分な移動先がそれぞれ12ずつ増え、区切りごとにファイル名も読まれます。
10グループ中2グループに影響
axe の image-alt は alt のない区切り線を検出し、フォーカスできる画像を検出するツールもあります。ただし、画像が装飾かどうかは判断できません。alt="マグカップの釉薬がけ" は空ではないので合格になり、alt="区切り線" や alt="葉の装飾" も、役に立たない言葉が読まれるのに合格します。AIによる手早い修正では、すべての画像に説明(「葉の付いた茶色の細い線」)を書き、余計な読み上げをさらに増やすことがよくあります。写真に aria-hidden="true" を付けても tabindex を残し、スクリーンリーダーが何も言わない場所にフォーカスが止まることもあります。画像が何も加えていないと判断するには、テキストと並べて見られる人が必要です。
試してみる
ページを先頭から読み、次にTabでワークショップのカードを移動してください。
下の欄に、先頭から読んだときと、Tabで止まるたびの読み上げが出ます。区切り線がどう読まれるか、カードで何回止まるか確かめてください。
問題あり 修正できますか?
先頭から読むと、スクリーンリーダーの読み上げ:
- ワークショップ、見出し
- divider-leaf.png、画像
- リンク、マグカップの釉薬がけ、画像、マグカップの釉薬がけ、11月14日(土)10:00
Tabで移動すると、止まるたびの読み上げ:
- リンク、マグカップの釉薬がけ、画像、マグカップの釉薬がけ、11月14日(土)10:00
- マグカップの釉薬がけ、画像
再現デモです。「問題あり」は意図的にアクセシブルでない状態にしています。
修正方法
何も加えない画像は alt を空にするか CSS で描き、Tabの移動先にはしません。
- 1テキストの隣で何も加えない画像は alt="" にする。alt を省いたり「区切り線」と書いたりしない。
- 2装飾は alt="" の img でも CSS でもよい。どちらでも何も読まれないようにする。
- 3読まれない画像に tabindex を付けず、リンクの唯一の中身にもしない。
<h2>ワークショップ</h2><img src="/images/divider-leaf.png" class="divider"> <a class="card" href="/workshops/glazing"> <img src="/images/glazing.jpg" alt="マグカップの釉薬がけ" tabindex="0"> <h3>マグカップの釉薬がけ</h3> <p>11月14日(土)10:00</p></a>何も加えない画像の alt を空にする
<h2>ワークショップ</h2><img src="/images/divider-leaf.png" class="divider" alt=""> <a class="card" href="/workshops/glazing"> <img src="/images/glazing.jpg" alt=""> <h3>マグカップの釉薬がけ</h3> <p>11月14日(土)10:00</p></a>この方法を選ぶ理由:まずHTMLの要素を使う
区切り線には alt がないため、ファイル名が読まれます。写真の alt は同じリンクの中の見出しを繰り返し、tabindex によって何もしないTabの移動先が増えています。
区切り線と写真を alt="" にし、tabindex を取り除きます。空の alt は、画像が装飾であることを示すHTML自身の書き方です。スクリーンリーダーは画像を飛ばし、読み込みに失敗してもブラウザーは何も表示しません。リンクは「リンク、マグカップの釉薬がけ、11月14日(土)10:00」と一度だけ読まれ、Tabの移動先も一つになります。この写真はカードのテキスト以上のことを示していないため、alt を空にします。テキストにない内容を示す写真には、その部分の alt を書きます(「実装の判断」を参照)。
どちらの方法でも装飾は読まれず、カードは一度だけ読まれます。まずは空の alt を使います。属性一つで済み、テーマの区切り線からCMSで選ぶ写真まで、どんな画像にも使え、HTMLが装飾のために定めている方法だからです。CSSで描く方法はスタイルシートの変更が必要で、テーマで固定された画像にしか向きませんが、alt なしで区切り線を戻してしまうことがなくなります。強制カラーモードでは背景画像が表示されません。装飾なら問題ありませんが、意味のあるものにCSSを使ってはいけない理由になります。
テキストの隣の画像は場合ごとに判断する。 取り除いても読む人に必要なものが何も失われない場合だけ、その画像は装飾です。同じ画像でも、場所によって読まれなくてよいこともあれば、alt が必要なこともあります。alt に隣のテキストを繰り返さないことは共通で、変わるのは画像が独自の内容を加えているかどうかです。よくある場合は次のとおりです。
- タイトルとリンクがすべてを伝えているカードの、雰囲気を伝える写真や素材写真(「マグカップの釉薬がけ」のカードの棚のマグカップなど):
alt=""。 - 同じリンク先を指す画像とテキストが同じリンクの中にある場合:リンクを一つにまとめ、画像は
alt=""、テキストをリンクの名前にする(WCAG達成方法 H2)。 - 色、柄、状態など、テキストにない内容を示す商品写真:その内容だけを alt に書く(「クリーム色の釉薬、縁は茶色」)。商品名は繰り返さない。
- 同じことを書いたラベルの隣のアイコン(「食洗機可」の隣の食洗機のアイコンなど):
alt=""。 - リンクやボタンの唯一の中身になっている画像:空にしない。alt がリンクやボタンの名前になる。
- 隣のテキストが一部しか要約していないグラフ、地図、図:情報を伝える画像なので、代替テキストが必要(情報を伝える画像のガイドを参照)。
迷ったら、画像を除いてカードを読み上げ、足りないものがないかを確かめます。
alt は省かずに空にする。 alt="" と alt がないことは、反対の意味になります。alt=" "、alt="区切り線"、alt="スペーサー"、alt="装飾" はどれも読み上げられるため、修正になりません。
aria-hidden と role="presentation"。 どちらも画像をスクリーンリーダーから隠し、alt のないインラインSVGでは役に立ちます。<img> では alt="" がARIAなしで同じことをします。aria-hidden だけで alt のない画像は自動チェックで検出され、読み込みに失敗すると壊れた画像のアイコンが表示されます。
画像だけのリンク。 リンクの中身が画像だけなら、その画像を読まれなくすることはできません。alt がリンクの名前になるため、リンク先(「マグカップの釉薬がけのワークショップ」)を書くか、見えるテキストを足してから画像を読まれなくします。
フォーカス。 読まれない画像から tabindex を取り除き、拡大やライトボックスの効果など、それを付けるスクリプトも確認します。画像で何かを操作させるなら、名前のある実際のボタンで囲みます。
Section 508の試験での確認方法。 Trusted Testerの装飾画像の試験(7.B)では、次の三つがすべて満たされる場合だけ合格になります。
- ページ上で、重要な情報を伝える唯一の手段になっていない。
- Tabの移動順序に入っていない。
- アクセシブルな名前が空になっている(属性がないのではない)。
区切り線は三つ目を、カードの写真の tabindex は二つ目を満たしません。名前が空でない画像にはこの試験は適用されないため、タイトルを繰り返す alt の写真は、意味のある画像の試験(7.A)で判断されます。それでも、上で述べた理由から修正します。背景画像も7.Bの対象外で、別に試験されます。
CMSとコンポーネントライブラリ。 画像の項目に「装飾」のチェックボックスを用意して alt="" を出力させます。項目を空のままにして、テーマがファイル名を代わりに出力しないようにします。タイトルと画像の両方を受け取るカードのコンポーネントでは、タイトルを画像の alt に写さないようにし、写真が加える内容を編集者が書くか、装飾として指定できるようにします。
AI コーディングアシスタントで修正しますか? このガイドを Markdown で取得
修正の確認
マウスを使わない4つの確認
確認方法: スクリーンリーダー、キーボード
OS、ブラウザーと支援技術のバージョン、ビルド、実施日、各手順の実際の結果を記録してください。テーマ、カードのコンポーネント、画像の項目を変更した際は、再度確認します。
制限
このサンプルは、どのアプリケーションでも同じ結果になることを保証するものではありません。コード内のパスとクラス名は仮のものです。画像が装飾かどうかは周りのページによって決まり、その両方を知る人にしか判断できないため、公開前の確認にその判断を含めてください。実際に使用する支援技術で、操作全体を確認してください。
よくある問題を再現した学習用のサンプルです。実在のクライアントの診断結果ではありません。コードは出発点となる実装例のため、実際の製品でも確認してください。ここでは支援技術でのテスト結果は報告していません。
コードを更新しても、使いやすさを保つために
ガイドの内容を、コーディングエージェントやCIで使える開発ルールにまとめます。更新後は、キーボードとスクリーンリーダーで再テストし、問題が再発していないか確認します。