E1.08.1links navigate buttons act设计研究

链接表示导航,按钮表示动作

别名: 链接对按钮 · navigation versus action · href vs button

概念解释

链接(link)的契约是导航:去另一处资源,通常可返回、可分享、可在新容器打开。按钮(button)的契约是动作:在当前上下文里做事——提交、删除、播放、打开面板——不承诺换了一个可寻址的地方。这条区分不是外观规定,是人对「按下去世界怎么变」的预测模型。用 <a> 去做提交、用 <button> 去跳转,是在同一套预测上换零件。

机制

人从浏览历史里学会:带下划线或混在文句里的字会把我带走,页面可后退;色块控件会在这里改数据。预测一旦建立,行为习惯跟着走:链接会被长按、被新标签打开、被复制地址;按钮会被连点、被当成提交。把动作做成链接,用户会尝试「在新标签里删除」这种无意义操作,或后退以为能撤销一次已经发生的 POST。把导航做成按钮,用户不会去复制地址,也无法预读,浏览器的前进后退栈对这次「跳转」也爱理不理。底层上,链接有 href 作为资源标识,按钮没有;语义层只是把这件工程事实翻译成人的后果模型。

怎么研究

给同一视觉控件两种实现(真链接 / 真按钮)完成「去详情」和「删除此项」。允许使用新标签、后退、复制。

自变量:控件角色、任务是导航还是动作、是否提供新标签手势。 因变量:是否尝试新标签或复制、后退是否被用来当撤销、错误预期的口头报告。

实验室若禁用浏览器铬元素(不能开新标签),链接的导航契约测不出来。要在真实浏览器里测,而不是在无地址栏的内嵌 WebView 演示里测。

边界

单页应用里很多「看起来像跳转」的路由其实不换文档,但只要它改变了可寻址的位置(URL),按链接对待仍然成立。打开对话框、展开抽屉不是导航,即使内容很多,也应是按钮。下载有时是链接(一个可寻址的文件),有时是按钮(当场生成报表),以资源能否被单独取出为准。「按钮样式的链接」可以长得像按钮,只要角色仍是导航——区分的是契约,下一步才处理外观。

怎么落地

  • 会改变 URL 或打开另一份资源的,用链接;会提交、删除、切换状态、打开临时面板的,用按钮。
  • 在组件审查里问「后退应该把这件事撤掉吗」:应该,多半是动作;不应该且应留下历史条目,多半是导航。
  • 不要用点击脚本把 div 当按钮或当链接;那两份契约都不会自动出现。
  • 验证:给控件一次长按或右键。出现「新标签打开 / 复制链接」且这些命令有意义,角色是链接;这些命令无意义或根本没有,角色应是按钮。

延伸

  • 同组E1.08.2 语义错配会破坏辅助技术的可用性 · E1.08.3 外观互换会误导用户对后果的预期
  • 相邻E1.16 链接与按钮的语义区分 · G4 跨页流转 · J5.02 无障碍树与角色
  • 站内检索link versus button · navigation versus action · href

同组卡片

快捷操作

分享

分享当前页面

ios_share

https://hci.top/zh/handbook/E1.08.1