将标签锚定为没有href的按钮

时间:2012-08-15 19:20:40

标签: html css css3

我发现,除非在表单上,​​<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="#"的问题仍然是我的主要关注点,但是我想听听我是否错过任何关于为什么应该/不应该做的可能更好的兴趣点从“按钮”中分离链接的方法。

2 个答案:

答案 0 :(得分:2)

使用属性href="#"是因为某些(非常)旧版浏览器仅支持onclick等属性。通过使用href="#",您将a元素转换为此意义上的链接。后来,原来的原因被遗忘了,人们只是复制了代码。

在浏览器中禁用JavaScript时,href="#"属性会使元素成为当前文档开头的链接。这几乎从来都不是一个合理的后退;要提供非JavaScript回退,href属性应指向包含某些服务器端回退的URL。

当启用JavaScript并且作者忘记使用return false或其他禁止正常链接处理的事件处理器结束事件处理程序时,将在执行处理程序后执行链接。因此,当前页面将重新加载并在开始时定位。这可能会或可能不会被忽视。

答案 1 :(得分:0)

使用类似“#screen1”,“#screen2”等的方式为锚标签按钮提供href,并将其与某种路由或URL匹配相结合,使您的应用程序可以利用浏览器的后退和前进按钮。

如果单击#screen1,然后单击#screen2,然后能够使用后退按钮进入screen1对您的应用程序很有用,您可能希望以这种方式使用href。