「リストなのにリストじゃない?」HTMLのリスト構造とARIAロールの不思議な関係
こんにちは!Web制作の世界に飛び込んだ皆さん、毎日コードと向き合ってお疲れ様です。
HTMLを書き始めると、必ずと言っていいほど出会うのが `
- ` や `
- ` といったリストタグですよね。メニューを作ったり、箇条書きを作ったり……。でも、開発の現場でたまに「あれ?これ、見た目はリストだけど、HTMLはリストじゃないタグで書いちゃった!」という場面に遭遇することがあります。
今回は、そんな時に役立つ「ARIAロール(ARIA role)」という魔法の杖について、一緒に紐解いていきましょう。難しいことは考えすぎず、まずは身近な例えから入りますね。
—
そもそも、なぜ「リスト」であることを伝えないといけないの?
例えば、スーパーマーケットのお買い物リストを想像してみてください。
紙に「卵、牛乳、パン」とだけ書いてあるのと、「1. 卵、2. 牛乳、3. パン」と番号が振ってあるのとでは、どちらが「買い物に行く手順」として分かりやすいでしょうか?Webサイトも同じです。画面を見ている私たちには「ここは箇条書きだな」と直感的に分かっても、視覚障害のある方が使う「スクリーンリーダー(画面読み上げソフト)」にとっては、ただの文字の羅列に見えてしまうことがあります。
HTMLの `
- ` や `
- ` は、ブラウザに対して「ここはリストですよ!」という特別なラベルを貼ってくれる優秀なタグなんです。
—
どうしても「リストタグ」を使えない時があるんです
でも、現場ではこんなことが起こります。
「デザインの都合上、どうしても `` タグで構成しないとCSSが効かない!」
「JSでデータを流し込んでいるから、構造が崩れてしまった……」そんな時、ブラウザや読み上げソフトは「えっ、これただの箱(div)なの? リストじゃないの?」と迷子になってしまいます。そこで登場するのが、今回の主役「ARIAロール(ARIA role)」です。
これは「HTMLのタグは違っても、役割(ロール)だけはリストとして振る舞ってね!」と、ブラウザにそっと教えてあげるための「名札」のようなものなんです。
—
実際に書いてみよう:role=”list” の魔法
例えば、`
- ` を使わずに、ただの `
- role=”list”: 「この親要素は、リストの集合体ですよ」と教えています。
- role=”listitem”: 「この子要素は、そのリストの中の項目ですよ」と教えています。
` でリストを作ってしまった場合、以下のように書き加えるだけで、読み上げソフトには「これはリストだよ」と伝わるようになります。朝の準備:顔を洗う朝の準備:コーヒーを淹れる朝の準備:メールをチェックするここがポイント!
これだけで、読み上げソフトは「3つの項目があるリストですね」と認識してくれるようになります。まるで、中身が中身が違っても、外側に「これはリンゴです」というシールを貼ればリンゴとして扱われるようなイメージですね。
—
注意:魔法はあくまで「最後の手段」
ここで一つだけ、大切なことをお伝えしますね。
このARIAロール、とっても便利ですが「とりあえず何でもARIAロールで解決しちゃおう!」というのは少し危険なんです。なぜなら、HTMLには最初から「リスト」や「ボタン」といった役割を持った、専用のタグ(`
- `, `
- `, `
- ` は、ブラウザに対して「ここはリストですよ!」という特別なラベルを貼ってくれる優秀なタグなんです。

コメント