何为无障碍?

好的网站设计是具有人文气息的,不仅仅是视觉的美观,加载渲染速度的快慢。而是使尽可能多的人能够使用Web站点,即便他们有或多或少的缺陷。而「无障碍设计」,就是现代Web 开发中一个值得关注的分支,来让我们开发易访问的内容的网站。它主要体现在以下几点:

  1. 让视觉障碍者可以通过「屏幕阅读器」(Screenreaders)得到友善的听觉体验。
  2. 设计需要对听力障碍者友好,通过视觉内容能够做出替代。这部分相关的程序事实上仍未得到足够重视,任重道远。
  3. 行动障碍者的优化更多的着重于是否能让用户仅用鼠标的寥寥几个按键就能得到有效的操作。
  4. 认知障碍者的优化主要体现在风格统一,用户信息展示要明确,业务逻辑要简洁明了等等。

何为 WAI-ARIA?

关于WAI-ARIA (Web Accessibility Initiative's Accessible Rich Internet Applications 也就是:Web 无障碍倡议-无障碍富互联网应用) 具体可以看我翻译的:WAI-ARIA basics。

WAI-ARIA 核心内容有哪些?

1.Signpost and Landmark (路牌与地标)

WAI-ARIA 给浏览器增加了 role 属性,这允许我们给站点中的元素增加我们想要的语义属性。 ARIA 的 角色 属性值可以作为地标(Landmark) 来复制 HTML5 元素的语义化(例如 nav tag)。甚至超越HTML5 的语义,给不同的功能块提供路标(Signpost),例如 search, tabgroup, tab, listbox 等等。

用法举例:

如何用role

打开地址: mdn.github.io/learning-ar…

然后使用VoiceOver 绑定键(你可以在VoiceOver Utility 中设置) + U 访问,然后使用光标或者键盘来选择菜单选项。由于是结构化的内容,你通过键盘上下就能听到对应的标题内容来跳转需要的内容。 你就能看到:

每一块都很分明,做的不好的,Landmarks 直接没有,或者一个页面一个banner 三个 navigation。

2.aria-label
<input type="search" name="q" placeholder="Search query" aria-label="Search through site content">
复制代码

这样当你聚焦的时候就会VoiceOver 会念出'Search through site content'。

3.aria-labelby
<input type="search" name="q" placeholder="Search query" aria-labelby="searchLabel">
<span id='searchLabel'>Search through site content</span>
复制代码

2.动态内容更新

内容动态更新是对于无障碍是一个很麻烦的事情,因为早年的网站并没有这个困扰,所以 WAI-ARIA 增加一个新的概念:实时区域(live region)。用属性aria-live便可以触发实时区域(role="alert" 也可以),它有四个值:

  • off: 默认值,更新不会提醒。
  • polite: 只有用户空闲的情况下提醒。
  • assertive: 尽快提醒。
  • rude: 会以打断用户操作的方式直接提醒。

通常来说 assertive 设置足以让你的更新在显示时按时序读出,因此,如果改变多次,那么屏幕阅读器也只会念出最后一个改变。

那么就会有一个问题,如果不断增加子元素,那就会不断的出现提示,增加的子元素的内容。

通过添加 aria-atomic="true" 属性告诉屏幕阅读器去读取整个元素的内容作为一个整体来判断是否提示已修改, 而不是里头某个子元素增加删除了。例子如下:

<section aria-live="assertive" aria-atomic="true">
复制代码

以上内容大略的说说了几个重点,至于具体全面的 aria-* 属性/状态, 请看 Definitions of States and Properties (all aria-* attributes) ,关于角色,请看Definition of Roles

3.优化键盘的无障碍操作

Tab 和确认键是HTML 默认实现的无障碍操作,通过对tabindex 的合理使用(并不是到处乱用),可以让webpage 的操作体验变得更好,另一方面组合aria-setsize 和 aria-posinset 能最大化给屏幕阅读器提供信息。 tabindex 文档

4.非语义控件的可访问性

这是现代复杂 Web 应用的最大问题,为了实现复杂需求会大量使用非语义元素来实现一个控件,对于屏幕阅读器而言是灾难,对于使用者而言页面等于不可用。

  1. 首先还是离不开角色,如果你想用 a 标签做一个 button。可以,加上role="button" 即可。
  2. 熟悉表单验证用的常规状态属性aria-required/aria-disabled/aria-selected 等属性。
  3. 另外理解刚刚说过的aria-setsize 和 aria-posinset 能最大化给屏幕阅读器提供信息。
  4. aria-hidden="true" 对屏幕阅读器进行一定程度的隐藏。

If You Can't Measure It, You Can't Improve It

彼得•德鲁克(Peter F. Drucker)说过这么一句话,那么我们介绍两款相关的软件用来测量网站对于无障碍的实现程度。

The A11y Machine

npm install -g the-a11y-machinea11ym --standards WCAG2AA,HTML https://developer.mozilla.org/
复制代码

然后打开当前目录下的 ./a11ym_output/index.html ,你可以看到它对于整体的分析结果。然后note codes 指向的会是每一个Web内容无障碍指南(WCAG)的每一个实现细则,你可以就像完成一个个代码风格错误一样逐个根据情况修复它。

Accessibility Developer Tools

这是一款由谷歌可访问性团队开发的谷歌 Chrome Extension。 然后操作如图:

顺带一说,Google 的Audits 功能是基于 Lighthouse 的,关于它可以再写一整篇文章,按下不表。

然后得到的结果会是这样的:

他的评价体系比起a11ym 不可不谓温和。但是根据它给出的信息,我们还是可以进行对应的优化。

比起发达国家,国内的互联网技术的发展日新月异,但是从大部分的主流网站可以看得出,除开大厂,大家对于无障碍的支持是不够的。但我觉得这仅仅是出于不了解,如果不得而知,那么就无从做起,所以我们更多地提及无障碍技术,推广它,便能让中文互联网世界的无障碍更进一步。

所以像Leonie Watson 说的:

It doesn't have to be perfect, Just a little bit better that yesterday.

推荐阅读:

  • Web内容无障碍指南 (WCAG) 2.0
  • Web 无障碍倡议-无障碍富互联网应用 基础

博客原文

说说Web 无障碍设计相关推荐

  1. 第三章:前端开发学习·第一篇:自主学习-无障碍设计

    无障碍设计 无障碍设计是指产品, 设备, 服务, 或者环境是为残疾人设计的. 无障碍设计的概念意味着与一个人的辅助技术(例如, 电脑屏幕阅读器)相兼容, 确保直接访问(即独立)和"间接访问& ...

  2. 本周总结:为图片标签<img>加上 alt属性的好处

    本周培训了一个开发规范的会议:在开发网页的时候,为图片标签加上 alt属性的好处, 示例: <img src="apple.jpg" alt="苹果"&g ...

  3. Accessibility Verification Test--无障碍测试简介

    参考标准:https://www.w3.org/standards/webdesign/accessibility WCAG2.0: https://www.w3.org/WAI/WCAG20/qui ...

  4. 如何对web系统开展无障碍测试

    Accessibility test(无障碍测试)是一种测试方法,旨在评估软件.网站或其他数字产品的可访问性,以确保它们能够被身体残障或其他特殊需求的用户使用.这些测试通常包括使用辅助技术,如屏幕阅读 ...

  5. 不要仅为85%的用户设计:关注无障碍设计

    ​点击关注 异步图书,置顶公众号 每天与你分享 IT好书 技术干货 职场知识​ ​作为设计师,我们更倾向于设计是以解决问题为基础的.尽管我们会因为博物馆没有规划轮椅坡道而毫不犹豫地抗议,但是对界面上的 ...

  6. Web用户体验设计提升实践

    本文首发于微信公众号"Shopee技术团队". 前言 本文是基于 Shopee 供应链团队内部 WMS(Warehouse Management System,仓库管理系统) 项目 ...

  7. Web 用户体验设计提升指南

    转载自:https://juejin.cn/post/6932647134944886797 前端优秀实践不完全指南 一个 Web 页面,一个 APP,想让别人用的爽,也就是所谓的良好的用户体验,我觉 ...

  8. 在k8s中使用gradle构建java web项目镜像Dockerfile

    在k8s中使用gradle构建java web项目镜像Dockerfile FROM gradle:6-jdk8 AS build COPY --chown=gradle:gradle . /home ...

  9. 手动将web项目的class文件打成jar包,手动打jar包,java -cvf,IDE打包底层指令

    手动将web项目的class文件打成jar包. 我们的项目在使用IDE进行编译后,在项目的target目录下将会生成class文件.我们可以将class文件打成jar包. 使用的到命令为: 在targ ...

最新文章

  1. Android 6.0 以及HttpClient
  2. 上海两年java_两年Java工程师应该掌握的知识点
  3. codevs1688 求逆序对(权值线段树)
  4. java网络编程(一)
  5. hdu 5213(容斥原理+莫队算法)
  6. 【渝粤题库】陕西师范大学210022 学前儿童语言教育 作业(专升本)
  7. 阿里仿真灰度变更测试简介
  8. 【AI】统计学和机器学习到底有什么区别?
  9. 很好用的软件 RouterPassView
  10. OpenCV案例(四): 投射矫正
  11. 大学课程表模板html,课程表模板空白表格(小/中/大学课程表模板excel) 中文免费版...
  12. OpenJudge超详细题解,动画图文题解
  13. FireWorks-程序员的做图工具
  14. [BFS]愿天下有情人都是失散多年的兄妹
  15. Vivo 监控系统演进之路
  16. 《Struts2 In Action》摘录
  17. LabVIEW崩溃后如何排查故障
  18. 2019北航计科保研夏令营(非优营)
  19. 省时省力的PDF编辑技巧,不会实在可惜
  20. Java小农养成记第二十一天

热门文章

  1. qt 获得系统输入法列表_2020法考主观题机考模拟系统入口(正式开通)!
  2. 解决APK下载到Cache目录安装提示“解析安装包失败”的问题
  3. HTML入门必看-含源码案例(表格-列表-表单-图片-视频-音频)
  4. 历史天气信息数据爬取
  5. jsp中显示日期格式设置
  6. element-ui动态组件方式实现el-table行内编辑(el-select)
  7. Spring异常处理 ExceptionHandler的使用
  8. 「VUE架构」VUE2.0 图片上传功能(移动端)
  9. 高德地图按行政区划分填充色块
  10. 短视频配音用什么软件?推荐几款可以用自己视频配音的app