我一直在使用Twitter Bootstrap构建一个网站,它的很多功能都依赖于在<a>
中包装内容,即使它们只是要执行Javascript。我遇到了Bootstrap文档推荐的href="#"
策略问题,所以我试图找到一个不同的解决方案。
但后来我试图完全删除href
属性。我一直在使用<a class='bunch of classes' data-whatever='data'>
,并让Javascript处理剩下的事情。它有效。
然而有些东西告诉我,我不应该这样做。对?我的意思是,技术上<a>
应该是某个东西的链接,但我不完全确定为什么这是一个问题。或者是吗?
答案 0 :(得分:190)
<a>
nchor元素只是一个内容的锚点。最初HTML规范允许命名锚点(<a name="foo">
)和链接锚点(<a href="#foo">
)。
命名锚格式不太常用,因为片段标识符现在用于指定[id]
属性(尽管为了向后兼容,您仍然可以指定[name]
属性)。 An <a>
element without an [href]
attribute is still valid
就语义和样式而言,<a>
元素不是链接(:link
),除非它具有[href]
属性。这样做的副作用是默认情况下不带<a>
的{{1}}元素不会处于Tab键顺序。
真正的问题是[href]
元素是否仅适用于<a>
。在语义层面上,<button>
和link
之间存在明显差异。
单击按钮会导致操作发生。
链接是导致当前文档中导航发生变化的按钮。在片段标识符(button
)的情况下,发生的导航可能在文档中移动,或者在URL(#foo
)的情况下移动到新文档。
由于链接是一种特殊类型的按钮,因此它们通常会覆盖其操作以执行替代功能。从一致性的角度来看,继续使用锚作为按钮是可以的,尽管它在语义上不太准确。
如果您担心使用/bar
元素(或<a>
或<span>
)作为按钮的语义和可访问性,则应添加以下属性:
<div>
button role告诉用户将特定元素视为按钮,作为对底层元素可能具有的语义的覆盖。
对于<a role="button" tabindex="0" ...>...</a>
和<span>
元素,您可能希望为 Space 或 Enter 添加JavaScript键侦听器以触发{{1}事件。默认情况下,<div>
和click
元素会执行此操作,但非按钮元素则不会。有时将<a href>
触发器绑定到不同的键更有意义。例如,Web应用程序中的“帮助”按钮可能绑定到 F1 。
答案 1 :(得分:33)
我想你可以在这里找到答案:Is an anchor tag without the href attribute safe?
此外,如果您不想使用href进行链接操作,可以使用它:
<a href="javascript:void(0);">something</a>
答案 2 :(得分:9)
是,有效使用没有href
属性的锚标记。
如果
a
元素没有href
属性,则元素表示a 占位符,否则链接可能放在哪里 是相关的,只包含元素的内容。
是的,您可以使用class
和其他属性,但不能使用target
,download
,rel
,hreflang
和type
强>
target
,download
,rel
,hreflang
和type
属性必须为 如果href属性不存在,则省略。
至于“我应该吗?”部分,请参阅第一个引文:“如果链接可能相关,则可以放置链接”。所以我会问“如果我没有JavaScript,我会将此标记用作链接吗?”。如果答案是肯定的,那么是的,您应该使用<a>
而不是href
。如果不是,那么我仍然会使用它,因为生产力对于我来说比边缘案例语义更重要,但这只是我个人的意见。
答案 3 :(得分:6)
有效。例如,您可以使用它来显示模态(或响应data-toggle
和data-target
属性的类似内容)。
类似的东西:
<a role="button" data-toggle="modal" data-target=".bs-example-modal-sm" aria-hidden="true"><i class="fa fa-phone"></i></a>
在这里,我使用font-awesome图标,它更好地作为a
标记而不是button
来显示模态。此外,设置role="button"
会使指针变为动作类型。如果没有href
或role="button"
,则光标指针不会改变。