《Vue3实战教程》39:Vue3无障碍访问

如果您有疑问,请观看视频教程《Vue3实战教程》

无障碍访问​

Web 无障碍访问 (也称为 a11y) 是指创建可供任何人使用的网站的做法——无论是身患某种障碍、通过慢速的网络连接访问、使用老旧或损坏的硬件,还是仅处于某种不方便的环境。例如,在视频中添加字幕可以帮助失聪、有听力障碍或身处嘈杂环境而听不到手机的用户。同样地,确保文字样式没有处于太低的对比度,可以对低视力用户和在明亮的强光下使用手机的用户都有所帮助。

你是否已经准备开始却又无从下手?

请先阅读由万维网联盟 (W3C) 提供的 Web 无障碍访问的规划和管理。

你应该在每个页面的顶部添加一个直接指向主内容区域的链接,这样用户就可以跳过在多个网页上重复的内容。

通常这个链接会放在 App.vue 的顶部,这样它就会是所有页面上的第一个可聚焦元素:

template

<ul class="skip-links"><li><a href="#main" ref="skipLink" class="skip-link">Skip to main content</a></li>
</ul>

若想在非聚焦状态下隐藏该链接,可以添加以下样式:

css

.skip-link {white-space: nowrap;margin: 1em auto;top: 0;position: fixed;left: 50%;margin-left: -72px;opacity: 0;
}
.skip-link:focus {opacity: 1;background-color: white;padding: 0.5em;border: 1px solid black;
}

一旦用户改变路由,请将焦点放回到这个“跳过”链接。通过如下方式聚焦“跳过”链接的模板引用 (假设使用了 vue-router) 即可实现:

vue

<script setup>
import { ref, watch } from 'vue'
import { useRoute } from 'vue-router'const route = useRoute()
const skipLink = ref()watch(() => route.path,() => {skipLink.value.focus()}
)
</script>

阅读关于跳过链接到主要内容的文档

内容结构​

确保设计可以支持易于访问的实现是无障碍访问最重要的部分之一。设计不仅要考虑颜色对比度、字体选择、文本大小和语言,还要考虑应用中的内容是如何组织的。

标题​

用户可以通过标题在应用中进行导航。为应用的每个部分设置描述性标题,这可以让用户更容易地预测每个部分的内容。说到标题,有几个推荐的无障碍访问实践:

  • 按级别顺序嵌套标题:<h1> - <h6>
  • 不要在一个章节内跳跃标题的级别
  • 使用实际的标题标记,而不是通过对文本设置样式以提供视觉上的标题

有关标题的信息

template

<main role="main" aria-labelledby="main-title"><h1 id="main-title">Main title</h1><section aria-labelledby="section-title-1"><h2 id="section-title-1"> Section Title </h2><h3>Section Subtitle</h3><!-- 内容 --></section><section aria-labelledby="section-title-2"><h2 id="section-title-2"> Section Title </h2><h3>Section Subtitle</h3><!-- 内容 --><h3>Section Subtitle</h3><!-- 内容 --></section>
</main>

Landmarks​

Landmark 会为应用中的章节提供访问规划。依赖辅助技术的用户可以跳过内容直接导航到应用的每个部分。你可以使用 ARIA role 帮助你实现这个目标。

HTMLARIA Role地标的目的
headerrole="banner"主标题:页面的标题
navrole="navigation"适合用作文档或相关文档导航的链接集合
mainrole="main"文档的主体或中心内容
footerrole="contentinfo"关于父级文档的信息:脚注/版权/隐私声明链接
asiderole="complementary"用来支持主内容,同时其自身的内容是相对独立且有意义的
searchrole="search"该章节包含整个应用的搜索功能
formrole="form"表单相关元素的集合
sectionrole="region"相关的且用户可能会导航至此的内容。必须为该元素提供 label

有关标题的细节

语义化表单​

当创建一个表单,你可能使用到以下几个元素:<form><label><input><textarea> 和 <button>

标签通常放置在表格字段的顶部或左侧:

template

<form action="/dataCollectionLocation" method="post" autocomplete="on"><div v-for="item in formItems" :key="item.id" class="form-item"><label :for="item.id">{{ item.label }}: </label><input:type="item.type":id="item.id":name="item.id"v-model="item.value"/></div><button type="submit">Submit</button>
</form>

请注意这里我们是如何在表单元素中引入 autocomplete='on' 的,它将应用于表单中的所有 input 框。你也可以为每个 input 框都设置不同的 autocomplete attribute 的值。

标签​

提供标签来描述所有表单控件的用途;使 for 和 id 链接起来:

template

<label for="name">Name: </label>
<input type="text" name="name" id="name" v-model="name" />

如果你在 Chrome 开发者工具中检查这个元素,并打开 Elements 选项卡中的 Accessibility 选项卡,你将看到输入是如何从标签中获取其名称的:

Chrome 开发者工具正在通过标签展示无障碍访问的 input 框的名字

警告:

你可能还见过这样的包装 input 框的标签:

template

<label>Name:<input type="text" name="name" id="name" v-model="name" />
</label>

但我们仍建议你显式地为 input 元素设置 id 相匹配的标签,以更好地实现无障碍访问。

aria-label

你也可以为 input 框配置一个带有 aria-label 的无障碍访问名。

template

<label for="name">Name: </label>
<inputtype="text"name="name"id="name"v-model="name":aria-label="nameLabel"
/>

在 Chrome DevTools 中审查此元素,查看无障碍名称是如何更改的:

Chrome 开发者工具正在通过 aria-label 展示无障碍访问的 input 框名字

aria-labelledby

使用 aria-labelledby 类似于 aria-label,除非标签文本在屏幕上可见。它通过 id 与其他元素配对,你可以链接多个 id

template

<formclass="demo"action="/dataCollectionLocation"method="post"autocomplete="on"
><h1 id="billing">Billing</h1><div class="form-item"><label for="name">Name: </label><inputtype="text"name="name"id="name"v-model="name"aria-labelledby="billing name"/></div><button type="submit">Submit</button>
</form>

Chrome 开发者工具通过 aria-labelledby 展示 input 的无障碍访问名称

aria-describedby

aria-describedby 的用法与 aria-labelledby 相同,它提供了一条用户可能需要的附加描述信息。这可用于描述任何输入的标准:

template

<formclass="demo"action="/dataCollectionLocation"method="post"autocomplete="on"
><h1 id="billing">Billing</h1><div class="form-item"><label for="name">Full Name: </label><inputtype="text"name="name"id="name"v-model="name"aria-labelledby="billing name"aria-describedby="nameDescription"/><p id="nameDescription">Please provide first and last name.</p></div><button type="submit">Submit</button>
</form>

你可以通过使用 Chrome 开发者工具来查看说明:

Chrome 开发者工具正在根据 aria-labelledby 和 aria-describedby 展示 input 的无障碍访问名和无障碍访问描述信息

占位符​

避免使用占位符,因为它们可能会使许多用户感到困惑。

占位符的缺陷之一是默认情况下它们不符合颜色对比度标准;应当修改其颜色,让它看起来像是预先填入 input 框中的数据一样。查看以下示例,可以看到满足颜色对比度条件的姓氏占位符看起来像预填充的数据:

可访问的占位文本

template

<formclass="demo"action="/dataCollectionLocation"method="post"autocomplete="on"
><div v-for="item in formItems" :key="item.id" class="form-item"><label :for="item.id">{{ item.label }}: </label><inputtype="text":id="item.id":name="item.id"v-model="item.value":placeholder="item.placeholder"/></div><button type="submit">Submit</button>
</form>

css

/* https://www.w3schools.com/howto/howto_css_placeholder.asp */#lastName::placeholder {/* Chrome, Firefox, Opera, Safari 10.1+ */color: black;opacity: 1; /* Firefox */
}#lastName:-ms-input-placeholder {/* Internet Explorer 10-11 */color: black;
}#lastName::-ms-input-placeholder {/* Microsoft Edge */color: black;
}

最好在表单外提供所有用户需要填写输入的信息。

用法说明​

添加用法说明时,请确保将其正确链接到目标 input 框。 你可以提供附加用法说明并在 aria-labelledby 内绑定多个 id。这可以使设计更加灵活。

template

<fieldset><legend>Using aria-labelledby</legend><label id="date-label" for="date">Current Date: </label><inputtype="date"name="date"id="date"aria-labelledby="date-label date-instructions"/><p id="date-instructions">MM/DD/YYYY</p>
</fieldset>

或者,你可以通过 aria-describedby 将用法说明附加到 input 框上。

template

<fieldset><legend>Using aria-describedby</legend><label id="dob" for="dob">Date of Birth: </label><input type="date" name="dob" id="dob" aria-describedby="dob-instructions" /><p id="dob-instructions">MM/DD/YYYY</p>
</fieldset>

隐藏内容​

通常,即使 input 框具有无障碍的名称,也不建议在视觉上隐藏标签。但是,如果可以借助周围的内容来理解输入的功能,那么我们也可以隐藏视觉标签。

让我们看看这个搜索框:

template

<form role="search"><label for="search" class="hidden-visually">Search: </label><input type="text" name="search" id="search" v-model="search" /><button type="submit">Search</button>
</form>

现在,只要视力情况良好,用户可以就能通过按钮的内容识别出该 input 框的目的。

此时我们可以使用 CSS 从视觉上隐藏元素,同时也不会影响到无障碍访问:

css

.hidden-visually {position: absolute;overflow: hidden;white-space: nowrap;margin: 0;padding: 0;height: 1px;width: 1px;clip: rect(0 0 0 0);clip-path: inset(100%);
}
aria-hidden="true"

添加 aria-hidden="true" 在无障碍访问时被隐藏,但对其他可视用户仍然是可见的。不要在可聚焦的元素上使用它,请只在装饰性的、重复的或屏幕外的内容上使用它。

template

<p>This is not hidden from screen readers.</p>
<p aria-hidden="true">This is hidden from screen readers.</p>

按钮​

在表单中使用按钮时,必须设置类型以防止提交表单。 你也可以使用一个 input 元素来创建按钮:

template

<form action="/dataCollectionLocation" method="post" autocomplete="on"><!-- 按钮 --><button type="button">Cancel</button><button type="submit">Submit</button><!-- 输入按钮 --><input type="button" value="Cancel" /><input type="submit" value="Submit" />
</form>

功能图片​

你可以使用这种方式来创建一个带有功能的图片。

  • input 框

    • 这些图片会像一个类型为 submit 的表单按钮一样
    template
    <form role="search"><label for="search" class="hidden-visually">Search: </label><input type="text" name="search" id="search" v-model="search" /><inputtype="image"class="btnImg"src="https://img.icons8.com/search"alt="Search"/>
    </form>
  • 图标

template

<form role="search"><label for="searchIcon" class="hidden-visually">Search: </label><input type="text" name="searchIcon" id="searchIcon" v-model="searchIcon" /><button type="submit"><i class="fas fa-search" aria-hidden="true"></i><span class="hidden-visually">Search</span></button>
</form>

规范​

万维网联盟 (W3C) Web 无障碍访问倡议 (WAI) 为不同的组件制定了 Web 无障碍性标准:

  • 用户代理无障碍访问指南 (UAAG)
    • 浏览器和媒体查询,包括一些其他方面的辅助技术
  • 创作工具无障碍访问指南 (ATAG)
    • 创作工具
  • Web 内容无障碍访问指南 (WCAG)
    • 网站内容 - 由开发者、创作工具和无障碍访问评估工具使用。

网络内容无障碍指南 (WCAG)​

WCAG 2.1 继承自 WCAG 2.0,接纳 Web 演进过程中的新技术。W3C 鼓励在开发或更新 Web 无障碍访问策略时使用 WCAG 的最新版本。

WCAG 2.1 四大指导原则 (缩写 POUR):​
  • 可感知性
    • 用户必须能够感知所渲染的信息
  • 可操作性
    • 表单界面,控件和导航是可操作的
  • 可理解性
    • 信息和用户界面的操作必须为所有用户所理解
  • 健壮性
    • 随着技术的进步,用户必须能够访问内容
Web 无障碍倡议 – 无障碍访问丰富的互联网应用 (WAI-ARIA)​

W3C 的 WAI-ARIA 为如何构建动态内容和高阶用户界面控件提供了指导。

  • 可便捷访问的丰富互联网应用 (WAI-ARIA) 1.2
  • WAI-ARIA 实践 1.2

资源​

文档​

  • WCAG 2.0
  • WCAG 2.1
  • Accessible Rich Internet Applications (WAI-ARIA) 1.2
  • WAI-ARIA Authoring Practices 1.2

辅助技术​

  • 屏幕助读器
    • NVDA
    • VoiceOver
    • JAWS
    • ChromeVox
  • 缩放工具
    • MAGic
    • ZoomText
    • Magnifier

测试​

  • 自动化相关的工具
    • Lighthouse
    • WAVE
    • ARC Toolkit
  • 颜色相关的工具
    • WebAim Color Contrast
    • WebAim Link Color Contrast
  • 其他有用的工具
    • HeadingMap
    • Color Oracle
    • NerdeFocus
    • Visual Aria
    • Silktide Website Accessibility Simulator

用户​

世界卫生组织估计,全世界 15% 的人口患有某种形式的残疾,其中约 2 - 4% 的人严重残疾。估计全世界有 10 亿残障人士,他们是世界上最大的少数群体。

残疾的种类繁多,大致可分为以下四类:

  • 视觉 - 可以为这些用户提供屏幕助读器、屏幕缩放、控制屏幕对比度或盲文显示等帮助。
  • 听觉 - 可以为这些用户提供视频字幕、文字记录或手语视频。
  • 运动能力 - 可以为这些用户提供一系列运动障碍辅助技术:比如语音识别软件、眼球跟踪、单刀式开关、超大轨迹球鼠标、自适应键盘等等。
  • 认知能力 - 可以为这些用户提供补充媒体、更清晰和简单、更结构化的内容。

你可以查看以下来自 WebAim 的链接,更深入地了解这些用户的需求:

  • Web 无障碍愿景:探索改变 & 人人受益
  • Web 用户的故事

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/66105.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

抢先体验:人大金仓数据库管理系统KingbaseES V9 最新版本 CentOS 7.9 部署体验

一、简介 KingbaseES 是中国人大金仓信息技术股份有限公司自主研发的一款通用关系型数据库管理系统&#xff08;RDBMS&#xff09;。 作为国产数据库的杰出代表&#xff0c;它专为中国市场设计&#xff0c;广泛应用于政府、金融、能源、电信等关键行业&#xff0c;以高安全性…

基于 GitHub API 的 Issue 和 PR 自动化解决方案

文章目录 摘要引言优化 Issue 和 PR 管理的方法工具选择流程优化 自动化 Issue 和 PR 管理代码逻辑详解获取 Issue 数据为 Issue 添加标签将 Issue 分配给开发者主逻辑 实际运行效果进一步扩展QA 环节总结参考资料 摘要 在开源项目中&#xff0c;Issue 和 Pull Request&#x…

趣味编程:心形曲线

目录 1.序言 2.代码展示 3.代码详解 3.1 头文件包含 3.2 绘制坐标轴函数 3.3 main 函数主体部分 4. 小结 1.序言 2025年的第一篇博客就用这个笛卡尔心形图开篇吧&#xff0c;寓意着新年大家能够有心有所属&#xff0c;祝诸位程序猿 / 程序媛 能够早点遇到自己的另一半。…

解决uniapp H5页面限制输入框只能输数字问题

工作记录 最最近在做 uniapp 开发的移动端 H5 页面&#xff0c;有个需求是金额输入框只能输入数字&#xff0c;不能输入小数点和其他字符&#xff0c;经过各种尝试&#xff0c;发现其他字符可以通过正则过滤掉&#xff0c;但是输入小数点的话&#xff0c;因为没有触发 input 和…

group by 执行顺序

后面也会持续更新&#xff0c;学到新东西会在其中补充。 建议按顺序食用&#xff0c;欢迎批评或者交流&#xff01; 缺什么东西欢迎评论&#xff01;我都会及时修改的&#xff01; 感谢各位大佬写的文章让我学到很多东西&#xff01;只是在各位大佬的基础加了我自己的思路&a…

初学stm32 --- FSMC驱动LCD屏

目录 FSMC简介 FSMC框图介绍 FSMC通信引脚介绍 FSMC_NWE 的作用 FSMC_NWE 的时序关系 FSMC_NOE 的含义 FSMC_NOE 的典型用途 FSMC_NOE 的时序关系 使用FSMC驱动LCD FSMC时序介绍 时序特性中的 OE ILI9341重点时序&#xff1a; FSMC地址映射 HADDR与FSMC_A关系 LCD的…

Nginx - 整合lua 实现对POST请求的参数拦截校验(不使用Openresty)

文章目录 概述步骤 1: 安装 Nginx 和 Lua 模块步骤 2: 创建 Lua 脚本用于参数校验步骤 3: 配置 Nginx 使用 Lua 脚本写法二&#xff1a; 状态码写法三 &#xff1a; 返回自定义JSON复杂的正则校验 步骤 4: 测试和验证ngx.HTTP_* 枚举值 概述 一个不使用 OpenResty 的 Nginx 集…

GRAPE——RLAIF微调VLA模型:通过偏好对齐提升机器人策略的泛化能力(含24年具身模型汇总)

前言 24年具身前沿模型大汇总 过去的这两年&#xff0c;工作之余&#xff0c;我狂写大模型与具身的文章&#xff0c;加之具身大火&#xff0c;每周都有各种朋友通过CSDN私我及我司「七月在线」寻求帮助/指导(当然&#xff0c;也欢迎各大开发团队与我司合作共同交付&#xff09…

VBA 64位API声明语句第005讲

跟我学VBA&#xff0c;我这里专注VBA, 授人以渔。我98年开始&#xff0c;从源码接触VBA已经20余年了&#xff0c;随着年龄的增长&#xff0c;越来越觉得有必要把这项技能传递给需要这项技术的职场人员。希望职场和数据打交道的朋友&#xff0c;都来学习VBA,利用VBA,起码可以提高…

covid-vaccine-availability-using-flask-server

使用烧瓶服务器获得 Covid 疫苗 原文:https://www . geesforgeks . org/co vid-疫苗-可用性-使用-烧瓶-服务器/ 在本文中&#xff0c;我们将使用 Flask Server 构建 Covid 疫苗可用性检查器。 我们都知道&#xff0c;整个世界都在遭受疫情病毒的折磨&#xff0c;唯一能帮助我们…

hashMap追问

HashMap 7/8区别 不同点&#xff1a; &#xff08;1&#xff09;JDK1.7用的是头插法&#xff0c;而JDK1.8及之后使用的都是尾插法&#xff0c;那么他们为什么要这样做呢&#xff1f;因为JDK1.7是用单链表进行的纵向延伸&#xff0c;当采用头插法时会容易出现逆序且环形链表死…

网络安全:路由技术

概述 路由技术到底研究什么内容 研究路由器寻找最佳路径的过程 路由器根据最佳路径转发数据包 知识点&#xff0c;重要OSRF,BGP1.静态路由原理 路由技术分类 静态路由和动态路由技术 静态路由&#xff1a;是第一代路由技术&#xff0c;由网络管理员手工静态写路由/路径告知路…

计算机毕业设计Django+Tensorflow音乐推荐系统 音乐可视化 卷积神经网络CNN LSTM音乐情感分析 机器学习 深度学习 Flask

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

分布式光伏规模界点为什么是6MW?

多省能源局规定大于6MW的电站必须按集中式管理&#xff0c;另外大于6MW&#xff08;包含&#xff09;要省级审批&#xff0c;小于则由市级审批&#xff0c;10kV线路单回接入容量也是6MW&#xff0c;很多电厂发电机装机容量也是以6MW为界点。这是什么原因呢&#xff1f; 配电网…

[2474].第04节:Activiti官方画流程图方式

我的后端学习大纲 Activiti大纲 1.安装位置&#xff1a; 2.启动&#xff1a;

Qt从入门到入土(七)-实现炫酷的登录注册界面(下)

前言 Qt从入门到入土&#xff08;六&#xff09;-实现炫酷的登录注册界面&#xff08;上&#xff09;主要讲了如何使用QSS样式表进行登录注册的界面设计&#xff0c;本篇文章将介绍如何对登录注册界面进行整体控件的布局&#xff0c;界面的切换以及实现登录、记住密码等功能。…

在 macOS 上,你可以使用系统自带的 终端(Terminal) 工具,通过 SSH 协议远程连接服务器

文章目录 1. 打开终端2. 使用 SSH 命令连接服务器3. 输入密码4. 连接成功5. 使用密钥登录&#xff08;可选&#xff09;6. 退出 SSH 连接7. 其他常用 SSH 选项8. 常见问题排查问题 1&#xff1a;连接超时问题 2&#xff1a;权限被拒绝&#xff08;Permission denied&#xff09…

121.【C语言】数据结构之快速排序(未优化的Hoare排序存在的问题)以及时间复杂度的分析

目录 1.未优化的Hoare排序存在的问题 测试代码 "量身定制"的测试代码1 运行结果 "量身定制"的测试代码2 运行结果 "量身定制"的测试代码3 运行结果 分析代码1、2和3栈溢出的原因 排有序数组的分析 分析测试代码1:给一个升序数组,要求排…

DC-2 靶场渗透

目录 环境搭建 开始渗透 扫存活 扫端口 扫服务 看一下80端口 看一下指纹信息 使用wpscan扫描用户名 再使用cewl生成字典 使用wpscan爆破密码 登陆 使用7744端口 查看shell rbash绕过 切换到jerry用户 添加环境变量 现在可以使用su命令了 提权 使用git提权 环…

如何在 Ubuntu 22.04 上优化 Apache 以应对高流量网站教程

简介 在本教程中&#xff0c;我们将学习如何优化 Apache 以应对高流量网站。 当运行高流量网站时&#xff0c;确保你的 Apache Web 服务器得到优化对于有效处理负载至关重要。在本指南中&#xff0c;我们将介绍配置 Apache 以提高性能和可扩展性的基本技巧。 为高流量网站优…