画面の裏側で何が起きているの?`role=”presentation”`と`none`で「見えないはずのもの」を整理しよう
こんにちは!フロントエンドの世界へようこそ。
HTMLを書いているとき、「この``や``は、ただ見た目を整えるためだけに置いているんだけど、スクリーンリーダー(視覚障害のある方がWebサイトを読むための読み上げソフト)はどう判断するんだろう?」と不安になったことはありませんか?
実は、Web制作の現場で意外と見落とされがちなのが、この「意味のない装飾」の扱いなんです。今回は、HTMLに魔法をかけて、スクリーンリーダーに「ここは無視していいよ!」と伝えるための`role=”presentation”`と`role=”none”`について、一緒に紐解いていきましょう。
—
なぜ「無視」させる必要があるの?
想像してみてください。あなたは、すごく親切なガイドさんと一緒に、美術館を歩いています。
ガイドさんは展示品の説明をしてくれますが、もしそのガイドさんが、「壁の模様」や「単なる飾り用のリボン」まで、いちいち丁寧に読み上げてくれたらどうでしょう?
「今、壁に赤い線がありました」「今、装飾用のリボンが結ばれています」……。これだと、本当に大切な「絵画の説明」に集中できませんよね。
Webサイトも同じです。``タグや``タグをデザインのためにたくさん使っていると、スクリーンリーダーはそれらを「何か意味のある情報かもしれない!」と一生懸命読み上げようとします。これでは、ユーザーは本来知りたい情報にたどり着くのが大変になってしまいます。
そこで登場するのが、「これ、ただの飾りだから無視してね!」と伝えるための「role(役割)」属性なんです。
—
`role=”presentation”` と `role=”none”` の使い分け
結論から言うと、この2つは「ほぼ同じ役割」です。
- `role=”presentation”`: 古くからある書き方。多くのブラウザで「これはただの飾りです」と認識されます。
- `role=”none”`: 新しい規格で追加されたもの。「presentation」と同じ意味ですが、言葉の響きがより直感的ですよね。
「どっちを使えばいいの?」と迷うかもしれませんが、基本的にはどちらを使っても大丈夫です。ただ、歴史的な背景から`role=”presentation”`の方が少しだけ広く知られているので、迷ったらこちらを使っておくのが無難かもしれませんね。
こんな時に使ってみよう
たとえば、アイコン付きのボタンを作るとき、アイコン自体に意味を持たせたくない(テキストで十分に説明できている)場合です。
※補足:`aria-hidden=”true”`を併用すると、より確実に「完全に透明な存在」として扱うことができます。現場ではこのセットで書くことも多いですよ!
—
注意:やってはいけないこと
一つだけ、気をつけてほしいことがあります。
それは、「リンク(``)やボタン(`ということです。
なぜなら、リンクに「これはただの飾りです」と教えてしまうと、スクリーンリーダーは「これはリンクではなく、ただの文字です」と判断してしまいます。すると、ユーザーはそこをクリックできることに気づけなくなってしまうんです。
「便利にするための工夫」が「操作の邪魔」になってしまうのは悲しいですよね。「本来の意味(リンク機能)を奪わない」ことだけは、心に留めておいてくださいね。
—
最後に:小さな気遣いが、誰かを助ける
「HTMLなんてただのタグの羅列でしょ?」と思うかもしれません。でも、あなたが「これは装飾だから無視していいよ」と丁寧にマークアップすることで、そのサイトは誰かにとっての「とても歩きやすい美術館」に変わります。
最初は難しく感じるかもしれませんが、大丈夫です。まずは「このタグ、わざわざ読み上げてもらう必要があるかな?」と、一度立ち止まって考えてみることから始めてみましょう。
その小さな「想像力」こそが、一流のフロントエンド・エンジニアへの第一歩です。ぜひ、今日書くコードから試してみてくださいね!応援しています。

コメント