Web Accessibility基础:构建无障碍的前端应用
Web Accessibility(网络无障碍)是确保所有人都能平等访问和使用网站和应用程序的关键。这包括视觉、听觉、运动和认知能力有限的用户。以下是一些构建无障碍前端应用的基础原则和代码示例:
2500G计算机入门到高级架构师开发资料超级大礼包免费送!
1. 文本替代(alt属性)
确保所有非文本内容(如图片)都有描述性的alt属性,以便屏幕阅读器用户理解图片内容。
<img src="hero.jpg" alt="A smiling person holding a cup of coffee">
2. 标签和角色(ARIA roles)
使用ARIA(Accessible Rich Internet Applications)角色和属性来增强可访问性,尤其是对于复杂交互元素。
<button role="button" aria-label="Close">X</button>
3. 表单元素
确保表单元素有清晰的标签,使用
<label for="email">Email:</label>
<input type="email" id="email" required>
4. 键盘导航
所有交互元素都应可以通过键盘导航,并遵循自然的焦点顺序。
<nav><ul><li><a href="#home" tabindex="0">Home</a></li><li><a href="#about" tabindex="0">About</a></li><li><a href="#contact" tabindex="0">Contact</a></li></ul>
</nav>
5. 颜色对比
确保文本和背景之间有足够的颜色对比,避免颜色作为唯一的信息传递方式。
/* 使用颜色对比检查工具,如WCAG Color Contrast Checker */
body {color: #000; /* dark text */background-color: #f8f8f8; /* light background, good contrast */
}
6. 视觉隐藏
使用visually-hidden类隐藏内容,使其仅对屏幕阅读器可见。
.visually-hidden {position: absolute !important;clip: rect(0 0 0 0) !important;width: 1px !important;height: 1px !important;padding: 0 !important;margin: -1px !important;overflow: hidden !important;border: 0 !important;
}
<button><span class="visually-hidden">Skip to main content</span>Skip
</button>
7. ARIA live区域
使用aria-live属性通知屏幕阅读器用户关于页面动态更新的信息。
<div aria-live="polite" aria-atomic="true" class="notification"><!-- Dynamic content will be inserted here -->
</div>
8. 时间敏感内容
为时间敏感的内容提供截止日期或计时器。
<p>This offer expires in:<span id="countdown"></span>
</p><script>// 更新countdown元素的内容
</script>
9. 考虑触控设备
确保触摸目标足够大,至少44x44像素,避免过于紧密的布局。
.button {min-width: 44px;min-height: 44px;padding: 10px;
}
10. 编码语义化
使用语义化的HTML元素,如<header>, <nav>, <main>, <article>, <section>, <footer>
等。
<body><header><!-- Header content --></header><main><!-- Main content --></main><footer><!-- Footer content --></footer>
</body>
11. 视觉指示器
为交互元素添加视觉反馈,如悬停、聚焦和激活状态。
.button {transition: all 0.3s;
}.button:hover,
.button:focus,
.button:active {background-color: #333;color: #fff;
}
12. 语音命令和语音输入
考虑到语音控制设备,如Siri、Google Assistant等,确保界面可以通过语音命令操作。
<form action="/search"><label for="search">Search:</label><input type="search" id="search" name="q" placeholder="Voice command: Search..."><button type="submit">Go</button>
</form>
13. 字体和文本可读性
选择易读的字体,保持足够的行高、字间距和字号。确保文本缩放不影响布局。
body {font-family: Arial, sans-serif;font-size: 16px;line-height: 1.5;letter-spacing: 0.05em;text-rendering: optimizeLegibility;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;
}
14. 交互元素的清晰状态
确保用户清楚知道何时可以与元素交互,以及交互的状态。
input[type="checkbox"]:checked + label::before {content: '\2713'; /* checkmark character */
}
html
<input type="checkbox" id="accept" />
<label for="accept">I accept the terms and conditions</label>
15. 考虑色盲用户
使用色彩对比度检查工具,确保颜色组合对色盲用户友好。
.colorblind-friendly {background-color: #008080;color: #fff;
}
16. 视觉辅助
提供视觉辅助,如放大镜、高对比度模式、色盲模拟器等。
<button id="toggle-high-contrast">Toggle High Contrast</button><script>document.getElementById('toggle-high-contrast').addEventListener('click', function() {document.body.classList.toggle('high-contrast');});
</script><style>.high-contrast {background-color: #000;color: #fff;}
</style>
17. 适配屏幕阅读器
确保所有重要信息都能被屏幕阅读器读取,例如表格的标题和摘要。
<table><caption>Employee List</caption><thead><tr><th>Name</th><th>Position</th><th>Office</th></tr></thead><!-- Table rows -->
</table>
18. 响应式设计
确保网站在不同设备和屏幕尺寸上表现良好,适应不同访问方式。
@media (max-width: 768px) {/* Mobile-specific styles */
}
19. 视频和音频内容
为视频提供字幕,为音频提供文字转录。
<video controls><source src="movie.mp4" type="video/mp4"><track kind="captions" src="movie.vtt" srclang="en" label="English">
</video>
20. 定期测试
使用自动化和人工测试工具(如axe,Pa11y,Lighthouse等)定期检查可访问性,并根据反馈进行改进。
21. 图像地图(Image Maps)
对于包含多个交互区域的图像,使用图像地图提供可点击的区域。
<img src="worldmap.png" usemap="#worldmap" alt="World Map">
<map name="worldmap"><area shape="rect" coords="0,0,82,126" alt="North America" href="#na"><area shape="circle" coords="200,100,30" alt="Europe" href="#eu"><area shape="poly" coords="330,50,380,0,450,50,400,100" alt="Asia" href="#as">
</map>
22. 语音合成(Text-to-Speech)
为用户提供语音合成选项,让他们能够听到页面内容。
<button id="tts">Read Aloud</button><script>document.getElementById('tts').addEventListener('click', function() {const textToRead = document.querySelector('main').innerText;const speech = new SpeechSynthesisUtterance(textToRead);window.speechSynthesis.speak(speech);});
</script>
23. 错误提示和反馈
提供清晰的错误消息和反馈,使用户了解如何解决问题。
<form><label for="email">Email:</label><input type="email" id="email" required><span id="email-error" class="error"></span><button type="submit">Submit</button>
</form><script>document.querySelector('form').addEventListener('submit', function(event) {event.preventDefault();const emailInput = document.getElementById('email');const errorSpan = document.getElementById('email-error');if (!emailInput.checkValidity()) {errorSpan.textContent = 'Please enter a valid email address.';} else {errorSpan.textContent = '';// Submit form or perform other actions}});
</script>
24. 交互元素的焦点管理
确保键盘焦点在页面元素之间正确流动,避免跳过或重复。
const focusableElements = 'a[href], button, input:not([type="hidden"]), textarea, select, iframe, object, embed, [tabindex="0"], [contenteditable]';
const firstFocusableElement = document.querySelector(focusableElements);document.addEventListener('DOMContentLoaded', function() {if (firstFocusableElement) {firstFocusableElement.focus();}
});document.addEventListener('keydown', function(event) {if (event.key === 'Tab') {const lastFocusableElement = document.querySelector(`${focusableElements}:last-of-type`);if (event.shiftKey && document.activeElement === document.body) {lastFocusableElement.focus();event.preventDefault();} else if (!event.shiftKey && document.activeElement === lastFocusableElement) {firstFocusableElement.focus();event.preventDefault();}}
});
2500G计算机入门到高级架构师开发资料超级大礼包免费送!
相关文章:
Web Accessibility基础:构建无障碍的前端应用
Web Accessibility(网络无障碍)是确保所有人都能平等访问和使用网站和应用程序的关键。这包括视觉、听觉、运动和认知能力有限的用户。以下是一些构建无障碍前端应用的基础原则和代码示例: 2500G计算机入门到高级架构师开发资料超级大礼包免…...
谈谈你对 SPA 的理解?
1 理解基本概念 SPA(single-page application)单页应用,默认情况下我们编写 Vue、React 都只有一个html 页面,并且提供一个挂载点,最终打包后会再此页面中引入对应的资源。(页面的渲染全部是由 JS 动态进行…...
JAVA给一个JSON数组添加对象
操作Mysql表的json字段,查询json字段的内容,将新增的内容添加到查询的json数组中 String a "[{\"name\": \"张三\", \"age\": 10, \"gender\": \"男\", \"email\": \"123qq.co…...
设计一个完美的用户角色权限表
设计一个完美的用户角色权限表需要考虑系统的安全性、灵活性和可扩展性。以下是一个详细的用户角色权限管理表设计方案,包含多个表结构和字段描述。 目录 1. 用户表(Users Table)2. 角色表(Roles Table)3. 权限表&…...

Git 基本使用
目录 Git 安装与设置 在 Windows上安装 Git git 的配置 Git 原理 git 的四个区域 git 工作流程 git 文件的状态 Git 操作 创建仓库 免密登录 基本操作 版本回退 本地仓库整理 分支命令 合并分支 解决冲突 Git 安装与设置 在 Windows上安装 Git 在 Windows上使…...
LabVIEW使用PID 控制器有哪些应用场景?
如何在LabVIEW中创建PID控制器? LabVIEW为各种控制工程任务提供了内置函数和库,包括PID控制器编程。这些功能位于控制设计和仿真调色板中,其中有用于不同类型控制器的子调色板。要在LabVIEW中创建PID控制器,需要将PID函数从PID子调色板拖放…...

UTC与GPS时间转换-[week, sow]
UTC与GPS时间转换-[week, sow] utc2gpsgps2utc测试参考 Ref: Global Positioning System utc2gps matlab源码 function res utc2gps(utc_t, weekStart)%% parameterssec_day 86400;sec_week 604800;leapsec 18; % 默认周一为一周的开始if nargin < 2weekStart d…...
JVM性能调优:内存模型及垃圾收集算法
JVM内存结构 根据Java虚拟机规范,JVM内存主要划分为以下区域: 年轻代(New Generation) 包括Eden空间,用于存放新创建的对象。Survivor区由两个相同大小的Survivor1和Survivor2组成,用于存放经过初次垃圾回…...

不靠后端,前端也能搞定接口!
嘿,前端开发达人们!有个超酷的消息要告诉你们:MemFire Cloud来袭啦!这个神奇的东东让你们不用依赖后端小伙伴们,也能妥妥地搞定 API 接口。是不是觉得有点不可思议?但是事实就是这样,让我们一起…...
如何秒杀Promise面试题
如何秒杀Promise面试题 如果你在面试的时候技术面给你出了点关于Promise的面试题首先不要慌,先问候他爹妈一套问候语! 然后切记不要(ps:这是病句别在意!🤣) 自己想 找他要纸和笔 首先关于promise的面试题无非就是 promise 的状态和宏队列、…...

linux文件权限常用知识点,基于Linux(openEuler、CentOS8)
目录 知识点常用实例 知识点 真实环境文件显示 解读 常用实例 文件所有者 chown -R nginx:nginx /home/source目录权限(R选填必须大写<遍历子文件夹及文件>) chmod -R 755 /home/sourcechmod -R 777 /home/source...

【前端笔记】记录一个能优化Echarts Geo JSON大小的网站
前端在使用Echarts等可视化图表库会不可避免遇到的问题,渲染地图的数据太大。 而有那么一个网站能给予这个问题一个解决方案:链接在此 使用方法很简单,首先先进入网站,如果进入了会是这个页面: 接着,选择一…...
车与网络之间(V2N)简介
车与网络之间(V2N)简介 一、定义与概述 V2N,全称为Vehicle-to-Network,是指车辆与网络之间的通信和连接技术。这种技术使得车辆能够与互联网进行无缝连接,进而实现导航、娱乐、防盗等多种应用功能。在智能交通系统领…...
.Net Core WebAPI参数的传递方式
Controller继承自ControllerBase,只不过增加了视图相关的方法,一般mvc项目选用Controller而Web API项目选择ControllerBase即可。 给服务器传递参数的时候,有URL、QueryString、请求报文体3种方式 请求路径/Student/GetAll/school/MIT/class…...

10款免费黑科技软件,强烈推荐!
1.AI视频生成——巨日禄 网页版https://aitools.jurilu.com/ "巨日禄 "是一款功能强大的文本视频生成器,可以快速将文本内容转换成极具吸引力的视频。操作简单,用户只需输入文字,选择喜欢的样式和模板, “巨日禄”就会…...

DFS:解决二叉树问题
文章目录 了解DFS1.计算布尔二叉树的值思路代码展示 2.求根节点到叶节点数字之和思路代码展示 3.二叉树剪枝思路代码展示 4.验证二叉搜索树思路分析代码展示 5.二叉搜索树中第k小元素思路:代码展示 6.二叉树的所有路径思路分析代码展示 总结 了解DFS 所谓DFS就是就…...
【相机开发问题总结】曝光补偿ExposureCompensation未生效异常分析及解决
问题描述 做一款相机应用时,用户反馈相机预览界面太暗了,由于我们是嵌入式设备,没有手机那么高大上得闪光灯补光,因此只能考虑从软件层面提高界面亮度,还好找到了曝光补偿,但是开发过程中发现曝光补偿未生…...
Flutter 中的 DateRangePickerDialog 小部件:全面指南
Flutter 中的 DateRangePickerDialog 小部件:全面指南 在 Flutter 应用开发中,日期和时间的选择是一项常见的用户交互需求。DateRangePickerDialog 是一个方便的小部件,它提供了一个对话框界面,允许用户选择日期范围。这个小部件…...

MCS-51伪指令
上篇我们讲了汇编指令格式,寻址方式和指令系统分类,这篇我们讲一下单片机伪指令。 伪指令是汇编程序中用于指示汇编程序如何对源程序进行汇编的指令。伪指令不同于指令,在汇编时并不翻译成机器代码,只是会汇编过程进行相应的控制…...

vue3 vant4实现抖音短视频功能
文章目录 1. 实现效果2. 精简版核心代码3. 完整功能点(本文章不写,只写核心代码) 1. 实现效果 2. 精简版核心代码 使用的 vue3 vant4组件使用van-swipe进行轮播图切换实现 <template><div :style"{width: width px,overflo…...

龙虎榜——20250610
上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...

Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

【分享】推荐一些办公小工具
1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由:大部分的转换软件需要收费,要么功能不齐全,而开会员又用不了几次浪费钱,借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...
Bean 作用域有哪些?如何答出技术深度?
导语: Spring 面试绕不开 Bean 的作用域问题,这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开,结合典型面试题及实战场景,帮你厘清重点,打破模板式回答,…...
小木的算法日记-多叉树的递归/层序遍历
🌲 从二叉树到森林:一文彻底搞懂多叉树遍历的艺术 🚀 引言 你好,未来的算法大神! 在数据结构的世界里,“树”无疑是最核心、最迷人的概念之一。我们中的大多数人都是从 二叉树 开始入门的,它…...

Android写一个捕获全局异常的工具类
项目开发和实际运行过程中难免会遇到异常发生,系统提供了一个可以捕获全局异常的工具Uncaughtexceptionhandler,它是Thread的子类(就是package java.lang;里线程的Thread)。本文将利用它将设备信息、报错信息以及错误的发生时间都…...
CentOS 7.9安装Nginx1.24.0时报 checking for LuaJIT 2.x ... not found
Nginx1.24编译时,报LuaJIT2.x错误, configuring additional modules adding module in /www/server/nginx/src/ngx_devel_kit ngx_devel_kit was configured adding module in /www/server/nginx/src/lua_nginx_module checking for LuaJIT 2.x ... not…...