1
前几天,我们发布了 一篇关于 纯 CSS 技巧的文章,其中一个带有双边框的元素可以看起来像暂停图标,并可以很好地变形为 CSS 三角形 ,看起来像播放图标。它最初发布时使用了一个 <div>
作为演示元素,这是我们方面完全的无障碍错误,因为像这样旨在进行交互的东西实际上是一个 <button>
。
它还包含一个使用 复选框黑客 来切换按钮状态的演示。这将键盘交互从“返回”单击更改为“空格键”切换,但更重要的是,应该有一个 :focus
状态来指示按钮(实际上是一个标签)是可交互的。
这两个问题都已修复。
2
Adam Silver 有一篇有趣的帖子,标题很好地概括了问题
真正的按钮(例如表单提交按钮)没有争议。真正的链接也没有争议。问题在于当我们混淆了它们时。
按钮(类型为“button”)不是提交按钮。按钮用于创建依赖于 JavaScript 的功能。例如显示菜单或显示日期选择器。
他举了另一个例子,一个“按钮”式的号召性用语。它们通常只是被样式化成按钮以突出显示的链接。这段话很重要
在 弹性 Web 设计 中,Jeremy Keith 讨论了材料诚实的想法。他说:“一种材料不应被用作另一种材料的替代品,否则最终结果将是欺骗性的”。
让链接看起来像按钮在材料上是不诚实的。它告诉用户链接和按钮是一样的,但实际上不是。
在 设计系统中的按钮 中,Nathan Curtis 说,我们应该区分链接和按钮,因为“按钮的行为会带来许多与简单的锚标签不同的考虑因素”。
例如,我们可以新标签页打开链接,复制地址或将其保存为书签。所有这些我们都不能用按钮做到。
号召性用语按钮——同样,只是链接——是欺骗性的。用户浑然不知,因为这种样式删除了它们自然的暗示,掩盖了它们的行为。
我们可以让号召性用语按钮看起来像普通链接。但这会让它们在视觉上变得弱化,从而削弱了它们的突出程度。这就是问题所在。
我发现即使在 <button>
中,你也会遇到问题,因为这些按钮的功能通常非常不同。例如,CodePen 上的 Fork 按钮会带你到一个全新的页面,其中包含笔的新副本,这感觉有点像点击链接。但它不是链接,这意味着它的行为不同,并且 需要解释.
3
我将再次重复 Adam 的话
按钮用于创建依赖于 JavaScript 的功能。
表单内的按钮具有无需 JavaScript 的功能,但这是唯一的情况。
这意味着,<button>
在 HTML 中完全没有用处,除非 JavaScript 成功下载并执行。
推到极端逻辑结论,你永远不应该在 HTML 中使用 <button>
(或 type="button"
),除非是在表单中。由于 JavaScript 是按钮执行任何操作的必要条件,因此你应该在 JavaScript 中将按钮注入到合适的位置,一旦它的功能准备就绪。
或者,如果这不可行...
<button disabled title="This button will become functional once JavaScript is downloaded and executed">
Do Thing
</button>
那么在准备好后更改这些属性。
在我看来,当“扁平化”设计流行起来时,我们可以讨论相反的情况。我知道这不是 Web,但用户不在乎——iOS 中的所有按钮都像链接一样设计。我们应该将 Web 设计建立在这一事实之上(因为用户从系统中学习了新方法),还是应该以相反的方式设计我们的网页(当然会夸大其词)以迷惑用户呢?
关于 #3,使用
hidden
属性是否足以使按钮在 JS 能够发挥作用之前无效(然后删除该属性)?也许是为了让用户知道他们禁用 JS 后功能会丢失?与其在页面或设计中留下空白让用户猜测发生了什么,不如直接解释清楚并提供解决方案。
你不会想要使用
hidden
属性的原因是,按钮会失去在页面中的位置。当它显示时,它会将它下面的所有内容向下移动,以便它可以容纳它。使用disabled
属性意味着按钮会保留其位置,其余内容会落到它应该在的位置,并且页面不会在加载 JS 时跳动。有趣。有道理。谢谢你们俩。
新闻快讯:用户不在乎。他们甚至没有意识到这一点,他们不会查看 HTML 源代码来查看哪个元素是什么。
这只是强迫症,而不是你为用户担心的事情。
你说得对,也说错了。大多数用户不在乎它是否是按钮或链接,但从无障碍的角度来看,它可能会产生相当大的影响。
我教的是按钮用于切换(ish),链接用于路由到 URL。它也与辅助技术有关,因此对于开发人员来说,正确理解这一点很有帮助。
不,我不会这么做。我不想让我的工作流程变得更复杂。
即使我基本上一直在构建 SPA,并且它可以免费提供,但对于剩余的情况,通常只需要很短的时间就可以下载按钮工作所需的 JavaScript。
如果按钮保持 inactive 一秒钟,这没什么大不了的。
在我们的系统中,我们使用看起来像
按钮
的链接
。原因是,在大多数情况下,我们想要显示模态窗口(从提供的link href
加载),而如果不存在 javascript,用户将直接跳转到模态窗口内容的独立页面。有一些情况,其作用类似于切换或仅仅是一个链接。主要原因是,链接上的按钮样式看起来更像是在执行某些操作,从用户的角度来看,更容易找到并进行交互。
但我同意,相同的样式和不同的功能可能会造成伤害。
我不想责怪任何人。但在争论之前,只需要阅读 HTML5 规范,其中对按钮的含义和
标签的含义有很好的解释。
https://www.w3.org/TR/html5/forms.html#attr-button-type-button-state
https://www.w3.org/TR/html5/text-level-semantics.html#the-a-element
非常清晰且明确。
如果你的隐藏按钮包含不会自动显示或通过标准用户交互显示的文本,你会和谷歌玩得很开心。他们称之为“隐蔽”,可能会导致有机索引被禁止。
是的,Web 开发是多方面的。