前端可访问性:别让你的网站对某些人关闭大门

前端可访问性:别让你的网站对某些人关闭大门

毒舌时刻

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

各位前端同行,咱们今天聊聊前端可访问性。别告诉我你还在忽略可访问性,那感觉就像在公共建筑里不建无障碍通道——能进,但不是所有人都能进。

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

最近看到一个项目,按钮没有焦点状态,表单没有标签,屏幕阅读器根本无法正常工作。我就想问:你是在做网站还是在做密室逃脱?

反面教材

// 反面教材:忽略可访问性 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; } 

毒舌点评:这才叫可访问性,让所有人都能平等地使用你的网站。

Read more

LLaMA-Factory安装教程(详细版)

LLaMA-Factory安装教程(详细版)

本机显卡双3090 使用wsl中ubuntu torch==2.6.0 conda==24.5.0 cuda==12.4 python==3.12.4(python安装不做赘述,有需要我会另开一篇文章) 一、准备工作 首先,在 https://developer.nvidia.com/cuda-gpus 查看您的 GPU 是否支持CUDA。 保证当前 Linux 版本支持CUDA. 在命令行中输入  uname -m && cat /etc/*release 输出如下,不一定完全一样,类似即可 检查是否安装了 gcc . 在命令行中输入 gcc --version

Stable Diffusion XL 1.0艺术化落地:灵感画廊镜像免配置部署教程

Stable Diffusion XL 1.0艺术化落地:灵感画廊镜像免配置部署教程 1. 开篇:走进灵感画廊的艺术世界 想象一下,你不需要学习复杂的参数设置,不需要面对冰冷的工业界面,只需要在一个充满艺术气息的空间里,用自然语言描述你的创意想法,就能生成高质量的艺术作品。这就是"灵感画廊"带给你的创作体验。 灵感画廊是基于Stable Diffusion XL 1.0打造的沉浸式艺术创作工具。它把技术复杂性隐藏在优雅的界面背后,让你专注于创意本身。就像走进一个真正的艺术沙龙,这里没有繁琐的操作步骤,只有与AI的自然对话和灵感碰撞。 无论你是专业设计师、艺术爱好者,还是完全不懂技术的创意人士,都能在几分钟内上手使用,开始你的艺术创作之旅。 2. 环境准备与一键部署 2.1 系统要求 在开始之前,请确保你的环境满足以下要求: * 操作系统:Ubuntu 18.04+ 或 CentOS 7+ * GPU:

AI小白也能快速用五分钟复现的ERNIE-4.5系列模型单卡部署与心理健康机器人实战案例

AI小白也能快速用五分钟复现的ERNIE-4.5系列模型单卡部署与心理健康机器人实战案例

* 本文重点在于文心大模型的微调 * 一起来轻松玩转文心大模型吧👉一文心大模型免费下载地址: https://ai.gitcode.com/theme/1939325484087291906 计算机配置 * 在国内部署选个自带CUDA的会快一点,不自带还得去NVIDIA下载,而其提供的CUDA依赖需要科学上网才能下载快。换阿里清华源也没用。 * 文心模型汇总 环境配置与部署 1. 更换镜像源(使用阿里云镜像源): sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak sudo sed -i 's|http://archive.ubuntu.com/ubuntu|http://mirrors.aliyun.com/ubuntu|g' /etc/apt/sources.

MacOS 安装 OpenClaw 并接入飞书机器人(保姆级教程 + 常见问题解决)

MacOS 安装 OpenClaw 并接入飞书机器人(保姆级教程 + 常见问题解决)

MacOS 安装 OpenClaw 并接入飞书机器人(保姆级教程 + 常见问题解决) 在 AI Agent 和自动化工具越来越普及的今天,越来越多开发者希望拥有一个 能够自动处理任务、接入团队协作工具的 AI 助手。 最近OpenClaw火的一塌糊涂,我也跟风研究了一下这个开源项目。它可以理解为一个 可扩展的 AI Agent 框架,支持接入各种工具、自动执行任务,并且可以和企业协作平台(如飞书)打通,实现 AI 自动回复、自动化工作流。 本文将带大家 从 0 开始,在 MacOS 上安装 OpenClaw,并接入飞书机器人。 同时我也整理了自己在安装过程中遇到的 终端报错问题与完整解决方案,让你一次性避坑。 本文包含: * MacOS 安装 OpenClaw * 接入飞书机器人 * 配置开机自启 * 终端报错解决(