我发现,除非在表单上,<a>
锚标记几乎总是用作按钮。
我的问题不是使用<a>
标记的原因,而是使用href="#"
的原因。
据我了解,没有href的<a>
是有效的html,实际上,“按钮”锚和链接锚标记之间提供了更多区别,因为:link
和:visited
是仅在有href时触发。甚至可以将光标更改回指针,并通过更改::selection
来突出显示文本问题。 (example)
虽然两者都受到:active
的影响(尽管即使可以通过对a:visited:active, a:link:active {---}
说明链接来区分),我认为不这样做的唯一原因是标签顺序也被删除了。
但是,从好的方面来说,你可以删除href="#"
(在测试页面时有用,禁用javascript等),为“按钮”提供不同的默认样式,并且更容易区分代码。此外,您始终可以将其tabindex="0"
分配给选项卡流,并且将来css可能会引入nav-index,这已经在Opera中引入(尽管这是一个有风险的财产)。
虽然删除标签顺序可能很麻烦,但我认为是这样的:您只需将href="#"
替换为tabindex="0"
,它仍区分“按钮”和链接,让您也可以它们。
所以我想我原来使用href="#"
的问题仍然是我的主要关注点,但是我想听听我是否错过任何关于为什么应该/不应该做的可能更好的兴趣点从“按钮”中分离链接的方法。
答案 0 :(得分:2)
使用属性href="#"
是因为某些(非常)旧版浏览器仅支持onclick
等属性。通过使用href="#"
,您将a
元素转换为此意义上的链接。后来,原来的原因被遗忘了,人们只是复制了代码。
在浏览器中禁用JavaScript时,href="#"
属性会使元素成为当前文档开头的链接。这几乎从来都不是一个合理的后退;要提供非JavaScript回退,href
属性应指向包含某些服务器端回退的URL。
当启用JavaScript并且作者忘记使用return false
或其他禁止正常链接处理的事件处理器结束事件处理程序时,将在执行处理程序后执行链接。因此,当前页面将重新加载并在开始时定位。这可能会或可能不会被忽视。
答案 1 :(得分:0)
使用类似“#screen1”,“#screen2”等的方式为锚标签按钮提供href,并将其与某种路由或URL匹配相结合,使您的应用程序可以利用浏览器的后退和前进按钮。
如果单击#screen1,然后单击#screen2,然后能够使用后退按钮进入screen1对您的应用程序很有用,您可能希望以这种方式使用href。