We are ACORN!

プログラムやサーバーの設定など、技術的な記事を載せております。

HTMLコーディング プログラミング

スクリーンリーダーの利用を意識したコーディング

投稿日:

インターネットを閲覧している人は様々です。中には目の見えない方もいらっしゃいます。
そういった方にも情報を伝えるためには、HTMLを正しくコーディングしていく必要があります。
いくつか考えてみましょう。

最近書いた「実際的なimgタグのalt属性の付け方」という記事でもalt属性をスクリーンリーダーを意識して付ける必要があることが分かります。

また、「HTMLの見出しタグの使い方」でも触れていますが、スクリーンリーダーは見出しタグを目次のように利用して、必要な場所にジャンプすることが分かります。

その他にもどんなことを考えておくことができるでしょうか。

読ませたくないものを疑似要素にする

例えば

\ゆっくりしていってね/

こんな要素を作りたいとします。

一番簡単に考えると、

<div class="yukkuri">
  <span class="left-slash">\</span>
  ゆっくりしていってね
  <span class="right-slash">/</span>
</div>

のようなHTMLを作り、スラッシュの角度を整える、という感じにするかもしれません。
でもこうしてしまうと、このスラッシュをスクリーンリーダーが「記号」として読み上げてしまうかもしれません。

この場合は、HTMLは

<div class="yukkuri">ゆっくりしていってね</div>

これだけにして、::before::afterの疑似要素を使って、スラッシュ部分を作ります。
そうすると、この部分は読み上げられることはありません。

liを使わない箇条書きのようなものを作る時も◆ 項目のような表示はの部分は疑似要素にする方が良いですね。

画像の中にテキストが入ったボタン

こういったボタン、よく見ますよね。
文字入りで画像が書き出されていてalt属性が適切に付けられていれば全く問題ありません。

でも「hoverすると背景がボケるボタンで上に文字が乗っている」というような場合、画像ボタンの上にposition: absoluteで文字を乗せる、というような組み方をすることがあります。

悪い例

この場合、こんな風に組んでしまいかねません。

<div class="picture-button">
  <a href="#"></a>
  <span>重ねたい文字</span>
</div>

https://jsbin.com/fifacun/4/edit?html,css,output
一見よさそうですね。

これのどこがいけないかというと、リンクに文字が含まれていません
そうするとスクリーンリーダーはこのリンクを利用者に伝えることができなくなってしまいます。

良い例

この場合作り方を変える必要があります。

<div class="picture-button">
  <a href="#">重ねたい文字</a>
</div>

https://jsbin.com/mayeqax/4/edit?html,css,output

HTMLは普通の実装になり、要件通り背景がぼかされています。
backdrop-filterという新しいプロパティを知らないとなかなか到達できないですが、アンテナを張り巡らして新しい便利なプロパティを覚えていかないといけませんね。


少々HTMLの構造が複雑になっても、スクリーンリーダーで正しい読み上げができるような状態を目指した方が良いと思います。
「そんなの考えている余裕がない」と思われるかもしれません。

ただ知っているか知っていないかによって選択肢の幅が違います。
アクセシビリティにも重きを置くクライアントに当たった時には、こうした知識が生きてくることになるでしょう。

-HTMLコーディング, プログラミング


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

関連記事

BEMを使ってコーディングする

様々なクラス名の名づけルールがありますが、その中でもBEMはコンポーネント化のしやすさや、詳細度によるミスがないことなど、いくつか利点があります。

CSS3

Perfect Pixel で調整してみよう!

皆さんはPerfect PixelというChromeの拡張機能をご存じでしょうか? デザインカンプを半透明にしてWebページに重ね、要素のズレなどを確認できるものです。 そんなに厳密にWebページを作 …

【PHP】WSL vs. Docker vs. Win32 環境別速度

PHPが複数環境で実行できるようになったので、速度を測定してみました。 マシンスペックは マシン Lenovo Thinkpad E460 プロセッサ Core i5-6200U @ 2.40GHz …

PHPからsyslogを書く

忘備録です。 PHPでシステム回りを作っているんですが、syslogに出力出来たらなー、と思っていました。 調べたら簡単♪ function logger($mes) { exec("/bi …

HTMLの見出しタグの使い方

HTMLでコーディングしていると見出しタグ(h1とかh2とか)をどのように付けようか迷うことがありませんか? そんなときには文書構造を考えるようにしましょう。