的<a>
nchor元素是一个简单的锚去往或来自某些内容。最初的HTML规范允许使用命名锚(<a name="foo">
)和链接锚(<a href="#foo">
)。
由于片段标识符现在用于指定[id]
属性(尽管为了向后兼容,您仍然可以指定[name]
属性),因此不太常用已命名的锚定格式。 An <a>
element without an [href]
attribute is still valid。
就语义和造型而言,<a>
元素不是链接(:link
),除非它具有[href]
属性。这样做的一个副作用是默认情况下没有[href]
的元素将不处于标签顺序。
真正的问题是<a>
元素本身是否是<button>
的适当表示。在语义层面上,link
和button
之间存在明显差异。
按钮是点击时会导致动作发生的东西。
链接是导致当前文档中导航更改的按钮。发生的导航可能在片段标识符(#foo
)的情况下在文档中移动,或者在网址(/bar
)的情况下移动到新文档。
由于链接是一种特殊类型的按钮,他们通常会重写其操作以执行替代功能。从一致性的角度来看,继续使用锚作为按钮是可以的,尽管它在语义上不是很准确。
如果你关心的语义和使用<a>
元素(或<span>
,或<div>
)作为按钮的可访问性,你应该添加以下属性:
<a role="button" tabindex="0" ...>...</a>
的button role告知用户该特定元素被视为一个按钮,作为覆盖元素可能具有的任何语义的覆盖。
对于<span>
和<div>
元素,你可能需要添加JavaScript的关键监听器空间或输入触发click
事件。 <a href>
和<button>
元素默认会这样做,但非按钮元素不会。有时将click
触发器绑定到不同的密钥更有意义。例如,Web应用中的“帮助”按钮可能会绑定到F1。
'href =“#”'我听说过。 'javascript:void(0)'我听说过。这个我从来没有听说过,但它似乎最有意义。这是标准的,适用于大多数浏览器,对吧? – Zacqary
@Zacqary,'[role =“button”]'没有做任何具体的事情,你仍然需要听点击事件(但是你会这样做来制作一个JS按钮)。它旨在用于辅助导航(又名屏幕阅读器),以便屏幕阅读器知道将元素表示为按钮而不是其原始语义值。添加'[tabindex]'将元素添加到标签顺序。在特殊情况下,您可能实际上不希望/需要按Tab键顺序导航的按钮,所以它是一个可选属性。已经是按钮的元素不需要'[role =“button”]',因为它是多余的。 – zzzzBov
是否有效的HTML有没有href和没有名称的锚标签?在我们的应用程序中,我们有一些删除链接被禁用(因此没有href属性),但仍显示给用户。 –