链接不是按钮(2013)

2021-04-10 01:34:29

如果“按钮”这个词来到脑海中,你可能是对的。不幸的是,我们在我们的测试中看到了很多实例,其中使用图像或CSS样式来触发某种操作的动作。以下是一些标记样本:

在上面列出的每个案例中,标记是不合适的,并创建不需要的可访问性问题。在按钮的情况下,我们需要牢记以下可访问性考虑因素:

设备独立性:不需要用户使用任何特定设备操作控件。换句话说,用户必须能够重点关注它并使用键盘或语音命令以及鼠标激活它

颜色对比度:按钮的设计必须具有足够的颜色对比度,并且按钮不能在高对比度模式下消失。

名称,状态,角色,value:按钮必须使用适当的名称,状态,角色和值正确地将其自身暴露为可访问性API。正如我在另一个博客文章中所描述的那样:名称 - 类似于一个人的独特名称,这件事的名字是什么?

价值 - 这个东西有什么价值? (通常只有形式元素有一个值)

首先要注意的是,不应该用作按钮。 “仅公开HTML核心属性的元素由基本HTMLElement接口表示。”

此外,您也不应该使用div。它的DOM接口与跨度相同,只是它添加了一个新属性,“对齐”,它被推荐不推荐使用。

您应该注意一些非常重要的新属性:'tabindex','accesskey',在按钮'值'的情况下。我们将跳过除了提及HTML规范之外的AccessKey属性的讨论,AccessKey和TabIndex属性有效的项目是链接,按钮和表单字段。换句话说:在Tab顺序中自然可用的项目,因此能够以独立于设备的方式访问。您将注意到div或span的此类属性。

使用我们上面的考虑列表,让我们比较Div&跨越A&按钮

有些读者可以注意到,您可以使用Wai-aria操作Divs和Spans的名称,状态,角色和价值。 Wai-Aria Spec的作者说:当主机语言为该类型对象(源)为该类型的语义元素提供语义元素时,不合适地创建具有样式和脚本的对象。一个按钮显然是一个语义元素存在的东西之一。 Wai-aria最好为这些案例保留,在那些没有其他方法以实现目标的情况下。换句话说,Wai-aria很棒,适用于三州复选框和日期拾取器,但只是愚蠢的按钮。简而言之,无论你做什么,Divs和Spans都不是按钮(或链接)。如果你用它们,你错了。

现在我们留下了链接和按钮。我们如何在两者之间选择?非常简单地,通过回答一个问题:当用户激活此控件时会发生什么? Microsoft用户界面交互指南讨论按钮和链接概述了此决策过程相当良好(这里释放):

使用命令按钮:显示用于收集输入或做出选择的Windows,即使它们是辅助命令也是如此。

使用链接导航到另一页,窗口或帮助主题;显示定义;和命令菜单。

您是否是Windows,Mac或Linux人,这些UI范例是所有操作系统中链路和按钮控件的De-Facto标准。

在第一次案例中,我经常看到这些与背景图像精灵,给控制一个按钮的视觉外观。在这种情况下,此项目既不是按钮或链接。因为此项目缺少HREF属性,所以它是一个“锚”,而不是链接。作为锚,它不是键盘聚焦。此外,由于使用背景图像精灵,该物品没有图像没有文本替代,因此没有“名称”。对于高对比度模式的低视觉用户,图像将消失。对于语音描述用户,它们将无法在该控件上使用链接或按钮命令。从可访问性的角度来看,此项目可能并不存在,并且这里的使用并不优于跨度。

如今,第二个例子被认为越来越少,在这些情况下,在这些情况下,这些物体的某些变化仅仅比第一例更好​​地更好地略微好。在第一个示例中,缺少HREF属性意味着该项目无法通过键盘获得焦点。在这些示例中,我们看到使用href =“#”。开发人员经常使用哈希标记来拥有一个链接(他们认为)没有任何作用。问题是他们以多种方式错误。

根据规范,'#'是“片段标识符分隔符”。换句话说,“#”是指在一串文本之前,该文本标识页面上的片段 - 命名锚或对象的特定ID。开发人员认为,通过没有标识符,它没有任何东西,不幸的是他们100%右。在某些浏览器/操作系统组合中,这也可能意味着焦点在别处转移。例如,在某些情况下,它具有指向浏览器窗口或身体元素的明显效果。从那里开始,选项卡从头开始重新启动。

想象一下这种情况:您已编写了一个伪按钮,该伪按钮通过多个步骤通过向导的过程导航,每个步骤都使用该步骤< href =“#”>关联。每次键盘用户完成一步时,他们都需要在页面顶部开始,翻页到下一步。瘸。

也许是使用链接(或SPANS或Div)作为按钮的最重要的事情是,没有智能参数可以赞成这种做法。按钮元素可以像Links,div和spans一样打造,而无论您选择哪个元素,您仍然需要将相关事件绑定到控制。所以如果它看起来像一个按钮并像按钮一样,那么有什么令人信服的原因是不仅仅是使用一个按钮?

如果它导航,它是一个链接。使用Link Markup具有有效的超文本参考