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

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

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

関連記事

CSS3

Perfect Pixel で調整してみよう!

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

Coding HTML

画像の下に空く謎の隙間

HTMLのコーディングをしていると、画像の下に隙間が空いていることに気づくことはありませんか? 対処方法は知ってはいても、なぜ隙間が空くのか考えてみると面白いです。

【PHP】 全角記号のときmb_strwidthが1を返す

PHPで全角の判断に、mb_strwidthを使っていました。 mb_strwidth == (mb_strlen*2) だったら全角文字、みたいな。 そうしたら、「◎」を入れたらうまくいかないとクラ …

PHP Toolkit のSoapClientが接続できない

クライアントがPHPのバージョンを5.4から5.6にアップデートしたそうです。 (そういう時は前もって連絡ください(怒)) その際、エラーが出るというのです。 ログを見ると、 SoapClientの_ …

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

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