tailwindcssにはsr-only
と呼ばれるクラスが提供されています。
sr-only
を付与したクラスは内容を支援技術に伝えつつ視覚的には非表示にならないスタイリングとなっています。
.sr-only {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border-width: 0;
}
スクリーンリーダー等を使って以下のボタンの名前を確認してください。左のボタンはsr-only
を持つテキストを一緒に持つのでbadという名前が呼ばれますが、右のボタンには何もついないので画像のような抽象的な名前になります。
See the Pen Untitled by KokiSakano (@kokisakano) on CodePen.
このような実装はimg
要素のalt
属性やsvgのtitle
要素を用いられない時の補助として利用されます。そして、同じような使用例としてaria-label
があります。
どちらを使えば良いのでしょうか。
これらの実装の大きな違いとして、翻訳時の挙動が挙げられます。ブラウザの翻訳機能を用いたとき、aria-label
はいくつかのブラウザ(SafariやFirefoxなど)では名前が翻訳されずに原文ままとなります。sr-only
の場合は他の翻訳された文字と同じように羅列されているので翻訳されたものが名前となります。
翻訳機能を利用するユーザーには翻訳後のテキストの情報を伝えたいのが普通ですから、この点からはsr-only
を利用するのが有利と思います。
他の違いとしてはブラウザの検索で文字列が検索対象になるか否かの問題があります。sr-only
は検索の対象になりますが、視覚的な実態がないのでハイライトされません。検索時にどのような挙動にしたいかによって使い分けをする必要がありそうです。
最後に、前提としてalt
やtitle
のような基本の属性をできるだけ使うようにしましょう。支援技術に伝えるだけを意図としてもつARIA属性やその他の実装は最後の手段としたいです。
そして、aria-label
を使うときは、それが翻訳されない状態で利用される可能性があること、ブラウザの検索機能で反応しないことを覚えておきたいです。sr-only
を使うときは検索機能に反応するがハイライト等のタイミングで不自然な動作になる可能性があることに気をつけたいです。