Tab移動時にいくつかのaタグにtabが当たらないことがありました。今回は、この問題の原因と解決方法、そしてセマンティックHTMLについてみていきたいと思います。
問題:href属性がないとTab移動できない
まず結論から言うと、href属性がない<a>タグは、デフォルトではTab移動の対象になりません。
動作しない例
<!-- これはTab移動できない -->
<a onclick="showModal()">詳細を表示</a>
この<a>タグはマウスでクリックはできますが、Tabキーを押しても到達できません。
理由
HTMLの仕様上、<a>タグは「アンカー(錨)」要素として設計されており、本来はhref属性で参照先を指定することが前提となっています。hrefがない場合、ブラウザは「ただのテキスト」として扱うため、自動的にはキーボードナビゲーションの対象になりません。
解決方法
1. tabindex属性を使用
<a tabindex="0" onclick="showModal()">詳細を表示</a>
tabindex="0"を追加することで、Tab移動の対象にできます。
2. 空のhrefを指定
<a href="#" onclick="showModal(); return false;">詳細を表示</a>
<a href="javascript:void(0)" onclick="showModal()">詳細を表示</a>
空のhrefやjavascript:void(0)を指定する方法もあります。
3. buttonタグを使用(推奨)
<button type="button" onclick="showModal()">詳細を表示</button>
実際にページ遷移しない場合は、<a>タグよりも<button>タグを使う方がセマンティック的に適切です。<button>は自動的にTab移動の対象になり、キーボード操作(Enter/Spaceキー)にも対応します。
アクセシビリティの観点からも、リンクではなくアクションを実行する要素には<button>の使用が推奨されています。
まとめ
href属性のない<a>タグは、tabindexを指定しないとTab移動できない- ページ遷移しないアクションには
<button>タグを使用するのがベストプラクティス
