跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
HTML / CSS大前端

前端可访问性开发指南

探讨前端可访问性的重要性及实现方案。指出忽略可访问性如同在公共建筑不设无障碍通道。通过对比反面教材(无焦点、无标签)与正确实践(语义化 HTML、ARIA 标签、键盘导航、颜色对比度),阐述了如何构建包容性网站,确保所有用户包括残障人士能平等使用。强调开发者应遵循标准,提升用户体验。

战神发布于 2026/4/5更新于 2026/10/26113 浏览

前端可访问性开发指南

引言

这网站做的跟迷宫似的,正常人都找不到路,更别说有障碍的人了。

各位前端开发者,今天聊聊前端可访问性。别忽略可访问性,那感觉就像在公共建筑里不建无障碍通道——能进,但不是所有人都能进。

为什么你需要关注可访问性

最近看到一个项目,按钮没有焦点状态,表单没有标签,屏幕阅读器根本无法正常工作。这会让网站变成难以使用的迷宫。

反面教材

// 反面教材:忽略可访问性
function App() {
  return (
    <div>
      <h1>我的网站</h1>
      <div>
        <input type="text" placeholder="用户名" />
        <input type="password" placeholder="密码" />
        <button>登录</button>
      </div>
      <div>
        <img src="logo.png" />
        <a href="#">关于我们</a>
        <a href="#">联系我们</a>
      </>
    
  );
}
  ;
div
</div>
export
default
App

代码分析:这段代码缺乏必要的结构支持,屏幕阅读器无法识别输入框和按钮的用途。

正确姿势

1. 语义化 HTML

// 正确姿势:语义化 HTML
function App() {
  return (
    <div>
      <header>
        <h1>我的网站</h1>
      </header>
      <main>
        <form>
          <div>
            <label htmlFor="username">用户名</label>
            <input type="text" aria-label="用户名" />
          </div>
          <div>
            <label htmlFor="password">密码</label>
            <input type="password" aria-label="密码" />
          </div>
          <button type="submit" aria-label="登录">登录</button>
        </form>
      </main>
      <footer>
        <img src="logo.png" alt="网站 logo" />
        <nav>
          <ul>
            <li><a href="#">关于我们</a></li>
            <li><a href="#">联系我们</a></li>
          </ul>
        </nav>
      </footer>
    </div>
  );
}
export default App;

2. ARIA 标签

// 正确姿势:使用 ARIA 标签
function App() {
  const [expanded, setExpanded] = React.useState(false);
  return (
    <div>
      <button aria-expanded={expanded} aria-controls="menu" onClick={() => setExpanded(!expanded)}>
        菜单
      </button>
      <nav aria-hidden={!expanded}>
        <ul>
          <li><a href="#">首页</a></li>
          <li><a href="#">关于我们</a></li>
          <li><a href="#">联系我们</a></li>
        </ul>
      </nav>
    </div>
  );
}
export default App;

3. 键盘导航

// 正确姿势:键盘导航
function App() {
  const [focused, setFocused] = React.useState(0);
  const items = ['首页', '关于我们', '联系我们', '服务'];
  const handleKeyDown = (e) => {
    if (e.key === 'ArrowRight') {
      setFocused((prev) => (prev + 1) % items.length);
    } else if (e.key === 'ArrowLeft') {
      setFocused((prev) => (prev - 1 + items.length) % items.length);
    }
  };
  return (
    <nav onKeyDown={handleKeyDown} tabIndex={0}>
      <ul>
        {items.map((item, index) => (
          <li key={index}>
            <a href="#" tabIndex={-1} style={{ outline: index === focused ? '2px solid blue' : 'none', backgroundColor: index === focused ? '#e0e0e0' : 'transparent' }} onClick={() => setFocused(index)}>
              {item}
            </a>
          </li>
        ))}
      </ul>
    </nav>
  );
}
export default App;

4. 颜色对比度

/* 正确姿势:颜色对比度 */
/* styles.css */
body {
  color: #333333; /* 深色文本 */
  background-color: #ffffff; /* 浅色背景 */
}
a {
  color: #0066cc; /* 蓝色链接,对比度高 */
  text-decoration: none;
}
a:hover {
  color: #004499;
  text-decoration: underline;
}
button {
  background-color: #0066cc;
  color: #ffffff;
  border: none;
  padding: 10px 20px;
  border-radius: 4px;
  cursor: pointer;
}
button:hover {
  background-color: #004499;
}

总结:这才是符合标准的可访问性实现,让所有人都能平等地使用你的网站。

目录

  1. 前端可访问性开发指南
  2. 引言
  3. 为什么你需要关注可访问性
  4. 反面教材
  5. 正确姿势
  6. 1. 语义化 HTML
  7. 2. ARIA 标签
  8. 3. 键盘导航
  9. 4. 颜色对比度

更多推荐文章

查看全部
  • LLaMA 大模型微调实践与 LoRA 调优经验
  • 1Panel 上手实录:安装、配置与常用运维操作
  • llama.cpp 本地大模型部署教程
  • VR 音游音符轨道系统开发实录与原理解析
  • GitHub Copilot:Python 开发者的 AI 编程助手
  • ChatGPT 降低 AIGC 率的指令策略与最佳实践
  • Google Stitch 工具简介、安装与实战案例
  • 前端如何设计可信的 AI 产品体验
  • LeetCode 2612 最少翻转次数:BFS 与有序集合的解法
  • HarmonyOS 6.0 Network Kit 深度解析:TLS 国密证书支持
  • Python 2026 年发展局势:AI 时代的通用基础设施语言
  • Graph RAG 框架设计与创新解读
  • 大模型常见面试题汇总与答案解析
  • Vitis 实现 AI 模型 FPGA 部署实战教程
  • C++ 类和对象:拷贝构造与赋值运算符重载详解
  • Python 爬虫实战:链家二手房数据抓取与分析
  • 使用 Ollama 与 AnythingLLM 搭建本地 AI 知识库指南
  • Windows 10 系统部署 Stable Diffusion WebUI 指南
  • Flood Fill 算法详解:图像渲染与岛屿问题
  • Python 安全信息收集工具:域名查询与解析实战

相关免费在线工具

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online

  • JSON美化和格式化

    将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online