Web无障碍Web无障碍(WebAccessibility,取头尾各一个字母,总共有11个字母,因此简称*a11y*)

Web无障碍(WebAccessibility,取头尾各一个字母,总共有11个字母,因此简称a11y),也叫可访问性等。是指在Web开发无障碍性意味着使尽可能多的人能够使用Web站点,包括那些有视觉、听觉、运动和认知障碍的人。Web无障碍的目的是促进公平、包容和可持续的数字社会发展,让尽可能多的人都能够充分地参与到数字经济和社交生活中。

通过实现Web无障碍,不仅可以提高网站的可用性和用户体验,也能够促进社会的包容性和公正性,让更多人都能够享受数字经济和社交生活带来的便利和快乐。无障碍的实现不只是为了服务残疾人,而是为每个人提供更好的用户体验,并促进商业和社会应用程序的包容性和可持续性。

根据世界卫生组织2022年发布的最新数据,全球不同类型残疾的人数估计如下:

另外截止到2020年,我们国家中国残疾人总人数为8592.8万人,60岁以上老年人口约为2.68亿人,占全国总人口比例为19.14%。注意这些数据估计只是近似值,可能不完全准确,可能存在一个人患有多种障碍疾病等其他情况。此外,世界不同区域在残疾统计报告的定义和方法上可能存在差异。

在实际开发中,由于不同的应用功能及使用场景等因素,我们不可能完全覆盖所有人群,尽自己最大的能力让尽可能多的人能够无障碍的使用自己的应用就好,因此在开发中,我们主要考虑以下几种残疾类型:

当然还需要考虑其它的残疾类型,根据自己的实际开发的应用程序的用途,了解哪些用户会使用到自己的应用,还要考虑用户的年龄、文化差异或意识形态差异而遇到困难等因素来创建更加包容的设计。

WCAG(Web内容无障碍性指南)2.0和2.1是由万维网联盟(W3C)发布的一系列规范,旨在确保Web内容对所有人都可访问,包括残疾人。能帮助Web开发者创建尽可能无障碍的内容,从而使得更多的人能够方便地使用Web。

WCAG2.0于2008年发布,共有12个准则,每个准则都有一些成功标准,以帮助开发者创建无障碍的Web内容。其中每个成功标准都有三个级别:A、AA和AAA,级别A为最基本的要求,级别AAA为最高的要求。建议网站和应用程序至少达到AA级别的无障碍要求。因为AA级别的要求已经包括了许多基本的无障碍功能,可以满足大多数用户的需求。但是,如果网站或应用程序的用户群体中有许多有特殊需求的人,例如视觉障碍者或听力障碍者,那么建议尽可能达到AAA级别的无障碍要求,以确保他们能够完全访问网站的内容。

WCAG2.1是WCAG2.0的扩展版本,于2018年发布。它新增了13个成功标准,其中包括一些针对移动设备、低视力用户和认知障碍用户的要求。这些新的成功标准可以帮助开发者进一步提高Web内容的无障碍性。

HTML5引入了对WAI-ARIA的官方支持,并提供了新的语义元素和属性来支持无障碍访问。WAI-ARIA(WebAccessibilityInitiative–AccessibleRichInternetApplications)是一项由国际标准化组织(ISO)和W3C共同制定的技术规范,旨在提高Web应用程序的无障碍访问能力。它定义了一组属性和角色,这些属性和角色可以在HTML、SVG和其他Web技术中使用,以帮助屏幕阅读器和其他辅助技术理解Web内容的结构、功能和交互。对于通过动态内容或用户界面控件改变而不是在页面加载时进行完全渲染的应用程序尤其有用。

其中,WAI-ARIA的核心之一是ARIA(AccessibleRichInternetApplications)。它是一种Web技术,允许Web开发人员向HTML元素添加额外的语义信息,以便于使残障用户能够更好地使用Web应用程序。还为Web开发人员提供了一种简单的方式来改善Web应用程序的可访问性。

注意:

WAI-ARIA规范的主要内容有:

注意:使用role属性并不意味着我们可以忽略HTML的基本结构和语义。仅应该在需要进行语义增强的情况下使用,而不是将其作为一种浏览器样式的替代方法。

不同的角色之间,可能会存在超类或子类的关系,如果你熟悉JavaScript的类就很好理解了。WAI-ARIA规范中定义了近100个不同的角色,这些角色可以被分为以下几种类别(角色具有的必需、支持、继承和禁止的状态/属性请看后文状态与属性部分)。

抽象角色表示为网页语义而设计的一组无形的角色,描述了用户界面中的结构和行为。

注意:抽象角色只是用来构建具体角色的概念模型,它们缺乏明确的语义含义,可能会导致混淆和错误的解释,因此不能被直接用于描述Web内容。

部件角色代表用户界面中的交互性控件或部件。例如,按钮、滑块、文本框、下拉菜单等。

文档结构角色是一组用于描述网页结构,通常不是交互式的。

在WAI-ARIA1.2规范中directory角色已被弃用。

关于generic角色:

当一个元素不属于已有的角色类型(例如button、checkbox等),同时又需要支持一些基本的交互行为(例如聚焦、禁用等),则可以将其设置为generic角色。

由于generic角色缺乏特定的语义,因此在使用时需要结合其他属性和标签来提供更准确的信息。

标志性角色用作导航地标的页面区域,所有这些角色都继承自landmark基类型

实时区域角色描述如何将Web应用程序中动态变化的内容与屏幕阅读器进行交互,使得这些内容能够被盲人和视力受限用户等人士正确地感知。

窗口角色角色充当浏览器或应用程序中的窗口。

WAI-ARIA提供了一组辅助功能状态/属性,用于支持各种操作系统平台上的平台辅助功能API。属性是控件或组件的持久化特征或配置选项。通常在创建控件或组件时设置,并且在其整个生命周期内保持不变,对应于控件或组件的默认状态;状态是指控件或组件当前所处的状态。两者都提供了关于对象的特定信息,并且都构成了角色性质定义的一部分。在HTML中两者均以aria-开头,作为HTML的全局属性使用。

注意:状态/属性也存在继承。

属性和状态的值均可以是以下几种类型:

注意:这些是状态/属性的通用类型,但不定义特定的表示。

在WAI-ARIA1.2规范中,状态/属性有40多个,分为下文6类。

注意:规范中有一类Drag-and-DropAttributes,但是在WAI-ARIA1.1规范中该类的两个状态/属性就已经被弃用了,因此本文不过多赘述。

有些状态/属性会出现在多个分类的情况,在本文中重复的状态/属性将提出放在一个表格中,如果分类A中的全部状态/属性也都属于其他分类,则会在分类A中说明。

另外各分类名称的缩写是我定义的,方便在重复的状态/属性表中查阅(有水文的成分)。

可翻译状态/属性在页面本地化时应该进行翻译。

WAI-ARIA1.2规范:

重复状态/属性:

有些状态/属性适用于所有宿主语言元素,而不管是否应用了角色。除非另有禁止,否则所有角色和所有基本标记元素都支持以下全局状态/属性。如果角色禁止使用任何全局状态或属性,那么这些状态或属性将在定义角色的部分中包含的特征表中被列为禁止的。

包含GUI系统或富internet应用程序中常见用户界面元素的特定属性,用于支持WidgetRoles。

如果将aria-autocomplete设置为list或both,必须确保同时满足以下两个条件:

aria-disabled、aria-haspopup和aria-invalid在WAI-ARIA1.2规范中不再属于GSAP。

虽然目前在columnheader、rowheader和row上支持aria-disabled,但官方计划禁止在具有这三种角色的元素上使用aria-disabled,除非它们处于网格或树网格的上下文中。

在使用aria-valuemax要保证值大于等于aria-valuemin的值;反过来aria-valuemin的值不能大于aria-valuemax的值。

如果当前值是未知的(例如一个不确定的进度条),则不应该设置aria-valuenow属性。如果aria-valuenow属性不存在,则不暗示有关当前值的任何信息。

包含特定于富Internet应用程序中实时区域的属性。这些属性可以应用于任何元素。这些属性的目的是指示内容更改可能会在没有元素具有焦点的情况下发生,并为辅助技术提供有关如何处理这些内容更新的信息。

注意:这部分状态/属性也均属于GSAP。适用于所有角色,并且没有继承到其他角色当中。

包含指示元素之间的关系或关联的属性,这些关系或关联无法从文档结构中轻松确定。

当在具有DOM焦点的元素上设置aria-activedescendant的值时,作者必须确保满足以下两组条件之一:

对于aria-colindex:作者必须将aria-colindex的值设置为大于或等于1、大于同一行中任何先前元素的aria-colindex值以及小于或等于整个表中的列数的整数。对于跨多个列的单元格或网格单元格,作者必须将aria-colindex的值设置为跨度的开头。

一个角色可以有多个状态/属性提供特定信息,一个状态/属性也可以适用于多个角色。以角色为主,与状态/属性会有以下几种关系:

注意:不是所有角色都会与状态/属性存在这四种关系,有些角色可能没有必需状态/属性。

WCAG和WAI-ARIA都是为改善Web内容的无障碍性而设立的标准和规范。但它们有几点不同:

另外WAI-ARIA补充了WCAG的内容,它们可以一起使用来实现更好的无障碍性。可以在元素上使用WAI-ARIA来增加交互式组件的无障碍性,并遵循WCAG的标准来确保页面的整体可访问性。

目前在一些设计社区中有很多大佬写了各种设计指南,对各种细节,包括字体样式、行高、滚动条、颜色对比度等等很多方面都有详细的建议和说明,大家也看得不少了,我就不过多赘述了。可以参考:

。。。

虽然这些指南不是标准规范,但是也能很大程度地提高Web应用的无障碍访问和应用美感。要注意,这些指南适用于各种Web应用,不只是CSS方面,只是对于我们前端开发人员来说,最主要直接方便能对这些指南细节进行设置和调整的莫过于CSS了。

另外,还可以利用Javascript内置的API来实现各种无障碍功能,这点下文有说明。除此之外,还有其他JavaScript无障碍问题,比如尽可能让所有交互元素都可以用键盘进行访问以执行某些复杂的功能,而不仅限于鼠标等等。

以在安卓和Windows环境下使用屏幕阅读器为例,先看一个简单的:

再来看一个复杂点的:

在元素上使用role和aria-*等属性只是为了帮助开发人员提供更好的无障碍信息,并不会改变元素的本质,他们的样式以及在JavaScript中访问元素的方式都是不变的,这些与辅助技术无关。

对于一些文本(比如阿拉伯数字),一些屏幕阅读器会以网页的lang属性为主,读出相应的语言表示,而不是本地端系统的语言。

一些流行的TTS引擎有GoogleCloudText-to-Speech、MicrosoftAzureText-to-Speech、讯飞语音引擎...更多可以自己在网上搜索。

虽然在上面的中屏幕阅读器读出了我们想要的内容,但是不代表着这样就成功了,比如在上面的第一个,用Lighthouse测试时,无障碍部分只有96分,扣的4分在于ARIAprogressbarelementsdonothaveaccessiblenames,表示元素没有可访问名称。需要使用aria-label/aria-labelledby属性提供可访问名称。没有设置aria-label/aria-labelledby属性,可能会导致使用屏幕阅读器等辅助技术的用户无法理解它的用途。

另外Lighthouse也有浏览器插件版和工具包版。

Axe-core是网站和其他基于HTML的用户界面的无障碍测试引擎。支持多种平台和环境并且可以与测试框架结合使用。

使用方式(以上面第一个为例):

安装:npminstallaxe-core--save-dev

另外,在Vscode有Axe-core官方推荐的插件:axeAccessibilityLinter,当打开HTML或JavaScript等文件时,插件会自动运行Axe代码分析器来检测是否存在可访问性问题。如果检测到问题,就会在代码下方显示红色波浪线。

所以在测试的时候要考虑全面,设身处地将自己带入到各种人群中,思考他们会怎么使用你写的应用程序。

无障碍功能树(AccessibilityTree)是一个虚拟的树形结构,是一种将Web内容和应用程序中的无障碍功能组织和描述的方法。反映了Web页面中的无障碍信息,并且可以被辅助技术使用。无障碍功能树通常由浏览器自动生成,与DOM树类似,但DOM树只反映了文档的结构和内容;而无障碍功能树还包含许多其他属性,例如元素的角色、状态、名称和值等。

这部分主要介绍两个与屏幕阅读器有点类似的API。但要强调一下与我们平时的方式方法没什么不同,我们可以使用常见的方式方法结合WCAG和WAI-ARIA规范实现无障碍访问,比如一样可以用setAttribute()方法设置role和aria-*属性。只不过学习了Web无障碍了之后,要考虑的东西可能会变得比平时更多。

注意:在使用这些API时要考虑兼容性!

WebSpeechAPI能够将语音数据合并到Web应用程序中。包含两个组件:SpeechRecognition(语音识别,即语音→文本)和SpeechSynthesis(语音合成,即文本→语音)。

AudioAPI(音频API)各位读者应该很熟了,它是一组用于处理音频的JavaScript接口。允许开发人员创建和控制音频流,包括音频的生成、处理和播放。

AudioAPI也能做到类似屏幕阅读器的功能,比如在用户鼠标悬停、键盘聚焦、移动端触摸等等时机创建一个Audio实例,并将准备好的音频赋值给实例的src属性,接着播放即可。这种也是某个政府网站的屏幕朗读的实现方式的一部分,不过我忘记是哪个网站了。

作为一名程序员,Web无障碍是一个非常重要的话题,学习Web无障碍也是一个非常有意义的过程。它可以帮助我们建立一个更加包容和平等的互联网。通过实现Web无障碍,我们可以让更多的人都能够享受到互联网带来的便利和乐趣,无论他们是否有不同的障碍。同时,这也是一个让我们更好地理解和尊重不同人群需求的机会。

THE END
1.一文了解常用手动工具手动工具的类型 1、钳类 无论手头有什么任务,您都需要使用的基本工具之一。钳子是类似于剪刀的工具,用于固定很难用裸手操作的物体。可以用于夹持、固定加工工件或者扭转、弯曲、剪断金属丝线的手工工具。钳子的外形呈V形,通常包括手柄、钳腮和钳嘴三个部分。 https://www.taogongscm.com/p-226.html
2.折刀式多用途手持器具的制作方法本发明的目的是提供一种折刀式多用途手持器具,使得可以安放一些如果完全以折刀形式制作迄今一直是极为困难的工具。“工具”一词在此应当在广义上予以理解,并意欲概括一切用作工作或消闲目的的辅助装置的、可以设想出来的器具或用具。 比如,为了从事办公和展示工作,要使用大量不同的器具、装置和手工工具,诸如钉书器具、...https://www.xjishu.com/zhuanli/05/96197178.html
1.全面解析:电工工具的分类与选择指南烨龙五金电工工具的主要分类 根据功能和用途的不同,电工工具可以分为几个主要类别: 1. 手动工具 手动工具是电工日常工作中最常用的工具,主要包括以下几种: 螺丝刀:用于拧紧或松开螺丝,常见于面板和设备的安装。 钳子:分为尖嘴钳、斜口钳、组合钳等,用于夹持和切割电缆及其他材料。 http://www.dgdonghua.net/ddgj/116754.html
2.木工好帮手之常用锯切工具盘点工具资讯木工工具,是指木工在平常的工作中所需要用到的一些基本的工具。分为电动工具和手动工具,如泛音万应宝、手电钻、修光刀、刨刀等。电动工具从功能分可分为多功能工具和单功能工具(如电刨、曲线锯、电圆锯、砂磨机);气动工具有磨光机和打钉机;手动工具可分为量具、手工锯、木工刨、木锉刀、手工凿和电锯。那么今天...http://www.njlives.cn/news/show-51974.html
3.手动工具大全手动工具的分类有哪些手动工具使用知识大全→...手动工具分为螺丝刀、 扳手、锤子、卷尺、壁纸刀、电工刀、钢锯等等。下面小编就为大家详细介绍手动工具的种类及其使用知识大全。 手动工具的分类有哪些 手动工具根据用途可分为扳手类,钳子类,螺丝刀类,卷尺类,锤子类,套筒类,切削类,剪刀类,组套类,以及辅助类如工具车等,每种类别均有不同的型号。https://m.maigoo.com/goomai/85218.html
4.福州市长乐区长限生态补水泵站工程设备及安装采购项目附件9.2投标人应对同一个采购包内的所有内容进行完整投标,否则投标无效。 9.3投标人代表只能接受一个投标人的授权参加投标,否则投标无效。 9.4单位负责人为同一人或存在直接控股、管理关系的不同供应商,不得同时参加同一合同项下的投标,否则投标无效。 9.5为本项目提供整体设计、规范编制或项目管理、监理、检测等服务的供...http://zfcg.fuzhou.gov.cn/upload/document/20220704/3d3e292a86194601bf18f0db30b6d9f6.html
5.扳手的优缺点种类及作用可以上飞机吗摘要:扳手是常见的一种安装与拆卸工具,无论是居家还是工地,经常会有需要用到的时候。它使用简单,价格也低,但是劳动强度大。近几年也开始流行电动扳手,电动扳手相比手动扳手用途更广泛,调节灵活,也没那么费力,但是价格要高出不少。总的来说,扳手类型很多,不同的扳手的种类用途都不一样,你能分得清楚吗?扳手如何挑...https://www.cnpp.cn/focus/3632.html
6.Java代码在线去掉所有注释的博客指南在日常编程中,我们经常需要处理大量的Java代码,有时会需要去掉所有的注释,以便于代码的分析或其他用途。本文将介绍如何在线去掉Java代码中的所有注释,并提供相关工具和代码示例。 目录 为什么要去掉注释 常见的注释类型 去掉注释的在线工具 手动去掉注释的Java代码示例 ...https://blog.51cto.com/u_15763679/11248791
7.[金工实习报告]金工实习基本方法,车工/焊接/钳工/铣工/铸造/安全生产...四爪卡盘也是通过锥面定位,依靠间传递扭矩,用螺母锁紧安装到车床主轴上的。四爪卡盘与三爪卡盘不同的地方在于,它不需要正反两套卡爪。四爪卡盘的卡爪即可用作正爪可也用作反爪。其中,反爪用来安装尺寸较大的工件。 四爪卡盘用于装夹工件时,为使工件上加工表面的轴线与车床主轴一致,必须人为进行矫正。可用划线盘...https://blog.csdn.net/weixin_45817309/article/details/118913625
8.科学使用工具教案(通用10篇)科学概念:认识机械指的是利用力学原理组成的各种装置。杠杆、滑轮、斜面等都是机械。简单机械又被人们习惯地称为工具。 过程与方法:常识在实践中解决指定的科学问题(如拔图钉、铁钉和木螺钉),发现做同样的事情,用不同的工具效果是不同的,并从中了解更多的常用工具。 https://www.360wenmi.com/f/filei73ja4ga.html
9....MASTER型号MASTER价格hoffmann工具,emuge量具MASTER工具也称手动工具,其相对于电动工具而言。主要是借助于手来拧动或施力于工具。手动工具根据用途可分为扳手类,钳子类,螺丝刀类,卷尺类,锤子类,套筒类,切削类,剪刀类,组套类,以及辅助类如工具车等,每种类别均有不同的型号。扳手有开口扳手(呆板手),双梅花扳手,棘轮扳手(快速扳手),两用扳手(复合扳手),油管...http://www.wdutech.com/product/4495749/
10.建筑五金实用手册20230912.docx(1)使用场合和安全需求:不同的使用场合和安全需求需要选择不同类型的把手。 (2)耐久性和可靠性:把手需要经常使用,需要选择耐久性和可靠性较好的产品。 (3)易于安装和维护:把手需要易于安装和维护,方便使用者进行操作。2、卫生设备配件建筑五金实用手册是一本非常实用的工具书,旨在为读者提供有关建筑行业中使用的各...https://m.renrendoc.com/paper/291204855.html
11.木工机械的精准制造剖析woodworking机器人与传统工具的差异与应用传统工具与木工机械比较分析 与传统手动工具相比,woodworking机器提供了更强大的力量和更快的速度。然而,它们也需要较高昂的购买成本和维护费用。此外,不同类型的手动工具可能适用于特定的任务,而某些情况下,木工机械可能过于笨重或不够灵活。 安全性与操作方便性 ...https://www.l0dm1h3tk.cn/hua-hui-zi-xun/461673.html
12.渗透测试和漏洞赏金的必备工具包BurpSuiteProfessional2024.9...由于Web漏洞扫描程序有许多用途,因此它们往往以不同的方式打包。例如,PortSwigger同时生产Burp Suite Professional和Burp Suite Enterprise Edition。两者都包含Burp Web漏洞扫描程序,但是它们是非常不同的软件。 Burp Suite Professional是面向漏洞赏金猎人和渗透测试人员的高级工具包。Burp Suite企业版是适用于组织和开发团队...https://apphot.cc/72796.html
13.深圳军博会&推荐美军标MIL手动气动压接工具,JRready杰锐德...JRready杰锐德是浙江精锐仪器设备有限公司旗下品牌,是一家开发生产专业工具及设备的企业,服务于线束和连接器的生产制造,主要生产手动、气动四芯轴端子压接工具、连接器取送工具以及军用插孔收口机,插孔测力机,防水连接器气密性检测设备等,其产品主要应用于航天、航空、军事、新能源线束、高铁机车、航海、核电、石油勘探...https://www.shifair.com/wap/article_details/index/id/171345.html
14.工具Datawrapper:轻松实现地图可视化A.选择地图类型:在Datawrapper的创建图表页面,选择“Maps”(地图)选项,并从中选择“Locator Map”(定位器地图)。 B. 添加标记:在Locator Map的搜索字段中,输入国家、城市、地址、坐标或使用Google地图URL或导入GeoJSON,以添加标记。 C.设计地图:Locator Map提供四种不同类型的地图样式,包含“Light、Earth、Gray、Mar...https://m.wang1314.com/doc/webapp/topic/22291871.html
15.www.gzhxaq.com/mydata/law/202304/20/16819541750906.htm(3)可更换设备。可以改变机械功能的、可拆卸更换的、非备件或工具设备,这些设备可自备动力或 不具备动力。 机械安全是指在机械生命周期所有阶段,按规定的预定使用条件执行其功能的安全。 二、机械分类SZVpC 按照机械的使用用途,可以将机械大致分为10类。 http://www.gzhxaq.com/mydata/law/202304/20/16819541750906.htm
16.2020级五年制人才培养方案2020级五年制人才培养方案http://www.jxxdjsxy.com/jiaowuzaixian/zhuanyeshezhi/2022-06-19/8135.html