前端无障碍性:让所有人都能使用你的网站

前端无障碍性:让所有人都能使用你的网站

毒舌时刻

前端无障碍性?这不是给残障人士用的吗?

"我的网站不需要无障碍性,用户都是正常人"——结果被投诉歧视,
"无障碍性太麻烦了,我没时间做"——结果失去了一部分用户,
"无障碍性就是加几个alt标签而已"——结果网站在屏幕阅读器下完全不可用。

醒醒吧,无障碍性不是慈善,而是一种责任!

为什么你需要这个?

  • 法律合规:许多国家和地区都有无障碍性法规
  • 扩大用户群体:让残障人士也能使用你的网站
  • SEO优化:无障碍性好的网站更容易被搜索引擎收录
  • 用户体验:对所有人都友好的设计,对正常人也有好处

反面教材

<!-- 反面教材:缺乏语义化HTML --> <div> <div>网站logo</div> <div> <div>首页</div> <div>关于我们</div> <div>联系我们</div> </div> </div> <!-- 反面教材:缺少alt标签 --> <img src="logo.png"> <!-- 反面教材:颜色对比不足 --> <div>这段文字很难阅读</div> <!-- 反面教材:键盘无法访问 --> <button onclick="doSomething()">点击我</button> <!-- 反面教材:缺少ARIA属性 --> <div> <div> <h2>弹窗标题</h2> <p>弹窗内容</p> </div> </div> 

正确的做法

<!-- 正确的做法:使用语义化HTML --> <header> <h1>网站logo</h1> <nav> <ul> <li><a href="/">首页</a></li> <li><a href="/about">关于我们</a></li> <li><a href="/contact">联系我们</a></li> </ul> </nav> </header> <!-- 正确的做法:添加alt标签 --> <img src="logo.png" alt="网站logo"> <!-- 正确的做法:足够的颜色对比 --> <div>这段文字很容易阅读</div> <!-- 正确的做法:键盘可访问 --> <button onclick="doSomething()" tabindex="0">点击我</button> <!-- 正确的做法:添加ARIA属性 --> <div role="dialog" aria-labelledby="modal-title" aria-hidden="true"> <div> <h2>弹窗标题</h2> <p>弹窗内容</p> </div> </div> <!-- 正确的做法:使用ARIA live region --> <div aria-live="polite"></div> <script> // 正确的做法:键盘导航 document.addEventListener('keydown', function(e) { if (e.key === 'Tab') { // 确保焦点在可见元素上 document.body.classList.add('keyboard-navigation'); } }); // 正确的做法:跳过导航链接 function createSkipLink() { const skipLink = document.createElement('a'); skipLink.href = '#main-content'; skipLink.className = 'skip-link'; skipLink.textContent = '跳过导航'; document.body.insertBefore(skipLink, document.body.firstChild); } // 正确的做法:表单标签关联 function associateLabels() { const inputs = document.querySelectorAll('input'); inputs.forEach(input => { if (input.id) { const label = document.querySelector(`label[for="${input.id}"]`); if (label) { // 标签和输入框已关联 } } }); } // 正确的做法:动态内容通知 function updateStatus(message) { const statusElement = document.getElementById('status-message'); statusElement.textContent = message; } </script> <style> /* 正确的做法:焦点样式 */ *:focus { outline: 2px solid #0066cc; outline-offset: 2px; } /* 正确的做法:跳过链接样式 */ .skip-link { position: absolute; top: -40px; left: 0; background: #0066cc; color: white; padding: 8px; z-index: 100; } .skip-link:focus { top: 0; } /* 正确的做法:键盘导航样式 */ .keyboard-navigation *:focus { /* 更明显的焦点样式 */ } </style> 

毒舌点评

看看,这才叫前端无障碍性!不是简单地加几个alt标签,而是从语义化HTML、键盘导航、ARIA属性等多个方面入手。

记住,无障碍性不是额外的工作,而是前端开发的基本要求。一个真正优秀的前端开发者,会把无障碍性融入到日常开发中。

所以,别再觉得无障碍性不重要了,它是你作为开发者的责任!

总结

  • 语义化HTML:使用正确的HTML标签,如header、nav、main、section等
  • alt标签:为所有图片添加有意义的alt属性
  • 颜色对比:确保文本和背景的对比度足够高
  • 键盘导航:确保所有功能都可以通过键盘访问
  • ARIA属性:使用ARIA角色和属性增强可访问性
  • 焦点管理:确保焦点在正确的元素上,并有明显的焦点样式
  • 跳过导航:为屏幕阅读器用户提供跳过重复内容的链接
  • 表单标签:确保所有表单元素都有关联的标签
  • 动态内容:使用ARIA live region通知屏幕阅读器动态内容的变化
  • 测试:使用屏幕阅读器和无障碍性测试工具进行测试

无障碍性,让你的网站对所有人都友好!

Read more

天马G前端的使用

天马G前端的使用

1 复古掌机的选择 最近搞了个手柄,正好有一个闲置的小米9,就想着看能不能装一个复古掌机出来。 其实市场上也有很多现成的复古掌机,目前主要是安卓和Linux两种。整体上看安卓的目前占优一点,因为除了大家都能玩的模拟器,安卓平台还能玩安卓的游戏。 项目Android 掌机Linux 掌机 (ArkOS / JELOS / Batocera)启动速度20~40 秒5 秒以内UI一致性❌ 多 app 无统一样式✅ 完整游戏平台风格PS2(AetherSX2)✅ 可玩(Snapdragon / Dimensity / Unisoc)❌ 官方 Linux 版 core 不成熟Switch(Yuzu)✅ 安卓有社区版 Yuzu❌ 完全无解PSP/NDS/GBA etc✅ 但调用 APK,界面割裂✅ 全集成 Core,UI统一云游戏 / Steam Link✅ 完全支持⚠

前端趋势:别被时代抛弃

前端趋势:别被时代抛弃 毒舌时刻 这代码写得跟博物馆似的,都是过时的技术。 各位前端同行,咱们今天聊聊前端趋势。别告诉我你还在使用过时的技术,那感觉就像在 5G 时代还在用 2G 网络——能用,但慢得要命。 为什么你需要关注前端趋势 最近看到一个项目,还在使用 React 16,不知道 React 18 的并发模式。我就想问:你是在做开发还是在做考古? 反面教材 // 反面教材:使用过时技术 // App.jsx import React, { useState, useEffect } from 'react'; function App() { const [data, setData] = useState([]); const [loading, setLoading] = useState(true)

10倍写作效率!AI小白必学:Cursor+Word MCP打造智慧文档生成神器

10倍写作效率!AI小白必学:Cursor+Word MCP打造智慧文档生成神器

序章:文档工具的华丽蜕变 上一篇我介绍如何使用cursor与Excel Mcp组合来自动处理分析excel文档,本文将展示如何借助Cursor与Word MCP的强大组合,让Microsoft Word焕发智慧光芒,开创一个高效、创意与便捷并存的智慧文档处理新时代。我们将从零开始,一步步引导你配置环境、掌握核心功能,并通过实际案例展示这一组合如何彻底改变你的文档处理方式。 传统文档处理与AI赋能的天壤之别 传统文档处理方式往往存在以下痛点: * 反复修改格式,浪费大量时间 * 内容生成缺乏创意和深度 * 缺少智能辅助功能,如自动校对、格式优化 * 无法高效处理大量文档 AI赋能的文档处理则带来: * 自动化格式处理,一键应用专业排版 * 智能内容生成与建议 * 实时语法和拼写检查 * 批量处理和智能分析文档 Word MCP为何成为智慧办公的新宠 Model Context Protocol (MCP)是一个开放标准,允许AI助手与外部工具和服务无缝互动。Office-Word-MCP-Server是一个实现该协议的服务器,专为创建、读取和操作Micro

三种适用于Web版IM(即时通讯)聊天信息的加密算法实现方案

三种适用于Web版IM(即时通讯)聊天信息的加密算法实现方案

文章目录 * **第一部分:引言与核心密码学概念** * **1.1 为什么IM需要端到端加密(E2EE)?** * **1.2 核心密码学概念与工具** * **第二部分:方案一:静态非对称加密(基础方案)** * **2.1 方案概述与流程** * **2.2 前端Vue实现(使用node-forge)** * **1. 安装依赖** * **2. 核心工具类 `crypto.js`** * **3. Vue组件中使用** * **2.3 后端Java实现(Spring Boot)** * **1. 实体类** * **2. Controller层** * **3. WebSocket配置** * **2.4 密钥管理、注册与登录集成** * **1. 用户注册/登录时生成密钥** * **2. 密钥设置页面** * **2.