<a>nchor要素は、単にいくつかのコンテンツへまたはからアンカーです。当初、名前付きアンカー(<a name="foo">)およびリンクされたアンカー()に許可されていたHTML仕様<a href="#foo">。
名前付きアンカー形式はあまり使用されません。これは、フラグメント識別子が[id]属性の指定に使用されるようになったためです(ただし、下位互換性のために属性を指定することはでき[name]ます)。なしの要素属性がまだ有効です。<a>[href]
セマンティクスとスタイルに関する限り、<a>要素は属性を:link持たない限りリンク()ではありません[href]。これの副次的影響は、デフォルトでは、のない<a>要素[href]がタブの順序にならないことです。
本当の問題は、<a>要素だけがの適切な表現であるかどうか<button>です。意味論的なレベルでは、a linkとaの間には明確な違いがありますbutton。
ボタンは、クリックするとアクションが発生するものです。
リンクは、現在のドキュメントのナビゲーションを変更するボタンです。発生するナビゲーションは、フラグメント識別子の場合はドキュメント内を#foo移動する()か、URLの場合は新しいドキュメントに移動する(/bar)可能性があります。
リンクは特殊なタイプのボタンであるため、代替機能を実行するためにアクションがオーバーライドされることがよくあります。アンカーをボタンとして使用し続けることは、意味的に正確ではありませんが、一貫性の観点からは問題ありません。
<a>要素(または<span>、または<div>)をボタンとして使用することのセマンティクスとアクセシビリティについて懸念がある場合は、次の属性を追加する必要があります。
<a role="button" tabindex="0" ...>...</a>
ボタンの役割は、特定の要素が、基礎となる要素は持っていたかもしれないものは何でもセマンティクスのためにオーバーライドとしてボタンとして扱われていることをユーザーに伝えます。
<span>および<div>要素については、JavaScriptキーリスナーを追加しSpaceたりEnter、clickイベントをトリガーしたりできます。<a href>and <button>要素はデフォルトでこれを行いますが、非ボタン要素は行いません。clickトリガーを別のキーにバインドする方が理にかなっている場合があります。たとえば、Webアプリの「ヘルプ」ボタンはにバインドされる場合がありますF1。