当前位置: 首页 > article >正文

前端可访问性:让所有人都能使用你的应用

前端可访问性让所有人都能使用你的应用一、引言又到了我这个毒舌工匠上线的时间了今天咱们来聊聊前端可访问性这个话题。别以为可访问性只是给残障人士用的实际上良好的可访问性能够让所有人都能更好地使用你的应用包括老年人、临时受伤的人、使用低性能设备的人等等。二、什么是前端可访问性前端可访问性Accessibility就是让你的应用能够被所有人使用无论他们的身体状况如何。简单来说就是让你的应用对所有人都友好包括残障人士。三、前端可访问性的重要性1. 法律要求法律要求是前端可访问性的一个重要原因。许多国家和地区都有相关的法律规定要求网站和应用必须具有可访问性。2. 扩大用户群体扩大用户群体是前端可访问性的另一个重要原因。据统计全球约有10亿人患有某种形式的残疾这是一个庞大的用户群体。3. 提高用户体验提高用户体验是前端可访问性的第三个重要原因。良好的可访问性不仅能够帮助残障人士还能够提高所有用户的体验。四、前端可访问性的实现方式1. 使用语义化HTML语义化HTML是前端可访问性的基础。你必须使用正确的HTML标签让屏幕阅读器能够正确理解页面的结构。错误做法!-- 使用div代替语义化标签 -- div classheader div classtitle网站标题/div /div div classnav div classnav-item首页/div div classnav-item关于我们/div /div正确做法!-- 使用语义化标签 -- header h1网站标题/h1 /header nav ul lia href/首页/a/li lia href/about关于我们/a/li /ul /nav2. 添加ARIA属性ARIAAccessible Rich Internet Applications是一组属性用于增强HTML元素的可访问性。代码示例!-- 添加ARIA属性 -- button aria-expandedfalse aria-controlsmenu菜单/button div idmenu aria-hiddentrue ul lia href/首页/a/li lia href/about关于我们/a/li /ul /div3. 提供键盘导航键盘导航是前端可访问性的重要组成部分。你必须确保用户能够使用键盘导航你的应用而不需要使用鼠标。代码示例// 为下拉菜单添加键盘导航 const menuButton document.getElementById(menu-button); const menu document.getElementById(menu); const menuItems menu.querySelectorAll(a); let currentIndex -1; menuButton.addEventListener(keydown, (e) { if (e.key Enter || e.key ) { e.preventDefault(); menu.classList.toggle(hidden); if (!menu.classList.contains(hidden)) { currentIndex 0; menuItems[currentIndex].focus(); } } if (e.key Escape) { menu.classList.add(hidden); menuButton.focus(); } }); menu.addEventListener(keydown, (e) { if (e.key ArrowDown) { e.preventDefault(); currentIndex (currentIndex 1) % menuItems.length; menuItems[currentIndex].focus(); } if (e.key ArrowUp) { e.preventDefault(); currentIndex (currentIndex - 1 menuItems.length) % menuItems.length; menuItems[currentIndex].focus(); } if (e.key Escape) { menu.classList.add(hidden); menuButton.focus(); } });4. 确保颜色对比度颜色对比度是前端可访问性的重要组成部分。你必须确保文本和背景之间的对比度足够高让视力障碍的用户能够看清文本。代码示例/* 确保颜色对比度 */ body { background-color: #ffffff; color: #333333; /* 对比度12.63:1符合WCAG AA标准 */ } button { background-color: #007bff; color: #ffffff; /* 对比度4.5:1符合WCAG AA标准 */ }5. 提供替代文本替代文本是前端可访问性的重要组成部分。你必须为图片、视频等非文本内容提供替代文本让屏幕阅读器能够理解这些内容。代码示例!-- 为图片提供替代文本 -- img srclogo.png alt网站logo !-- 为视频提供字幕 -- video controls source srcvideo.mp4 typevideo/mp4 track srcsubtitles.vtt kindsubtitles srclangzh label中文 /video五、前端可访问性的最佳实践1. 遵循WCAG标准WCAGWeb Content Accessibility Guidelines是国际公认的网页内容可访问性指南你应该遵循这些标准。2. 进行可访问性测试可访问性测试是前端可访问性的重要组成部分。你应该定期进行可访问性测试确保你的应用符合可访问性标准。使用axe-core进行测试npm install axe-core代码示例// 使用axe-core进行可访问性测试 import axe from axe-core; axe.run(document, (err, results) { if (err) { console.error(err); return; } console.log(可访问性测试结果); console.log(results); });3. 为表单添加标签表单标签是前端可访问性的重要组成部分。你必须为表单元素添加标签让屏幕阅读器能够理解表单的内容。代码示例!-- 为表单添加标签 -- label forname姓名/label input typetext idname namename !-- 或者使用嵌套标签 -- label 姓名 input typetext namename /label4. 避免使用闪烁效果闪烁效果可能会导致癫痫发作你应该避免使用闪烁效果。代码示例/* 避免使用闪烁效果 */ /* 错误做法 */ keyframes blink { 0% { opacity: 1; } 50% { opacity: 0; } 100% { opacity: 1; } } .blinking { animation: blink 1s infinite; } /* 正确做法使用其他效果 */ .highlight { background-color: #ffff00; transition: background-color 0.3s ease; }5. 提供跳过导航链接跳过导航链接是前端可访问性的重要组成部分。你应该为用户提供跳过导航的链接让他们能够直接跳转到主要内容。代码示例!-- 提供跳过导航链接 -- a href#main-content classskip-link跳过导航/a nav !-- 导航内容 -- /nav main idmain-content !-- 主要内容 -- /main/* 样式化跳过导航链接 */ .skip-link { position: absolute; top: -40px; left: 0; background-color: #007bff; color: #ffffff; padding: 8px; text-decoration: none; z-index: 100; } .skip-link:focus { top: 0; }六、前端可访问性工具1. axe-coreaxe-core是一个开源的可访问性测试工具可以帮助你发现和修复可访问性问题。2. LighthouseLighthouse是Google开发的一个工具可以评估网站的性能、可访问性、最佳实践等。3. WAVEWAVE是一个Web可访问性评估工具可以帮助你发现和修复可访问性问题。4. JAWSJAWS是一个屏幕阅读器可以帮助你测试网站的可访问性。七、总结前端可访问性是一个重要的前端主题它能够让你的应用被所有人使用无论他们的身体状况如何。作为一名前端工程师你必须重视前端可访问性采取必要的措施确保你的应用对所有人都友好。最后我想说可访问性不是小事它关系到你的应用的用户群体和社会责任感。别以为可访问性只是给残障人士用的实际上良好的可访问性能够让所有人都能更好地使用你的应用。作者cannonmonster01日期2026-04-04标签前端可访问性、WCAG、ARIA、键盘导航、颜色对比度

相关文章:

前端可访问性:让所有人都能使用你的应用

前端可访问性:让所有人都能使用你的应用 一、引言 又到了我这个毒舌工匠上线的时间了!今天咱们来聊聊前端可访问性这个话题。别以为可访问性只是给残障人士用的,实际上,良好的可访问性能够让所有人都能更好地使用你的应用&#xf…...

51单片机(二) --- GPIO + 中断

一、GPIO 通用输入输出口GPIO(General Purpose Input Output)即通用目的输入输出口,是 51 单片机与外部设备进行数据交互的核心通道,51 单片机的 P0、P1、P2、P3 四组口均为 GPIO 口。与入门阶段仅用到的简单电平输出不同&#xf…...

大学生食品安全科普网页——web网页期末大作业

(文件先保存到自己网盘,谨防文件丢失!!) 源码获取地址 链接: https://pan.baidu.com/s/1r6C8_J31D01e1uG3FJi27w?pwdzxxh提取码: zxxhhtml科普网页源码 ✅ 网页一共6个页面 ✅ 网页使用html css js完成 布局简单 ✅…...

大学生保护动物网页——web网页期末大作业

(文件先保存到自己网盘,谨防文件丢失!!) 源码获取地址 链接: https://pan.baidu.com/s/1bz6nL9WPBBsxxWVmBAfGXw?pwdrcwi提取码: rcwihtml个人网页源码 ✅ 网页一共4个页面 ✅ 网页使用html css完成 布局简单 ✅ 文…...

说说 TCP 的三次握手:为什么是三次而不是两次或四次?

说说 TCP 的三次握手:为什么是三次而不是两次或四次?01. 前言:TCP 连接的“破冰仪式”02. 三次握手的完整流程2.1 流程图2.2 三个报文详解2.3 状态变化追踪03. 为什么需要三次握手?(核心问题)3.1 问题一&am…...

一台服务器最多能建立多少 TCP 连接:从理论极限到实际瓶颈

一台服务器最多能建立多少 TCP 连接:从理论极限到实际瓶颈01. 前言:一个经典却容易被答错的问题02. 核心原理:什么唯一标识一个 TCP 连接?03. 服务端 vs 客户端:限制完全不同3.1 服务端视角(如 Nginx、Tomc…...

TCP 是用来解决什么问题:从 IP 的不可靠到可靠的端到端通信

TCP 是用来解决什么问题:从 IP 的不可靠到可靠的端到端通信01. 前言:为什么有了 IP 还不够?02. IP 协议的四大先天缺陷03. TCP 要解决的六大核心问题04. 问题一:丢包 → 确认 超时重传4.1 问题描述4.2 TCP 的解决方案05. 问题二&…...

到底什么是 TCP 连接:从三次握手到四次挥手,从数据结构到状态机

到底什么是 TCP 连接:从三次握手到四次挥手,从数据结构到状态机01. 前言:每天都在用,却说不清它是什么02. 一句话定义03. TCP 连接不是物理的,而是逻辑的04. TCP 连接的核心标识:四元组05. TCP 连接在内核中…...

Python @contextmanager 装饰器完全指南

在Python编程实践中,资源管理是一个永恒的话题。无论是文件句柄、数据库连接还是临时状态变更,我们都需要确保资源被正确分配并在使用后得到妥善清理。虽然传统的try...finally语句可以解决这个问题,但Python提供了更加优雅的解决方案——上下…...

EC数据下载和可视化产品python实现

欧洲中期天气预报中心(ECMWF,European Centre for Medium-Range Weather Forecasts)是全球顶尖的气象研究和业务预报中心之一。其发布的数据,常被业内简称为“EC数据”,因高精度与高稳定性,是全球气象预报、…...

数据集成与 ETL 实践:从设计到优化

数据集成与 ETL 实践:从设计到优化 前言 作为一个在数据深渊里捞了十几年 Bug 的女码农,我深知数据集成和 ETL(Extract, Transform, Load)在企业数据管理中的重要性。随着数据量的爆炸式增长和数据来源的多样化,数据集…...

数据治理与数据质量:从策略到实践

数据治理与数据质量:从策略到实践 前言 作为一个在数据深渊里捞了十几年 Bug 的女码农,我深知数据治理和数据质量在企业数据管理中的重要性。随着数据量的爆炸式增长和数据类型的多样化,数据治理和数据质量已经成为企业数据管理的核心挑战。今…...

云原生数据库的设计与实践:从架构到部署

云原生数据库的设计与实践:从架构到部署 前言 作为一个在数据深渊里捞了十几年 Bug 的女码农,我深知云原生技术对数据库的影响。随着云计算的快速发展,云原生数据库已经成为数据库技术的重要发展方向。今天,我就来聊聊云原生数据库…...

网络协议封神考点:TCP协议是如何保证可靠传输的?原理+流程图+硬核详解

网络协议封神考点:TCP协议是如何保证可靠传输的?原理流程图硬核详解一、前言二、基础定义:什么是TCP可靠传输?三、TCP保证可靠传输的6大核心机制(必考)3.1 机制1:面向连接(三次握手 …...

Spring-AI 第 13 章 - 多模态消息处理详解

📚 理论基础 什么是多模态 AI? 多模态 AI(Multimodal AI) 是能够同时处理和生成多种类型数据(文本、图像、音频等)的人工智能系统。 多模态模型架构 ┌──────────────┐ ┌──────────────┐ │ 图像输入 │ │ 文本输入 …...

**发散创新:基于Go语言实现的Raft共识算法实战解析**在分布式系统中,**一

发散创新:基于Go语言实现的Raft共识算法实战解析 在分布式系统中,一致性是核心挑战之一。而Raft共识算法因其简洁性和可理解性,已成为当前主流的分布式一致性协议(如etcd、Consul均采用Raft)。本文将带你深入用Go语言从…...

# 发散创新:基于Python与Stable Diffusion的AI绘画自动化流程设计与实践

发散创新:基于Python与Stable Diffusion的AI绘画自动化流程设计与实践 在人工智能技术飞速发展的今天,AI绘画已从实验室走向大众创作场景。如何将这一前沿能力融入开发者工作流?本文以 Python Stable Diffusion API(如InvokeAI或…...

**发散创新:基于 Rust的微服务生态构建与性能优化实战**在现代云原生架构中,**Rust语言正迅速成为构建高并发、低延迟微服

发散创新:基于 Rust 的微服务生态构建与性能优化实战 在现代云原生架构中,Rust 语言正迅速成为构建高并发、低延迟微服务的首选工具之一。它不仅提供了媲美 C/C 的性能,还通过所有权机制彻底避免了内存安全问题。本文将围绕 Rust 在微服务生态…...

2026届最火的六大降重复率神器实际效果

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 目前人工智能生成内容大范围运用的情形下,致使 AIGC 检测识别率降低的工具适时出…...

场效应管MOS

场效应管 场效应管又称场效应晶体管(Field Effect Transistor,缩写为FET),它与三极管一样,具有放大能力。场效应管有漏极(D极)、栅极(G极)和源极(S极&#xf…...

5个突破边界技巧:OpenSpeedy游戏变速工具深度优化指南

5个突破边界技巧:OpenSpeedy游戏变速工具深度优化指南 【免费下载链接】OpenSpeedy 🎮 An open-source game speed modifier. 项目地址: https://gitcode.com/gh_mirrors/op/OpenSpeedy 副标题:如何通过用户态Hook技术实现游戏帧率自由…...

新手福音:在快马平台用AI生成openclaw命令实操案例,轻松入门运维自动化

作为一个刚接触运维的新手,第一次看到openclaw这个命令时确实有点懵。不过最近在InsCode(快马)平台上发现了一个超实用的功能,可以通过AI直接生成可运行的openclaw示例代码,还能实时测试效果,简直是新手福利!下面我就用…...

保姆级教程:在Quartus Prime 18.0中手把手配置NCO IP核并完成Modelsim仿真

保姆级教程:在Quartus Prime 18.0中手把手配置NCO IP核并完成Modelsim仿真 数字信号处理是FPGA开发中的核心技能之一,而数控振荡器(NCO)作为生成精确频率信号的关键IP核,在通信系统、雷达信号处理等领域有着广泛应用。…...

C语言三大控制结构:零基础学循环与选择

C语言编程里,控制结构用以构架程序逻辑,是新手入门的关键要点,掌握顺序、选择、循环这三大基本控制结构,可使你脱离单纯顺序代码编写,达成更复杂、更灵活的程序逻辑,本文会将C语言控制结构的核心知识点讲解…...

【深度解析】Hermes Agent:具备学习循环的开源 AI 代理如何落地到你的开发工作流?

摘要 Hermes Agent 是 News Research 推出的开源 AI Agent 系统,不只是“聊天包装器”,而是带有持久化记忆、自我技能学习与多通道接入的完整代理运行环境。本文从架构原理到落地实践,系统解析 Hermes 的学习循环、模型接入方式(云…...

CEEMDAN-VMD-Transformer-GRU二次分解+编码器+门控循环单元多元时间序列预测

一、研究背景 实际工程与科学数据(如振动信号、电力负荷、金融时序)常呈现非线性、非平稳特征,单一预测模型难以充分提取多尺度信息。为此,结合自适应信号分解(CEEMDAN、VMD)与深度学习(Transfo…...

针对波动计算复杂性的吸收边界条件(PML 用于一般波动方程)附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室🍊个人信条:格物致知,完整Matlab代码及仿真咨询…...

【LeetCode 刷题日】19.删除链表的倒数第n个节点

🔥个人主页:北极的代码(欢迎来访) 🎬作者简介:java后端学习者评论和 ❄️个人专栏:苍穹外卖日记,SSM框架深入,JavaWeb ✨命运的结局尽可永在,不屈的挑战却不可…...

【AI实战项目】项目六:知识图谱构建与应用实战

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请轻击人工智能教程https://www.captainai.net/troubleshooter 项目背景: 在当今信息爆炸的时代,精准理解和应…...

人流后多久干净才算正常?行业洞察与科学修护指南

人工流产后,出血排净时间是判断身体恢复状态的核心指标,也是女性关注的首要问题。结合行业研究与临床实践,本文将深入解析人流后出血的正常范围、异常信号,同时结合行业修护标准,为女性提供科学、实用的恢复指引&#…...