3

我发现除非在表单上,​​否则<a>锚标签几乎总是用作按钮。

我的问题不是为什么要使用<a>标签,而是为什么href="#"还要使用。

据我了解,<a>没有 href 是有效的 html,实际上,在“按钮”锚和链接锚标记之间提供了更多区别,因为:link只有:visited在存在 href 时才会触发。甚至光标也可以变回指针,并且通过更改::selection. (示例

虽然两者都受到影响:active(尽管可以通过说a:visited:active, a:link:active {---}链接来区分),但我能想到不这样做的唯一原因是也删除了标签顺序。

但是,从好的方面来说,您可以删除href="#"(这在测试页面、禁用 javascript 等时很有用),为“按钮”提供不同的默认样式,并且更容易在代码中区分。此外,您始终可以将其分配tabindex="0"到选项卡流中,并且将来 css 可能会引入nav-index,它已经在 Opera 中引入(尽管这是一个有风险的属性)。

虽然删除标签顺序可能很麻烦,但我认为它是这样的:您只需替换href="#"for tabindex="0",它仍然可以区分“按钮”和链接,从而允许您设置它们的样式。

所以我想我最初的为什么href="#"使用的问题仍然是我的主要关注点,但我想听听我是否错过了为什么应该/不应该做的任何兴趣点,以潜在地成为将链接与“按钮”分开的更好方法.

4

2 回答 2

2

使用该属性href="#"是因为一些(真正的)旧浏览器onclick仅支持链接等属性。通过使用href="#",您将a元素转换为这种意义上的链接。后来原来的原因都忘记了,人家只是抄代码。

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

当 JavaScript 被启用并且作者忘记结束一个事件处理程序return false或其他抑制正常链接处理的东西时,在处理程序执行后链接将被跟踪。所以当前页面被重新加载并定位在开始处。这可能会或可能不会被忽视。

于 2012-08-15T19:37:37.227 回答
0

为锚标记按钮提供一个带有“#screen1”、“#screen2”等内容的 href,并将其与某种路由或 url 匹配相结合,可以让您的应用程序利用浏览器的后退和前进按钮。

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

于 2012-08-15T19:30:27.833 回答