🔗
HTMLで無効なリンクを表現する
HTMLのa要素はdisabled
属性に対応していませんが、disabled
属性を持つbutton要素のようにふるまう無効なリンクを実装したくなることがあるかもしれません。
ここでは、そのような実装について考えてみます。
要件
次の性質を満たすことを考えます。
- リンクであることがわかる
- リンクとしての機能が無効化されている
- 無効化された要素であることがわかる
実装
次の条件を満たすように実装します。
-
href
属性を持たない -
role="link"
を持つ -
aria-disabled="true"
を持つ
つまり、次のような実装になります。
<a role="link" aria-disabled="true">...</a>
実装の説明
href
属性を持たない
href
属性を持たないa要素はリンクとしての機能を持ちません。暗黙のロールもlink
ではなくgeneric
となります。これでリンクとしての機能を無効化することができます。
ただし、HTMLの仕様ではhref
属性を持たないa要素は「リンクがあるべき場所にリンクの代わりに配置されたプレースホルダー」として機能します。
今回はプレースホルダーではなく、リンクそのものとして実装したいため、このままの性質では不適切です。
role="link"
を持つ
href
属性を持たないa要素をリンクとして扱うためにロールをlink
に上書きします。
一般的に暗黙のロールと一致したロールを明示的に付与することは避けるべきですが、href
属性を持たないa要素の暗黙のロールはlink
ではなくgeneric
であるため問題ありません。
aria-disabled="true"
を持つ
aria-disabled="true"
を使用して、無効な状態であること支援技術に知らせることができます。
注意点
このように、HTMLの標準では表現できない無効なリンクの状態をARIAを用いて実現できます。
ただし、標準的でない実装は実装者だけでなくユーザーにも混乱を招く恐れがあるため、このような実装が本当に必要であるかの判断は慎重すべきです。
参考
Discussion