TT Lab
はじめる
学ぶ 学習パス コース

HTML — タグ一つが機能を肩代わりする

altは説明ではなく代わりだ

TT Labで続きを見る

一言でいうと

altに何を書くかは、画像が何を描いているかではなく、その画像がこの場所でどんな役割をしているかで決まります。そのため、同じ写真でも、場所によって答えが違います。

なぜ必要なのか

「画像にaltを入れてください」は誰もが知っているルールであり、そのため、たいていは入れています。問題は、何を入れるかです。実務で実際に見かけるものは、次のようなものです。

alt="이미지"
alt="banner_2024_final_v3.png"
alt="빨간 등산 배낭 45리터 제품 상세 페이지 바로가기 클릭"

1つ目は何も伝えず、2つ目はファイル名を読み上げ、3つ目は一覧から選べないほど長いものです。3つとも、「altを入れたか」の検査は通過します。

そして、反対方向の事故のほうが、よく起きます。装飾用の画像に説明を入れてしまい、画面を読み上げている間、意味のない音声が割り込み続けることです。区切り線の画像20個がすべて「線の装飾」と読み上げられるページは、それだけで使えないページになります。

どう動くのか: 判断は場所から決まる

W3Cの画像の決定ツリーは、この判断をいくつかの質問に整理しています。要点だけを移すと、次のようになります。

この画像の役割 altに書くもの
内容を伝える その内容を短く
リンクやボタンの中にある 画像ではなくそのリンクの目的
隣にすでに同じ説明がある alt="": 2回読み上げられると邪魔になります
純粋な装飾である alt=""
文字を描いた画像である その文字そのまま
グラフや図表である 要点1行と、本文に実際の値

ここで、2つを区別する必要があります。

alt属性を省くことと、空のalt=""は別です。属性がないと、スクリーンリーダーは代わりになるものがないと判断して、ファイル名を読み上げます(IMG_20240103.jpg)。空の文字列は「読み上げるものがない」という明示的な宣言なので、静かに読み飛ばされます。装飾画像には、必ず空のaltを書いておきます。

そして、リンクの中の画像が、特によく間違えられます。<a href="/"><img src="logo.svg" alt="회사 로고"></a>(韓国語で「会社ロゴ」を意味する語です)は、「会社ロゴ リンク」と読み上げられます。どこへ行くリンクなのかは、どこにも示されません。ここでaltは画像の説明ではなくリンクの名前なので、alt="홈으로"(韓国語で「ホームへ」を意味する語です)が正解です。

figureとfigcaption

figcaptionは、altの代わりではありません。両者は読み手が違います。

そのため、両方に同じ文を書くと、スクリーンリーダーのユーザーは同じことを2回聞くことになります。キャプションにすでに内容がすべて書かれているなら、alt=""にしておくほうがよいです。

表は関係を入れる器です

表の読み方は、段落とはまったく違います。スクリーンリーダーは、セルを移動しながら、そのセルがどの行・どの列に属するかを一緒に読み上げます。その結びつきを作るのが、thとscopeです。

<table>
  <caption>월별 매출</caption>
  <thead>
    <tr><th scope="col">월</th><th scope="col">매출</th></tr>
  </thead>
  <tbody>
    <tr><th scope="row">1월</th><td>1,200</td></tr>
  </tbody>
</table>

scopeがあると、「1月、売上、1200」のように読み上げられます。ないと、数字だけがだらだらと読み上げられ、10列の表では、今見ている数字が何なのかを知る方法がありません。W3Cの表のチュートリアルは、見出しセルが2段になった複雑な表まで扱っています。そのような表では、headersとidで、セルごとに結びつきを書きます。

captionは表のタイトルです。ページに表が複数あるとき、一覧でざっと見て選べるようにします。

レイアウトのために表を使いません。行と列という関係を宣言しておきながら、実際には関係がないと、スクリーンリーダーが存在しない構造を読み上げてしまいます。

現場での姿

自動検査ツールは、altがあるかないかは完璧に検出しますが、内容が合っているかは判断できません。そのため、alt="이미지"(韓国語で「画像」を意味する語です)は、すべてのツールを通過します。この判断は人がする必要があり、人がする必要のある判断は、作る瞬間にするのが最も安くつきます。

実務で最も効果が高かったのは、ルールを増やすことではなく、質問を1つに絞ることでした。

この画像が表示されなかったら、その場所にどんな文字があるべきか。

この質問は、装飾なら「何も」という答えが自然に出て、リンクの中なら「どこへ行くか」が出てきます。画像を描写しようとする衝動も、自然に抑えられます。

また、コンテンツ管理システムを使うなら、アップロード画面でaltを空にできるようにしつつ、「装飾です」のチェックボックスを一緒に置くことが効果的でした。必須入力にして塞いでしまうと、人はスペースを1つ入れて通り過ぎます。

次のクイズで確認すること

同じ画像が場所によってどう変わるのか、alt=""と属性の欠落の違い、figcaptionとの役割分担、そして、表でscopeが果たす役割を確認します。