你知道那个笑话,“两个前端开发人员走进酒吧,发现他们没有任何共同点”?它很有趣,但也很令人沮丧,因为它是真的。
本文将从三个不同的角度探讨网页设计和开发中的无障碍性。这三个角度可以帮助我们弥合用户和设计师/开发人员之间的巨大鸿沟。它可能有助于我们找到构建更美好网络和更美好未来的共同点。

第一幕
“我只是不明白开发人员为什么不考虑无障碍性。”
有人曾经对我说过这句话。让我们停下来思考一下。也许我们可以从不同的角度思考问题。
想想作为一名开发人员,你需要了解多少东西才能成功构建一个网站。在任何一天,在任何一个网页开发职位上,网页开发的其他细节都会出现。也就是说,它不仅仅是“仅仅”了解 HTML、CSS、ARIA 和 JavaScript。根据他们需要做的事情,开发人员在职业生涯中还会学习其他东西。
这可能是包管理、工作区、代码生成器、协作工具、资产加载、资产管理、CDN 优化、捆绑优化、单元测试、集成测试、视觉回归测试、浏览器集成测试、代码审查、代码风格检查、格式化、通过示例进行沟通、变更日志、文档、语义版本控制、安全性、应用程序部署、包发布、回滚、增量改进、增量测试、持续部署、合并管理、用户体验、用户交互设计、排版比例、响应式设计中的长宽比、数据管理,以及… 好吧,这个列表可以一直列下去,但你懂我的意思了。
作为一名开发人员,我认为自己非常聪明,因为我知道如何做这些事情中的大部分!停下来思考一下:如果你考虑世界上有多少人,并将它与世界上能构建网站的人数进行比较,它在比例上是一个非常小的比例。这有点…酷。甚至不可思议。除此之外,想想你上次发布代码的感受,那感觉有多好。“我搞清楚了一个很难的东西,并且让它运行了!啊!我感觉很棒!”
那种情绪上的高涨真是太棒了,不是吗?仅仅想到它就让我微笑。
现在,想象一下,一位无障碍性主题专家走过来,基本上告诉你,你不仅不特别聪明,而且你一直都在做错误的事情。
哎哟。突然间,你感觉不太好。错了?我?什么?你的肾上腺素甚至会飙升,你会开始感到防御。是时候为自己辩护了… 对吧?是时候据理力争了。
认知失调甚至会非常令人难以忍受。发现自己不仅不擅长自己认为自己擅长的事情,而且还一直都在说,“去你的,谁在乎你呢,”对一大群无法使用你帮助构建的网站的人,因为你(有意或无意地)忽略了他们的存在,忽略了需要比你多年来为所有人提供的巧妙之处更多的用户。哎哟。
考虑到所有因素,我认为开发人员想要捂住耳朵,假装这一切都没有发生,他们仍然非常聪明和棒极了,是可以理解的。唯一一个告诉你做错了的“专家”只是一个人的。一个人很容易忽略。
— 场景结束。
第二幕
“我觉得自己完全不重要。”
这是我经常从需要辅助技术来使用网站但经常发现网站不可用的人那里听到的一句常见的话。也许他们无法阅读文本,因为网站的设计忽略了颜色对比。也许存在嵌套的交互式元素,因此他们无法登录执行诸如支付水电费或自行购买必需品之类的操作。也许他们最喜欢的歌手终于开设了网上商店,但使用辅助技术的用户甚至无法浏览该网站,因为虽然它从有视力用户的角度来看可能看起来是交互式的,但所有按钮都是 div 并且无法使用键盘交互… 根本没有。
这种沮丧感可能会爆发并蔓延;这种沮丧感最主要的承受者往往是那些试图提供更具包容性的产品的人。结果是一个负面反馈循环;一些技术人员选择不听,因为“这很粗鲁”(完全忽略了这个说法的讽刺意味)。其他技术人员在无障碍性导向的设计和开发工作中经常遇到的情绪压力下苦苦挣扎。
事实是,这些用户被忽视了太久,以至于感觉他们在对一个空洞喊叫。难道没有人听吗?难道没有人关心吗?似乎只有要求法律赋予他们的待遇才能得到承认!即使那样,他们也经常感到被忽视和遗忘。诉讼是唯一的解决办法吗?
越来越多的迹象表明,大声疾呼和斗争是唯一被听到的方式,即使那样,可能也要很久才能发生任何改变。
— 场景结束。
第三幕
“我知道它不符合颜色对比度要求,但我觉得这对我的设计师创意太限制了。我根本不喜欢它看起来的样子。”
在我的职业生涯中,我经常听到这句话。对于有些人来说,包容性设计不是确保我们的网站可以被所有人使用所必需的护栏,而是他们创造力的抑制剂。
如果你是一位这样想的设计师,请考虑一下:你并不是为自己设计。这不像实体艺术;虽然你的视觉设计可以是艺术性的,但它仍然在网络上。它仍然为了网络。网页设计师面临着更大的挑战——他们的艺术愿景需要被所有人使用。挑战自己,将对话转移到不同的空间:你只是还没有找到合适的设计。认为设计要么美丽要么无障碍是一个错误的选择;不要陷入这个陷阱。
— 场景结束。
让我们重新构建对话
这些只是我们可以在数字无障碍性方面考虑的三个视角。
我们可以谈论那个“只想发布功能”并说“我们以后可以回到无障碍性”的项目经理。我们可以谈论那个开玩笑说“如果他们失明了,他们根本不会使用互联网”的开发人员,或者那个说他们只会在“浏览器强迫他们这样做”后才关注无障碍性的开发人员。
我们可以,但我们真的没有必要。我们知道这些对话将如何进行,因为我们中的许多人已经经历过这些经历。项目从未被改造过。公司只为开发产品支付一次费用,然后为无障碍性审核支付费用,然后在审核显示改造成本将高于构建新产品后,为重写支付费用。我们知道那个坚持认为只有当浏览器不允许时才应该被迫做某事的开发人员,并且他们不太可能相信他们代码的包容性架构不仅有益,而且是必要的。
那么我们应该谈论什么?
我们需要承认,设计师和开发人员需要在职业生涯中尽早学习无障碍性。我用这个类比来思考:想象一下你学会了一种外语,但你只学会了该语言的俚语。你的词汇在技术上是正确的,但有很多该语言的母语人士永远无法理解你。以 JavaScript 为首的网页开发人员从 JavaScript 的角度来看通常在技术上是正确的,但他们也经常创建最终会遗漏很多人的解决方案。
我们如何纠正这种情况?我将在这里坚定不移,正如我们所有人都必须坚定不移一样。我们需要确保我们制作的任何文档都包含可访问的代码示例。设计必须包含可访问的注释。我们的会议演讲必须包含无障碍性。我们用来使生活更轻松的酷炫玩具?它们必须是可访问的,并且不应有任何理由可以接受低于这个标准。这将成为我们与网络相关的一切的新的最小可行产品。
但已经存在的代码怎么办?已经写好的成千上万篇文章、已经发表的演讲、已经制作的库怎么办?我们如何克服这些?即使我为 CSS-Tricks 撰写这篇文章,我也在想我阅读过的所有文章以及当我意识到最终结果不可访问时我所感受到的失望。或者那些真正有趣但无法生成可访问代码的代码生成工具。或者那些流行的 CSS 框架,它们未能考虑选项卡顺序或颜色对比度。我想要所有那些人感到难过,或者受到某种惩罚吗?
不,甚至完全不。这种想法不会带来任何好处。好处来自我们已经知道的地方——同情和好奇心。
我们带着同情和好奇心来处理这个问题,因为这些是可持续的改进方式。如果我们沉溺于过去行为的愧疚中,自责或责怪其他人多年来忽视了对所有人的无障碍,我们永远不会进步。坦率地说,如果我们必须以某种方式为过去的无知行为付出代价,我们什么也做不了;因为是的,我们确实忽视了它。在很多方面,我们仍然在忽视它。
真实例子:Google 开发者培训教授了很多东西,但它除了无障碍的基本部分外,什么也没教。JavaScript 框架沉迷于 JavaScript 的巧妙和复杂性,以至于完全忘记了 HTML 已经存在。即使这样,无障碍仍然可以处于次要地位。Ember 存在了大约 8 年才添加了一个以无障碍为中心的社区小组(即使他们从那时起取得了很大进展)。React 必须创建一个完全不同的路由器解决方案。Vue 甚至还没有开始公开解决核心框架中的无障碍问题(尽管有一些社区努力)。无障碍工程师一直在恳求inert
在浏览器中原生实现,但它经常资金不足且优先级较低。
但我们是技术人员和艺术家,所以当我们阅读关于无障碍对象模型以及我们的代码如何被操作系统翻译并馈送到辅助技术的有趣文章时,我们的好奇心战胜了。这很酷。毕竟,编写机器代码以便它可以与另一台机器对话可能是我们想象中要做的,对吧?
关键是,我们只有在能够对自己有同情心时,才能开始对其他人有同情心。当然,我们犯了错误——但我们不必保持无知。想想你花了几个小时调试代码,结果发现只是一个错字或一个缺少的分号。你是否还在为这件事自责?不,你通过逻辑思维培养了同情心。想想开始感到沮丧的初级开发者,以及你是如何激励他们继续尝试,以及我们都有好日子和坏日子。这就是同情心。
最酷的部分是:我们不仅拥有这项技术,我们实际上就是可以修复它的人。我们可以站起来,明天努力做得更好。我们可以花些时间阅读关于无障碍的信息,并每天继续阅读,直到我们像了解其他事情一样了解它。一开始会很困难,就像我们第一次尝试...编写测试、编写 CSS、使用那个永远铭刻在我们记忆中的 API 一样。但随着重复和练习,我们变得更好了。它变得更容易了。
从逻辑上讲,我们知道我们可以学习难事;我们已经一次又一次地学习了难事。这是我们签署的生涯和工作。这就是让我们每天早上起床的原因。我们喜欢挑战,我们喜欢解决难题。我们完全支持这个。
我们能做些什么?以下是一些行动步骤。
也许我已经失去了一些读者。但是,如果你看到这里,也许你在问:“Melanie,你已经说服了我,但我现在能做什么?”我会给你两个清单,让你能够采取行动,给你一个开始的地方。
有同情心地提升自己
- 开始关注一些有残疾的人,他们在社交媒体上分享他们的经历,目的是从他们的经历中学习。倾听他们想说的话。不要和他们争论。不要用语气来压制他们。倾听他们想要告诉你什么。也许它并不总是以你想要的方式出现,但无论如何都要倾听。
- 改造你的知识。尝试从 HTML 开始编写下一个组件,然后用 JavaScript 添加功能。了解你从 HTML 和浏览器中免费获得的内容。参加一些针对工程师的无障碍课程。为了提升你的技能,投资于自己的提升。
- 打开屏幕阅读器。了解它的工作原理。了解设置——如何打开纯文本版本?如何更改声音?如何让它停止说话或更快地说话?如何通过标题浏览?如何获取链接列表?键盘快捷键是什么?
额外挑战:尝试构建一些与无障碍相关的工具。查看A11y 自动化跟踪器,这是一个开源项目,旨在跟踪可能存在的自动化,但尚未创建。
逐步改进你的代码
有一些关键的障碍阻止人们使用你的网站。不要停下来为它们感到难过;推动自己采取行动,让你的代码比以前更好。
以下是其中一些最糟糕的:
- 嵌套的交互元素。 比如在链接内部放置一个按钮。或者在另一个按钮内部放置一个按钮。
- 输入字段上缺少标签(或非关联标签)
- 键盘陷阱会阻止用户前进。了解它们是什么以及如何避免它们。
- 你网站上的图片对用户来说重要吗?它们是否具有
alt
属性,且包含有意义的值? - 你的网站上是否有空链接?你是否使用了链接,而应该使用按钮?
建议:阅读A11y 项目上的检查清单。它绝不是详尽无遗的,但它会让你开始。
你知道吗?一个好的开始正是你现在的位置。一个好的开始时间?今天。
特色标题照片来自Scott Rodgerson在Unsplash上的作品。
人们不愿意为自己的家安装无障碍坡道的原因也是如此。
更像是为你的企业安装无障碍坡道。企业会这样做,只要成本与企业规模成正比。
关于“人们不愿意为自己的家安装无障碍坡道的原因也是如此”,我不理解这个比较,也不理解它与这篇文章有什么关系?我立刻就想到了企业“过去”没有提供这种通道,但由于法律的强制以及足够多的公民认为他们必须提供这种通道,尽管会产生成本。这仍然不充分,但我认为这是一个更公平的比较。
我不了解 508 的具体情况,也不了解最近有哪些人被起诉,但我将继续自觉地检查我对 HTML 和 aria 的使用,学习并希望改进我的代码,使它更易于访问。我会犯一些错误,我认为如果我愿意迭代、改进和学习,那就没关系。
另一个比较可能是向项目经理申请时间来添加测试或进行质量保证。根据你所在的组织,你可能会得到截然不同的回应。在某种程度上,你必须给予自己宽容和自尊,决定你知道什么是最好的,因为你是这个主题的专家。只需添加测试即可。在你认为合适的时候,只需对自己的代码进行无障碍审核即可。这难道不是成为专业人士的一部分吗?
关于这篇文章,我喜欢它的说服力,即使我们不得不重复强调这一点,我想这与人们为什么如此激进有关,因为社区长期以来让他们失望了!同意。
另一个有趣的问题是,哪些流行的前端框架正在让正确实现无障碍组件变得更容易或更难?为什么我必须一次又一次地为无数次框架实现键盘导航?或者找到一个第三方挂钩或模块,对其进行审核,弄清楚如何让它工作?
除非他们定期受到需要无障碍坡道才能四处走动的人的拜访。区别在于大多数住宅都是私人可进入的,对于那些有通道的人来说,无障碍坡道可能不是必需的。然而,几乎所有网站在某种程度上都是公开可访问的。即使那些具有面向公众的身份验证页面,以及其他一切都被锁定在后面的页面。没有理由不尽可能地使公开可访问的事物真正公开可访问,即使只是为了告诉某人他们不应该在没有适当凭证的情况下访问这里,为他们提供请求帮助的有用方法,将他们引导到其他方向,等等。
并非如此。网站是一种公开可访问的服务,因此应平等地向所有人开放。选择忽视无障碍,就意味着你认为残疾人无关紧要。
顺便说一下,在家里安装无障碍坡道是一件非常普遍的事。我认识的所有坐轮椅的人都在自己的房子上安装了坡道。它们通常由铝制成,当你开车经过他们的住所时很容易看到。
这篇文章的标题“为什么开发者不认真对待无障碍?”是一个以否定指责形式的概括性假设。
我认为这种毒性完美地说明了为什么开发者对无障碍运动并不那么欢迎。想象一下,如果其他技术和范式通过情绪上的敌意来宣传自己,它们会变得多么受欢迎:“你不使用 Rust 是因为你不在乎残疾人,而且你自命不凡。以下是你应该关心 Rust 的原因,以及为什么它比 PHP 更快的原因。”
每个严肃的前端开发者都关心无障碍问题,这是 UI 中的 U(用户)。作者在开头提到的许多工具都是为了支持旧版浏览器并保持代码负载较小而存在的。(它们也适用于 CSS、HTML 和图像。并不是所有事情都与 JavaScript 相关。)我们将这些工具与更新的语言规范和其他工具结合使用,因为它们提高了我们代码的健壮性,从而产生了更稳定、可扩展的用户界面,这对每个人都有益。
如果行业中存在关于无障碍问题的分歧,我认为这取决于如何使 UI 更易于访问,而不是是否应该访问。极简主义并不总是最佳方法,即使对于初学者来说,它是最容易掌握的。从鸟瞰的角度来看,一个静态 HTML 文件可能看起来更易于访问,但如果它未能向用户传达预期的概念,或者用户未能保留该概念以备将来使用,那么该页面就从以人为本的角度来看失败了。引人入胜的界面有其目的。
这篇文章最后有一些好的建议,但我认为从技术角度而不是情绪角度来构建它会更有成效。
是的,我也有同样的想法。我自己也是一名开发者,写了数十年的代码,但过去 15 年我一直专注于无障碍问题,帮助其他开发者、设计师和测试人员了解什么是无障碍问题以及如何设计和实施它。关键在于如何呈现无障碍问题。不幸的是,有很多 a11y 人以“你做错了”的态度来处理这个问题。那是醋,不是蜂蜜。也许是因为我自己也是一名开发者,我在其他开发者学习 a11y 方面取得了很大的成功。**所有**开发者都希望他们的代码被使用——这就是编写代码的目的。因此,我遇到的所有开发者都非常感谢可以帮助他们的代码被更多人使用的无障碍提示。
所有这些都是很棒的建议,但我认为它缺少等式中一个重要的部分。
所有这些都缺少浏览器的作用。
如果你对当前情况进行快照,你会发现基本无障碍问题中的 90% 完全是浏览器的错误。
我们作为开发者,被迫为诸如
<select>
之类的功能构建自己的解决方案,等等。为什么?因为它们不能完全按照我们需要的样式进行样式化。你还有一些新东西,比如应该解决了许多问题,但它在浏览器之间存在着很多无障碍问题和一致性问题,我们根本无法使用它们。我们也希望有一个可用的
`
。只要像 Apple、Google 和 Microsoft 这样的市值数万亿美元的公司没有尽到最基本的努力来解决这些问题,你就无法在网络上对无障碍问题产生影响。
Apple 故意拖延时间,并拖累所有人,因为他们的商业模式鼓励使用应用程序而不是使用浏览器。
Google 虽然尽力教育开发者关于无障碍问题,但将整个责任山都推到了我们的背上...... 而且他们的大多数商业产品在 UX 和无障碍方面都糟糕透顶......
战争始于根源。一旦这些问题得到解决,它就会渗透到库中。一旦那里也得到解决,你可以打赌网络上的大多数无障碍问题将已经得到解决。
当所有这些都完成后,开发者的负担应该轻得多。我们不会以“又一个责任山压在我们身上”的态度来处理无障碍问题,而是以“当然,我可以轻松地为你解决这个问题”的态度来处理。
作为一个有残疾并使用语音识别功能的用户,我可以告诉你这不是浏览器的问题。是所有妨碍工作的 JavaScript 魔术。
Nuance 为所有浏览器提供了一个插件,该插件可以使网页的许多功能语音化。就我个人而言,我主要专注于将语音输入到文本框中的编辑文本中。如果没有 JavaScript 妨碍,它运行良好。但如果添加 JavaScript 来更改文本输入文本区域的方式,语音识别将失败。
热键是另一种故障模式。如果你可以按一个键来启动一个操作,你完全可以破坏你的环境,因为当你专注于应用程序而不是某个字段时,你可能会在输入时出错。你可以通过闭上眼睛并随机敲击键盘来模拟这种操作。如果你能弄清楚你的数据发生了什么,那么你可以获得额外积分。
在 2000 年悉尼奥运会之前,一个视力障碍者起诉了奥委会(并获胜),因为他无法访问该网站购买门票。该网站没有重建,但从那时起,所有澳大利亚政府网站都必须满足网络无障碍要求,这一要求一直持续到今天。
令人遗憾的是,二十多年后,我们仍在为“商业”互联网进行着同样的对话,尽管互联网技术取得了进步,但开发者仍然忽视了网络无障碍的那些非常简单的指南。
WAVE 网络无障碍评估工具 (https://wave.webaim.org/extension/) 是一款很棒的工具,因为它会告诉你你做对了什么以及你做错了什么。这很有帮助,因为它鼓励你,而不仅仅是告诉你你做错了什么。你也可以动态地关闭样式,看看你的内容在没有布局的情况下是如何呈现的,这对于帮助人们理解使用语义 HTML 元素进行内容呈现的价值非常有帮助。
无论如何,这是一篇很棒的文章。我认为网络开发社区需要每三天就发布一篇这样的文章,直到网络无障碍成为开发者的第二天性。它真的应该成为任何进入该行业的人学习的第一件事,因为实际上这可能是他们需要学习的最简单的事情。
这是一篇很棒的文章,但标题是不是有点适得其反?如果我是一名开发者,我看到这个标题,只会强化不关心无障碍问题是常态的想法,因此我改变自己实践的压力并不大。
我认为我会把它表述为“为什么没有足够的开发者认真对待无障碍问题”。
Fwiw,最初的标题是“关于无障碍问题的观点”。
我希望人们不要被标题分散注意力,因为标题的目的是让人们阅读它。
亲爱的 Melanie,
我认为第一个行为不一定是真实的。你是否考虑过学习无障碍问题的可访问性?
我尽我所能做到:语义化 html、React Aria、headlessui 等。
但这些东西很难
——信息并不总是最新的
——模式在不同设备之间并不一致
——aria 文档很密集
——许多验证器是付费的,而不是开源的
——我无法购买深入的课程来教我需要知道的一切(有很多关于 react、js、ts、css 等等的课程)
看看一个简单的卡片组件需要多少东西!https://inclusive-components.design/cards/
我希望众多无障碍问题布道者中的一位能够写出一本权威指南。我会严格遵守它。他们中的许多人只是在谈论无障碍问题的重要性,并给出一些入门提示。说到这里,我确实感谢你提供的清单链接 https://www.a11yproject.com/checklist/ 我会把它添加到我的工具箱中。你说“参加一些针对工程师的无障碍课程”——拜托,不要告诉我做一些事情,而没有告诉我如何做。哪些课程?我想参加。
无障碍问题很重要。无障碍应该是默认的。当很难学习无障碍问题,甚至更难判断自己是否做对了,而且还要自动测试它,而客户又希望产品昨天就发布,那么我真正有什么选择呢?
无论如何,感谢你写这篇文章。这条评论旨在作为建设性批评。请告诉我你的建议。
P.S.
我以前也做过设计。我从未见过有人故意让任何东西无法访问。我确实使用插件来检查这些值,但即使它们也无法捕捉到所有问题。它只是网络媒介的另一个设计约束。
我很快发现,每个屏幕阅读器的工作方式都略有不同。它们就像 pre-HTML5 浏览器;每个浏览器对标准都有自己的解释。作为一个免费应用程序开发者,我负担不起在所有屏幕阅读器上进行测试,而且它们也故意设计成你无法判断哪个屏幕阅读器正在使用(甚至是否正在使用)。这对小型开发者来说是一个相当大的挑战。
开发者面临的一个困难是,客户不喜欢某些旨在无障碍访问的网站元素的交互方式。有一位客户想要一个下拉菜单,它只能在悬停时打开子菜单,并且打开的链接具有目标页面,而不是充当一个按钮来切换子菜单的可见性。理由有两个部分:一是这是他(在他看来)的处理方式;二是他对网站用户的看法是,访问网站的任何人都不会需要使用点击驱动的粘性下拉菜单。另一个问题是他不想在任何地方看到键盘焦点指示器。
这真的很可惜。
那么,作为一个需要努力赚钱的开发者,为一个始终按时支付 100% 费用的客户工作,当每次从一开始就关注无障碍问题的要求都被忽略或拒绝时,我能做些什么呢?
我尽我所能做一些不会影响客户对网站“愿景”的无障碍工作。
这也令人羞愧。
完全同意!我经常被告知,具有足够对比度的颜色“与品牌不匹配”。
太糟糕了。我并没有严重的残疾,但作为一名患有震颤症的人,我非常讨厌只能用鼠标悬停才能展开的嵌套菜单。
具体来说,关于悬停展开子菜单,这个挑战实际上是可以解决的。但是,这需要一些谨慎的理解和跳出固有思维。最终结果是需要更多代码来确保一切正常工作。
我建议你告诉客户你可以满足他们的需求,但是由于这些更改的性质,需要额外的工时来确保无障碍功能仍然按预期工作。这也会涉及到与焦点相关的请求,我明确表示不会删除它,因为它是标准要求。在这一点上,你需要协商一个合适的解决方案,但确保他们了解焦点角色的重要性,这就是解决问题的关键。
我们越了解为了满足各种需求需要进行哪些更改和工作,我们就越能更好地管理客户的期望。在你用客户能理解的简单语言解释清楚之前,你应该假设他们对无障碍知识一无所知。如果他们确实了解,那么至少他们应该为最终结果负责,而你已经清楚地解释了,即使这是一个疏忽。
良好的无障碍功能的一大优势是可以轻松地进行演示,以展现某些类型更改的重要性。焦点就是一个这样的元素。
这是一篇鼓舞人心的文章,感谢你用如此建设性的方式写作!我尤其会记住将无障碍功能作为最低可行产品的概念。
我是一名开发者,我非常重视无障碍功能,标题一点也没让我生气:D......
......因为这是事实。我曾在一家公司工作多年,在那里,要让任何人认真对待无障碍功能都是一场持续的斗争。我们需要找到建设性的方法来解决这个问题。再次感谢。
现实世界例子
当我的项目经理看到完成的网站时,他们就完成了。转到下一个项目。没有为无障碍功能分配时间,因为对于项目经理来说,它在视觉上并不存在。根据我的经验,无障碍功能会使开发时间翻倍。没有经理会批准这样做。归根结底是钱的问题,抱歉,这就是经理的思维方式。
所以,我部分地将责任归咎于客户和经理。
此外,学习无障碍功能非常困难。这些信息散布在整个网络中,每个人都在说你应该做无障碍功能,但没有人说在哪里学习这些东西。有一些不同的、很不完整的标准,有时会相互抵消。
抱歉,但我真的开始对每个人都在标榜无障碍功能,却没有任何后续行动感到生气。写这样的批评文章很容易。最好将时间投入到无障碍功能的文档中,但这意味着要付出艰苦的努力。
抱歉在这里发泄,但像这样的文章毫无贡献。
根据我的经验,无障碍功能使开发时间翻倍的唯一原因是,公司聘用了太多“全栈”开发人员来做前端工作。虽然 HTML 是网络的核心基础,但大多数开发人员是 JavaScript 为先的,他们认为 HTML 不是真正的编码。如果你想责怪经理,就责怪他们无法聘用合适的人才,而不是他们只在乎钱。
如果你想讨论金钱,诉讼和失去优质客户的成本比一开始就聘用一组真正的前端开发人员编写良好的代码要高。
以下是一些我个人觉得有帮助的资源:
书面指南
– https://webdev.ac.cn/accessible/
– https://mdn.org.cn/en-US/docs/Web/Accessibility
– https://developers.google.com/web/fundamentals/accessibility/
– https://www.accessibility-developer-guide.com/
– https://www.smashingmagazine.com/2021/03/complete-guide-accessible-front-end-components/
视频和在线研讨会
– https://www.udacity.com/course/web-accessibility–ud891
– https://youtube.com/playlist?list=PLNYkxOF6rcICWx0C9LVWWVqvHlYJyqw7g
– https://smashingconf.com/online-workshops/
其他建议
– https://www.a11yproject.com/resources/#courses
当然,这很难,就像你在前端开发中必须学习的几乎所有其他东西一样。但正如作者已经说过的:
“起初会很困难,就像我们第一次尝试……编写测试、编写 CSS、使用那个永远铭刻在我们记忆中的 API 一样。但随着重复和练习,我们变得更好了。它变得更容易了。
从逻辑上讲,我们知道我们可以学习困难的事情;我们已经学习了困难的事情,一次又一次。这就是我们选择的生活和职业。这就是每天早上让我们起床的东西。我们喜欢挑战,我们喜欢找出解决方法。我们完全为之而来。”
希望这有帮助,学习愉快!:)
这是一篇写得非常棒的文章!
很棒的文章!我特别喜欢你承认,对于开发者来说,无障碍功能只是他们被期望掌握的知识领域之一,而且它在大多数教授前端网页开发的地方并没有很好地教授(或者根本没有教授)。我们需要从问题的根源入手,将其作为一项完整教授的学科。
也就是说,在评论中,一些人说学习无障碍功能很困难。我不得不反驳这一点——与学习 React、如何平衡性能与功能或跟上最新的浏览器更改相比,这并不难或耗时。开发者在工作中经常学习困难的东西。我们有责任做正确的事,就像我们对待隐私和安全一样。
很棒的文章,我同意许多评论,学习如何使网站无障碍并非易事。
作为一名退休的全栈开发人员,我一直与无障碍功能作斗争,并且从未觉得我在这方面很擅长。但很多时候我的感觉是,“为什么屏幕阅读器如此愚蠢,为什么他们需要如此多的帮助和引导才能工作?”
我仍然在思考这个问题,因此我要补充一点,除了浏览器需要更好地标准化无障碍功能支持之外,也许能够不那么依赖 DOM 而更多地解释其显示的屏幕阅读器会有所帮助。
这篇文章和评论必须缩小对无障碍功能含义的关注范围。残疾类型远不止视觉上的。仅移动障碍就从严重残疾的四肢瘫痪到慢性疼痛和手部精细运动控制能力丧失,比如我一样。像我们这样的人使用语音识别作为我们的无障碍工具。
A11y 对语音启用应用程序没有任何说法。Nuance 正在进行一场失败的斗争,因为所有用于修改文本区域外观和操作的精巧的 JavaScript 魔法工具包。Electron 是这方面最糟糕的罪魁祸首之一。
语音识别用户遇到的三个主要问题是 JavaScript 干扰文本输入、热键和使用绕过内置语音无障碍挂钩的 GUI 工具包。
JavaScript 干扰经常通过完全不允许文本输入、删除字符、重复字符、输入字符但未显示它们、破坏剪切和粘贴来破坏文本输入。热键会中断,因为非焦点状态下的语音识别会在你说话时触发命令。想想猫在键盘上行走。非标准 GUI 工具包经常不接受语音识别的输入,或者更糟糕的是,在使用语音识别时锁定,因此你无法再使用应用程序,需要重新启动机器。
我们该如何解决这个问题?
体验残疾人的生活。戴上眼罩,尝试在线工作和玩耍。感受这种沮丧,并渴望摘下眼罩,想象每天都这样生活,而你无法摘下眼罩。
将你的键盘放在抽屉里或用书盖住。使用语音识别,感受应用程序应该至少支持基本语音识别,但却没有的挫败感。
当你摘下眼罩或将键盘放回桌面时,那种解脱的感觉,是残疾人永远不会感受到的。
体验这种生活,看看世界通过我们的经验是什么样子。
我们始终努力遵循最佳实践。也就是说,使用我们的无障碍功能合作伙伴平均会为一个完整的网站构建增加大约 80 个小时。因此,这相当于 12,000 美元的额外构建费用。这还不包括无障碍功能合作伙伴的费用(这些费用相当高)。
构建一个无障碍网站不仅仅是遵循最佳实践。你需要有真正有残疾的审计人员。这是很昂贵的。如果客户没有为此付费,我们也不会付费。
我们将其作为选项向客户提出,如果他们选择退出,我们会让他们签署一份放弃,承担任何诉讼产生的全部法律责任。