每日 30 秒 ⏱ HTML Cosplay

封面

简介

无障碍、WAI、ARIA、a11y、Accessibility、框架选择

如何向 视障用户 介绍兔子长什么样?有的同学可能会说:

  • 毛茸茸的长耳朵。
  • 短短圆圆的小尾巴。
  • 红红的眼睛。

那如何向 视障用户 介绍网页长什么样?有看过 语义化与无障碍树 的同学可能会说:

  • header 标签表示一个网页的页眉。
  • main 标签表示一个网页的内容。
  • footer 标签表示一个网页的页脚。

哎呦不错哦~ 那你给我表演一下怎么描述 导航 呢?

导航

现在

在 HTML5 语义化标签的加持下导航可以这样写:

<nav>
    <a href="home">主页</a>
    <a href="users">用户</a>
</nav>

不同用户理解:

  • 普通用户通过 显示效果 识别出是导航。
  • 程序员通过 nav 标签 识别出是导航。
  • 视障用户通过 屏幕阅读器 识别出是导航。

过去

这个时候有同学想过在 <nav> 标签还没有出现的时候,只靠 divspan 标签一把梭是时候怎么写的?

<div class="navigation">
    <a href="home">主页</a>
    <a href="users">用户</a>
</div>

不同用户理解:

  • 普通用户通过 显示效果 识别出是导航。
  • 程序员通过 class="navigation" 识别出是导航。
  • 视障用户通过 屏幕阅读器 识别出是两个链接。

这对于 视障用户 多么不友好,他们除了知道有两个链接并不能识别出是导航。

Cosplay

聪明的同学肯定想到了:

  • 是否可以指定一个规范?
  • 是否可以通过 cosplay 来把 div 标签 变成 nav 标签

妈耶你们也真的是太聪明啦!确实存在这一个规范叫做 Web Accessibility Initiative - Accessible Rich Internet Applications 缩写 WAI-ARIA,它的作用就和同学们想到的一样通过角色扮演来描述 html 使得 视力障碍 用户可以理解 html 所表达的含义。

使用 WAI-ARIA 来表单 nav 标签,屏幕阅读器便会帮助视障用户识别出是导航 :

<div class="navigation" role="navigation">
    <a href="home">主页</a>
    <a href="users">用户</a>
</div>

好奇宝宝

好奇宝宝肯定会问:可是有的页面有 主导航副导航 甚至还有 面包屑导航奇奇怪怪不知道什么的导航 正常用户可以通过视觉秒理解是什么,那视障用户怎么办呢?

妈耶你们真的是有够聪明,居然能想到这么厉害的问题,不过没关系 WAI-ARIA 已经定义好了通过 aria-label 标签来描述是什么:

<div class="navigation"
    role="navigation"
    aria-label="主导航">
    <a href="home">主页</a>
    <a href="users">用户</a>
</div>
<div class="navigation"
    role="navigation"
    aria-label="奇奇怪怪不知道什么的导航">
    <a href="sister">小姐姐</a>
    <a href="brother">小哥哥</a>
</div>

WAI-ARIA

可能还是有同学不是很能理解 WAI-ARIA 是什么,简单来说 WAI-ARIA 便是视障用户的 UI

用户 兔子 页面
普通用户 看到兔子样子 看到页面效果
视障用户 知道兔子构成 知道页面构成

通过上面的导航例子也大概知道了 WAI-ARIA 的使用方法,但是 WAI-ARIA 并没有这么简单,它其实定义了一系列的属性和角色来帮助 视力障碍 用户理解页面,只不过导航的结构比较简单,如果像是复杂一点的 多项选择 除了要使用 WAI-ARIA 规定的标签,还有实现 WAI-ARIA 规定的 焦点键盘事件 等。

更多内容可以阅读 WAI-ARIA 这份文档算是详细描述了所有的规则,如果觉得复杂可以阅读 WAI-ARIA 实践,如果觉得英语看不来可以阅读 饿了么前端团队翻译的 WAI-ARIA 实践

题外话

关于学习

有的人很奇怪对事物的认识取决于第一次,比如小二先接触的 LOL 后面玩 DotA 对正反补兵很不适应。所以在小二看来应该在学习 HTML 的时候应该穿插部分 WAI-ARIA 内容,在学习部分 JavaScript 后应该穿插实现几个 WAI-ARIA 规定的角色,当然现在学习也不迟。

现实情况

如果大家有追更小二就会记得:

可能是因为某些原因导致的,但是通过阅读 饿了么前端团队翻译的 WAI-ARIA 实践 在每篇文章底部 Example 中重复出现 MaterialElement,小二个人能感受到的是翻译这篇文章和写相关代码同学对帮助 无障碍群体的热情。

社会挺现实的大家都忙忙碌碌加班赚钱有很多需要的事情要去做小二也不例外,无障碍可能是个遥远的话题。小二这几篇文章也只能是帮大家认识一下这个群体和给出相关的知识,本来还想讲一下 无障碍视觉设计 相关内容,但是 鱼头哥哥 最近分享了几篇相关文章都挺好的。

期望

  • 如果可以使用 heading 和 语义化、图片加上 alt 也挺好。
  • 如果还可以选择一个无障碍做得好的框架,比如二哲哥哥常说的 material ui
  • 如果挺可以选择阅读 material ui 源码和 WAI-ARIA
  • 最后希望鱼头哥哥的 无障碍世界 可以实现。

无障碍相关内容

一起成长

在困惑的城市里总少不了并肩同行的 伙伴 让我们一起成长。
  • 如果您想让更多人看到文章可以点个 点赞
  • 如果您想激励小二可以到 Github 给个 小星星
  • 如果您想与小二更多交流添加微信 m353839115

微信公众号

本文原稿来自 PushMeTop

小二の伤寒杂病论
记录开发路上所遇到的疑难杂症~

假如我年少有为

1.5k 声望
72 粉丝
0 条评论
推荐阅读
「多图预警」完美实现一个@功能
一天产品大大向 boss 汇报完研发成果和产品业绩产出,若有所思的走出来,劲直向我走过来,嘴角微微上扬。产品大大:boss 对我们的研发成果挺满意的,balabala...(内心 OS:不听,讲重点)产品大大:咱们的客服 I...

wuwhs40阅读 4.7k评论 5

封面图
安全地在前后端之间传输数据 - 「3」真的安全吗?
在「2」注册和登录示例中,我们通过非对称加密算法实现了浏览器和 Web 服务器之间的安全传输。看起来一切都很美好,但是危险就在哪里,有些人发现了,有些人嗅到了,更多人却浑然不知。就像是给门上了把好锁,还...

边城31阅读 7.2k评论 5

封面图
涨姿势了,有意思的气泡 Loading 效果
今日,群友提问,如何实现这么一个 Loading 效果:这个确实有点意思,但是这是 CSS 能够完成的?没错,这个效果中的核心气泡效果,其实借助 CSS 中的滤镜,能够比较轻松的实现,就是所需的元素可能多点。参考我们...

chokcoco20阅读 2.1k评论 2

在前端使用 JS 进行分类汇总
最近遇到一些同学在问 JS 中进行数据统计的问题。虽然数据统计一般会在数据库中进行,但是后端遇到需要使用程序来进行统计的情况也非常多。.NET 就为了对内存数据和数据库数据进行统一地数据处理,发明了 LINQ (L...

边城17阅读 1.9k

封面图
【已结束】SegmentFault 思否写作挑战赛!
SegmentFault 思否写作挑战赛 是思否社区新上线的系列社区活动在 2 月 8 日 正式面向社区所有用户开启;挑战赛中包含多个可供作者选择的热门技术方向,根据挑战难度分为多个等级,快来参与挑战,向更好的自己前进!

SegmentFault思否20阅读 5.6k评论 10

封面图
过滤/筛选树节点
又是树,是我跟树杠上了吗?—— 不,是树的问题太多了!🔗 相关文章推荐:使用递归遍历并转换树形数据(以 TypeScript 为例)从列表生成树 (JavaScript/TypeScript) 过滤和筛选是一个意思,都是 filter。对于列表来...

边城18阅读 7.7k评论 3

封面图
Vue2 导出excel
2020-07-15更新 excel导出安装 {代码...} src文件夹下新建一个libs文件夹,新建一个excel.js {代码...} vue页面中使用 {代码...} ===========================以下为早期的文章今天在开发的过程中需要做一个Vue的...

原谅我一生不羁放歌搞文艺14阅读 19.9k评论 9

假如我年少有为

1.5k 声望
72 粉丝
宣传栏