是时候系统地修复 Web 无障碍问题了

190 阅读6分钟

原文连接:yatil.net/blog/fix-we…

Web 无障碍毋庸置疑是十分重要的。Web 是信息、教育、娱乐和社交活动的主要媒介。并且对很多人来说还是难以置信。根据 WebAIM 对一百万个主页的评估,97.4% 的主页容易检测到故障。

W3C 的 TPAC 会议今天开始。这是所有 W3C 小组都有机会去会面和确保他们致力于推动 Web 发展前进的地方。目前已经有很多可访问性了,但是都未嵌入到整个组织。这是有结构性原因的(W3C 的 Web Accessibility Initiative - WAI - 是 W3C 内部一个专门的部门),虽然 WAI 检查所有的无障碍规范,但是大部分在一开始都没有考虑到无障碍。

即使是为了无障碍开发的规范,也存在严重的采用问题。唯一获得真正吸引力的无障碍标准是 Web 内容无障碍指南 (WCAG) 2,它基本上是创造 Web 内容的一切(博客引擎、社交媒体网站、视频共享),但很少工具从中改编部分,更不用说全部。

UAAG 2.0,是为了让浏览器和其他用户代理都支持无障碍的目标而建立的标准,甚至没有作为标准发布,而是作为工作组注释发布。没有足够的共识让它成为浏览器的要求。

另一个 W3C/WAI 发布的标准是 ARIA (无障碍的丰富的互联网应用),它提供角色、状态和特性让丰富的用户界面无障碍。它是完全不同的语义,你可以将它添加到 HTML 之上,以使得你的网站更加无障碍。它也可以用在其他的技术上,例如 ePub 或者 PDF。

虽然最初开发者们使用 ARIA 是在复杂情况下使他们的 HTML 适应屏幕阅读器的 API,但如今,ARIA 也几乎是必备的,即使在简单的网站中。如果在一个页面中有两个导航区域,比如视觉上的水平主导航和垂直子导航,通常给他们命名。在 HTML 中没有机制可以实现这一点,所以必须需要使用 ARIA。

无障碍变得复杂且不可预料

为了搭建一个无障碍的产品,你需要去了解所有这些技术是如何相互作用以及如何能够将他们结合起来创造一个无障碍的体验。你需要去了解无障碍名称是什么,以及 aria-label 属性是否会覆盖 aria-labelledby 属性。(并不会。)

为此 W3C 提供了许多额外的规范,例如 ARIA 创作实践,演示了 ARIA 是怎么工作的。但是它的例子并没有体现出 HTML 最好的实践,因为它在技术上是中立的。还有 HTML 无障碍 API 映射,它解释了 HTML 是如何映射到无障碍性 APIs 的关系,尤其是在使用 ARIA 时。在 HTML 中的 ARIA 规范,它给出了当首次在使用 HTML 时如何使用 ARIA 的建议。

在此之上,你需要去了解辅助技术的功能以及它实际上是如何使用这些技术的。由于辅助技术巨大的市场,这里通常具有不确定性。并且 HTML 元素,像是 <input type="date">,已经标准化了十多年,在现代的浏览器上缺乏无障碍支持对开发者来说并不容易。

“不要使用 ARIA 除非你不得不去使用”这是无障碍专家常说的话,但是普通的开发者们怎么知道什么情况下他们需要去使用呢?无障碍的学习实在是糟糕透了,而不是确保清楚在什么情况下该怎么使用,我们只是让设计师和开发者去做这些重要的决定。

WCAG 3 不会解决这个问题

许多人对 WCGA 3(后面可能会叫做 W3C Accessibility Guidelines) 抱有很高的期待。但是无障碍测试是我们遇到的最少的问题。当 WCGA 3 进入推荐状态,没有任何东西会让开发者更神奇的了解到如何实现某个结果。它不会使任何技术的相互作用更加简单。(并且陪审团是否真的会改善无障碍的测试。)

我们需要共同努力

在无障碍中已经有一些回旋的余地了:在什么情况下什么替代文本是正确的?是一个按钮或者一个链接吗?我们能够根据上下文来做出选择是件好事,因为 web 是一个如此复杂的媒介。

但是如果在 ARIA 中有些内容,它应该在 DOM 和 AOM 中要有具体定义的结果,从而在辅助技术中有可预测的结果。

例如,如果你最近指定 aria-haspopup="dialog",大部分屏幕阅读器会认为有个菜单将会弹出。这不是超级有用。

这缺乏可预测性和可操作性会伤害到使用者。开发者不可以依赖技术来工作,这可能会占据了原本可发挥更好用处的资源。

最初,当我们谈论到 ARIA,计划是将它的大部分方面快速的转换成原生 HTML。组合框、对话框和便签面板。但是一个开箱即用的、本地可访问的世界乐土并没有实现。

相反,ARIA 现在是一种位于技术之间的元语言,为它们定义了一种无障碍的词汇。这带来了有趣的发展,ARIA 采用了 HTML 的特性而不是其他方式。ARIA 现在甚至有了段落的角色。

谁可以指责开发者当他们省略搜索 HTML 而直接转到 ARIA - 毕竟它的名字是无障碍的。但是 ARIA 的宽容度要更低,并且比起不好的 HTML 元素更加具有破坏性。它通常是更加复杂的。一些角色必须在其他角色中。使用某些角色需要实现可预测的键盘导航(如果不这样,你不可以免费的得到它们)。

该怎么办?

我认为我们需要去确保无障碍的实现是可预测的,易于理解的和容错的。由于严重依赖 ARIA,并且几乎没有将无障碍性纳入核心技术,对于大多数的开发者来说无障碍将更难以理解,并且添加了越来越多变量。而这些都是在辅助技术的实际支持之前。

为了更简单的去使用,我们必须恢复无障碍性,并使现有的基本标准现代化。这会简化文档、提高可靠性、使得错误更容易检测到。这也会帮助无障碍性教学更简单。

并且浏览器也必须要尽其所能。当一个表单字段缺乏了一个标签为什么没有控制台警告?为什么我可以用无意义的 ARIA 属性污染我的 HTML,浏览器甚至不会有错?每一个 role="link" 都应该有“你是否想使用一个 a 元素来代替”的信息。

如果我们想要让 web 变得每个人都可以使用,那么它的工具也必须是适合每个人的。这始于无障碍的核心成分,例如 HTML。