Web 无障碍开发入门指南
什么是 Web 无障碍?
Web 无障碍(Accessibility,简称 a11y)确保所有人都能使用你的网站,包括残障人士。
核心原则
1. 语义化 HTML
<!-- ❌ 不好的做法 -->
<div class="button" onclick="submit()">提交</div>
<!-- ✅ 好的做法 -->
<button type="submit">提交</button>
2. 正确的标题层级
<!-- ✅ 正确的标题层级 -->
<h1>网站标题</h1>
<h2>主要内容区域</h2>
<h3>子区域标题</h3>
<h2>侧边栏</h2>
3. 图片 Alt 文本
<!-- 装饰性图片 -->
<img src="decoration.jpg" alt="" role="presentation" />
<!-- 信息性图片 -->
<img src="chart.png" alt="2024年各季度销售额柱状图" />
ARIA 属性
<button
aria-expanded="false"
aria-controls="menu"
aria-label="打开导航菜单"
onClick="toggleMenu()"
>
<span class="hamburger-icon"></span>
</button>
<nav id="menu" role="navigation" aria-hidden="true">
<!-- 菜单内容 -->
</nav>
键盘导航
function Dropdown() {
const [isOpen, setIsOpen] = useState(false);
const handleKeyDown = (e: React.KeyboardEvent) => {
switch (e.key) {
case 'Escape':
setIsOpen(false);
break;
case 'ArrowDown':
// 移动到下一个选项
break;
}
};
return (
<div onKeyDown={handleKeyDown}>
{/* 下拉菜单 */}
</div>
);
}
检测工具
- axe DevTools:浏览器扩展
- Lighthouse:自动审计
- 屏幕阅读器:NVDA, VoiceOver
总结
无障碍不是可选功能,而是每个开发者的责任。从今天开始,让我们的 Web 更加包容。