无障碍性

PrimeVue 符合 WCAG 2.1 AA 级标准,有关详细信息,请参阅每个组件的无障碍性文档。

根据世界卫生组织的数据,全球 15% 的人口在一定程度上存在残疾。因此,在任何情况下,诸如为轮椅使用者提供的斜坡或带有字幕的多媒体之类的无障碍功能对于确保任何人都能获取内容至关重要。

残疾类型多种多样,因此您需要充分了解您的受众以及他们如何与创建的内容进行交互。主要有四类;

视力障碍

失明、低视力或色盲是常见的视力障碍。屏幕放大镜和色盲模式通常是浏览器的内置功能,而对于依赖屏幕阅读器的人来说,页面开发者需要确保内容可被阅读器读取。常用的阅读器有 NVDA JAWS ChromeVox

听力障碍

聋哑或听力损失是指完全或部分丧失听力。听力障碍者会使用辅助设备,但在与网页交互时,这些设备可能不足以解决问题。常见的解决方案是为包含音频的内容提供文本替代方案、文字记录和字幕。

行动不便

行动不便者是指由于肢体缺失、瘫痪或其他各种原因导致运动障碍的人。辅助技术,例如头部指针,是一种与屏幕交互的设备,而键盘或触控板仍然是无法使用鼠标的人的解决方案。

认知障碍

认知障碍的范围很广,包括学习障碍、抑郁症和阅读障碍者。精心设计的内容也会为没有残疾的人带来更好的用户体验,因此为认知障碍者设计实际上也意味着为任何用户设计得更好。

借助辅助技术的正确页面结构是无障碍网页内容的核心要素。HTML 基于无障碍的基础,表单控件默认情况下可以使用键盘进行操作,语义 HTML 更容易被屏幕阅读器处理。

WCAG 指的是 **网页内容无障碍指南**,这是由 W3C(万维网联盟)的 WAI(网页无障碍倡议)管理的标准。WCAG 包含关于如何使网页内容更易访问的建议。PrimeVue 组件旨在在不久的将来达到 WCAG 标准的高水平兼容性。

全球各个国家/地区都制定了关于网页无障碍性的政府政策。其中最著名的有美国的 第 508 条款 和欧盟的 网页无障碍指令

应优先使用原生表单元素,而不是用于其他目的(例如演示)的元素。例如,下面的按钮由浏览器呈现为表单控件,可以通过 Tab 键获得焦点,也可以使用空格键触发。


<button @click="onButtonClick(event)">Click</button>
        

另一方面,使用 div 的精美 CSS 按钮不具备键盘或屏幕阅读器支持。


<div class="fancy-button" @click="onButtonClick(event)">Click</div>

除了使用键盘事件来恢复键盘支持外,还需要 tabindex 来使 div 元素可访问。为了避免过载和实现浏览器已经提供的功能,应优先使用原生表单控件。


<div class="fancy-button" @click="onClick(event)" @keydown="onKeyDown(event)" tabindex="0">Click</div>

表单组件必须与另一个元素相关联,该元素描述了表单元素的用途。这通常使用 label 元素实现。


<label for="myinput">Username:</label>
<input id="myinput" type="text" name="username" />

HTML 提供了各种元素来组织网页上的内容,这些元素是屏幕阅读器所了解的。优先使用语义 HTML 以获得良好的语义,可为阅读器提供开箱即用的支持,而这在使用带有类别的普通 div 元素时是不可能的。请考虑以下对阅读器来说意义不大的示例。


<div class="header">
    <div class="header-text">Header</div>
</div>

<div class="nav"></div>

<div class="main">
    <div class="content">
    </div>

    <div class="sidebar">
    </div>
</div>

<div class="footer">
</div>

可以使用内置屏幕阅读器支持的语义元素实现相同的布局。


<header>
    <h1>Header</h1>
</header>

<nav></nav>

<main>
    <article></article>

    <aside></aside>
</main>

<footer>
</footer>

ARIA 指的是“无障碍富互联网应用”,是一套用于弥补语义 HTML 不足的工具集。这些情况主要与富 UI 组件/小部件有关。尽管浏览器对富 UI 组件(例如日期选择器或颜色选择器)的支持在过去几年中有所改进,但许多 Web 开发人员仍然使用从标准 HTML 元素派生的 UI 组件,这些组件是由他们自己创建的,或者是由其他项目(如 PrimeVue)创建的。这些类型的组件必须提供键盘和屏幕阅读器支持,后者是 WAI-ARIA 所用的地方。

ARIA 包含角色、属性和特性。**角色** 定义元素的主要用途,例如 checkboxdialogtablist,而 **状态** 和 **属性** 定义元素的元数据,例如 aria-checkedaria-disabled

请考虑以下原生复选框的示例。它具有内置的键盘和屏幕阅读器支持。


<input type="checkbox" value="Prime" name="ui" checked>

具有 CSS 动画的精美复选框可能看起来更吸引人,但可能缺乏无障碍功能。下面的复选框可能会显示一个带有动画的选中字体图标,但它不可 Tab 键操作,无法使用空格键选中,也无法被阅读器读取。


<div class="fancy-checkbox">
    <i class="checked-icon" v-if="checked"></i>
</div>

一种替代方案是使用 ARIA 角色供阅读器使用,并使用 JavaScript 为键盘提供支持。请注意 aria-labelledby 的使用,它替换了带有 for 的 label 标签。


<span id="chk-label">Remember Me</span>
<div class="fancy-checkbox" role="checkbox" aria-checked="false" tabindex="0" aria-labelledby="chk-label"
    @click="toggle" @keydown="onKeyDown(event)">
    <i class="checked-icon" v-if="checked"></i>
</div>

但是,最佳做法是结合语义 HTML 来实现无障碍性,同时保留 UX 的设计。此方法涉及隐藏一个原生复选框以实现无障碍性,并使用 JavaScript 事件来更新其状态。请注意 p-hidden-accessible 的使用,它会将元素隐藏在用户面前,但不会隐藏在屏幕阅读器面前。


<label for="chkbox">Remember Me</label>
<div class="fancy-checkbox" @click="toggle">
    <input class="p-hidden-accessible" type="checkbox" id="chkbox" @focus="updateParentVisuals" @blur="updateParentVisuals"
        @keydown="onKeyDown(event)">
    <i class="checked-icon" v-if="checked"></i>
</div>

一个工作示例是 PrimeVue 复选框,它可 Tab 键操作、键盘可访问且符合屏幕阅读器标准。它不依赖 ARIA 角色,而是依赖隐藏的原生复选框。

网页上的颜色应以至少 **4.5:1** 的对比度为目标,并考虑选择不会引起闪烁的颜色。

良好对比度

背景和前景色内容之间的颜色对比度应足够高,以确保可读性。下面的示例显示了具有良好和不良示例的两种情况。

良好
糟糕

闪烁

颜色闪烁会导致运动错觉,因为选择了彼此可见度低的颜色组合。需要谨慎选择颜色组合,以避免闪烁。

闪烁

暗模式

在深色设计方案中使用高饱和度颜色时应避免使用,因为它们会导致眼睛疲劳。相反,应优先使用不饱和颜色。

靛蓝 500
靛蓝 200