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

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

毒舌时刻

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

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

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

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

反面教材

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

9.4k stars!手中就有一整个 AI 团队:agency-agents 深度解析手中就有一整个 AI 团队:agency-agents 深度解析!

9.4k stars!手中就有一整个 AI 团队:agency-agents 深度解析手中就有一整个 AI 团队:agency-agents 深度解析!

手中就有一整个 AI 团队:agency-agents 深度解析 当别人还在反复调试同一个"万能提示词",有人已经在用一支分工明确的 AI 精英团队在干活了。 一、你是不是也有这些痛点? 用 Claude Code 写代码,前一秒在解 Bug,后一秒又要帮你想营销文案,再后一秒还得审查 UI 设计——同一个 AI 上下文频繁切换,结果每件事都做得平平无奇。 通用 AI 的问题在于:它什么都能做,但什么都不够专。 你有没有想过,如果 AI 也能像真实公司一样——前端有前端工程师、设计有 UI 设计师、增长有增长黑客——每个岗位的人用自己深耕多年的方式来工作,结果会有多大不同? agency-agents 就是为了解决这个问题而生的。 二、agency-agents 是什么? agency-agents

OpenClaw厂商全对比:2026主流AI智能体平台深度横评

OpenClaw厂商全对比:2026主流AI智能体平台深度横评

引言:从开源标杆到厂商混战,OpenClaw开启AI行动时代 2026年,AI行业迎来了从“文本对话”到“自主执行”的关键跃迁,OpenClaw凭借开源、可本地部署、支持多模型多平台接入的核心优势,迅速成为AI智能体(AI Agent)领域的标杆项目,短短数月内在GitHub斩获超25万星标,成为全球关注度最高的开源项目之一。OpenClaw本质是一套AI智能体网关,相当于AI员工的操作系统,能打通各类通讯工具、办公软件、本地设备,让AI不再局限于聊天,而是真正完成自动化任务、执行复杂指令、处理长流程工作。 随着OpenClaw爆火,海内外科技厂商纷纷跟进,推出自研版Claw产品,既有坚守开源的原生项目,也有大厂优化的商用版本,还有轻量化、企业级、移动端等差异化产品。市面上OpenClaw衍生产品繁多,普通用户、开发者、企业往往难以分辨差异,盲目选型容易出现门槛过高、成本超标、功能不匹配等问题。 本文精选市面上10款主流OpenClaw厂商产品,覆盖开源原生、大厂商用、轻量化极简、企业级定制四大品类,从核心定位、技术架构、部署难度、

AI大模型实用(三)Java快速实现智能体整理(Springboot+LangChain4j)

目录 1.1 简介 1.2 示例 步骤一: 添加pom 步骤二:配置 步骤三:流式输出 步骤四: 正常输出 步骤五: 【类似函数调用】AI Service接口 1.3 调试问题 问题1: ClassNotFoundException: dev.langchain4j.exception.IllegalConfigurationException 问题2: overriding is disabled 问题3 :dev.langchain4j.exception.IllegalConfigurationException 1.4  langchain4j与springAI对比 1.1 简介 一个基于 Java 的库,旨在简化自然语言处理(NLP)和大型语言模型(LLM)

宏智树AI——ChatGPT学术版驱动,一站式论文写作智能解决方案

宏智树AI——ChatGPT学术版驱动,一站式论文写作智能解决方案

在学术创作日益精细化、规范化的今天,每一位科研学子、研究者都曾面临论文写作的多重困境:大纲难立、文献繁杂、数据难析、格式繁琐,耗费大量时间在机械性工作上,难以聚焦核心研究价值。宏智树AI应运而生,作为一款专为论文写作量身打造的学术写作辅助平台,依托ChatGPT学术版模型驱动,搭载先进AI5.0技术架构,构建起覆盖“大纲生成到定稿答辩”的全流程学术智能解决方案,重新定义学术创作效率与质量边界,让每一份学术成果都能高效落地、彰显专业。 宏智树AI的核心竞争力,源于其深耕学术场景的技术沉淀与功能布局。不同于通用型AI写作工具,平台以ChatGPT学术版为核心驱动,结合AI5.0技术架构的迭代优势,针对学术写作的逻辑特性、规范要求进行千万级学术语料训练,精准适配各学科论文写作范式,实现“智能赋能不越界,专业辅助不缺位”,既保留研究者的核心思考,又高效解决写作中的各类痛点,让学术创作更轻松、更合规、更具深度。 硬核技术底座:ChatGPT学术版+AI5.0,解锁学术智能新高度 技术是学术辅助的核心支撑,宏智树AI以双重技术优势,筑牢学术创作的智能根基。依托ChatGPT学术版模型的强大