我发现除非在表格上,<a>
anchor 标签几乎总是用作按钮。
我的问题不是为什么 <a>
使用标签,而是为什么 href="#"
也被使用。
据我了解,<a>
没有 href 是有效的 html,事实上,在“按钮” anchor 和链接 anchor 标签之间提供更多区别,如 :link
和 :visited
仅当有 href 时才会触发。甚至光标也可以变回指针,通过更改 ::selection
可以将文本突出显示。 . ( example )
虽然两者都受 :active
影响(尽管即使这样也可以通过对链接说 a:visited:active, a:link:active {---}
来区分),我能想到不这样做的唯一原因是 Tab 键顺序也被删除了。
但是,从好的方面来说,您可以删除 href="#"
(这在测试页面、禁用 javascript 等时很有用),为“按钮”提供不同的默认样式,并且更容易在代码中区分。另外,你总是可以分配它 tabindex="0"
把它放回tab flow,以后css可能会引入nav-index ,它已经在 Opera 中引入(尽管这是一个有风险的属性)。
虽然删除 Tab 键顺序可能很麻烦,但我认为它是这样的:您只需替换 href="#"
对于 tabindex="0"
,它仍然区分“按钮”和链接,允许您设置它们的样式。
所以我想我最初的问题是为什么 href="#"
used 仍然是我的主要关注点,但我想听听我是否遗漏了任何关于为什么应该/不应该这样做的兴趣点,这可能是将链接与“按钮”分开的更好方法。
最佳答案
href="#"
属性之所以被使用,是因为某些(真正的)旧浏览器仅支持链接的属性,如 onclick
。通过使用 href="#"
,您将 a
元素变成了这个意义上的链接。后来忘记了原来的原因,就抄代码了。
当 JavaScript 在浏览器中被禁用时,href="#"
属性使该元素成为指向当前文档开头的链接。这几乎从来都不是一个合理的退路;要提供非 JavaScript 回退,href
属性应指向包含一些服务器端回退的 URL。
当启用 JavaScript 并且作者忘记使用 return false
或其他抑制正常链接处理的方式结束事件处理程序时,将在执行处理程序后跟踪链接。所以当前页面被重新加载并定位在开始处。这可能会被忽视,也可能不会被忽视。
关于html - anchor 标记作为没有 href 的按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11975757/