按钮与链接的本质区别
The Difference Between a Button and a Link

在 Triptych Project 的 Button Actions 提案中,我试图解决一个常被忽视的问题:按钮与链接的根本差异。链接代表目的地,用户可以灵活地在新标签页打开、书签或分享;而按钮代表特定上下文中的动作,不应被重新语境化。许多开发者误用链接模拟按钮行为,导致用户体验混乱且破坏语义。Button Actions 让 HTML 原生支持按钮触发导航,无需 JavaScript 即可实现状态转换,既简化开发又提升可访问性。这一提案不仅填补了 HTML 的功能空白,也推动 Web 向更语义化、更安全的方向演进。
按钮代表的是特定浏览上下文中的动作,而链接代表的是可被重新语境化的目的地。
- bastawhiz
复制、分享、收藏——这些都是链接的重新语境化功能。按钮的作用恰恰相反,因为它不允许做这些事。
这反而让我更倾向于反对作者的观点。如果因为某个混蛋决定要在新窗口打开页面,我就得点击按钮、复制链接、再回去打开新标签页、然后粘贴,那体验简直糟糕透顶。这个提议预设了开发者比用户更聪明(但事实往往并非如此!)。从功能上讲,这样做毫无道理。它没有给用户增加任何价值,反而以“感觉更像原生应用”为借口剥夺了用户的功能。
> “取消”应该是一个链接吗?不!它的职责是关闭编辑视图。
我建站已经 25 年了,从未遇到过这个问题。部分原因在于,“取消”按钮是在假装你在使用桌面应用,遵循的是桌面端的惯例。现实中根本没人会这样设计网站。而且,那些既不做任何样式定制,又在意链接和按钮区别的人,数量简直微乎其微。
道理很简单:别再自作聪明了。像写超文本一样去设计网站吧。
- singpolyma3
你完全可以通过将按钮包裹在 form 标签中来实现按钮动作,文章里甚至展示了这一点。文章似乎暗示这样做不好,理由是“如果你已经在 form 标签里了怎么办?”。解决办法很简单:把那两个与表单实际无关的操作移到 form 标签外面,并给它们各自独立的 form 父元素。
- burntcaramel
如果你想在表单里放一个取消按钮,可以使用 form 属性将该按钮指向另一个专门用于删除的表单:https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/...
我同意这篇文章的部分观点,但论证过程显得有些混乱。“点击登出按钮会将当前页面导航到已登出状态”——这是错误的,它改变的是会话状态,而不仅仅是导航。“相对链接可以在当前页面内跳转”——这 _就是_ 导航。
我也曾仔细权衡过按钮和链接的区别,并参考了现已 sadly defunct(遗憾地不再更新)的 WAI-ARIA Practices 文档,我觉得那份文档讲得很清楚:https://components.guide/accessibility-first/navigation
- TonyAlicea10
> 按钮经常执行导航操作。点击登出按钮会将当前页面导航到已登出状态;点击“搜索”按钮会将当前页面导航到查询结果页。
这似乎混淆了外观与语义。如果一个元素触发了导航,我就把它做成链接。它看起来像不像按钮无关紧要,那是 CSS 的事。
我总是根据预期行为来决定用哪一个,效果一直很好。
话虽如此,我挺喜欢这个想法。
- oaxacaoaxaca
Triptych Project 是一项了不起的尝试,我们社区应该全力支持它。这完全没有坏处,只有好处。我们可以争论“取消”应该是按钮还是链接,但拜托大家,别对“完善 HTML