<a>
元素仅仅是到某个内容的锚点或从某个内容的锚点而已。最初HTML规范允许命名锚点(<a name="foo">
)和链接锚点(<a href="#foo">
)。
命名锚点的格式较少使用,因为现在片段标识符用于指定[id]
属性(虽然出于向后兼容性考虑,您仍然可以指定[name]
属性)。没有[href]
属性的<a>
元素仍然是有效的。
就语义和样式而言,只有带有[href]
属性的<a>
元素才是链接(:link
)。这样做的一个副作用是,默认情况下不带[href]
的<a>
元素不会出现在制表顺序中。
真正的问题是,单独使用<a>
元素是否适合表示<button>
。在语义层面上,link
和button
之间存在明显的差异。
按钮是当点击时会导致某个操作发生的东西。
链接是一个按钮,它会导致当前文档中的导航发生变化。所发生的导航可能是在片段标识符(#foo
)的情况下在文档内部移动,或者在url(/bar
)的情况下转到新的文档。
由于链接是按钮的一种特殊类型,它们经常被覆盖以执行替代功能。继续使用锚点作为按钮从一致性角度来看是可以的,尽管语义上不太准确。
如果您关心使用<a>
元素(或<span>
、<div>
)作为按钮的语义和可访问性问题,则应添加以下属性:
<a role="button" tabindex="0" ...>...</a>
按钮角色告诉用户特定的元素被视为按钮,以覆盖底层元素可能具有的任何语义。
对于<span>
和<div>
元素,您可能希望添加JavaScript键监听器来触发click
事件的Space或Enter。 <a href>
和<button>
元素默认情况下会执行此操作,但非按钮元素不会。有时将click
触发绑定到不同的按键更有意义。例如,在Web应用程序中,“帮助”按钮可以绑定到F1。
[href]
,那么你应该为按钮使用<span>
。 - zzzzBov<a role="button" tabindex="0" ...>...</a>
稍微有些吸引人,不过你试过它是否跨平台兼容吗?例如这样的链接在 iPad 上是否可访问? - Hrvoje Golcic