关于 web-design-guidelines
web-design-guidelines 是面向开发者的 Web 界面审查指南,涵盖无障碍、性能、响应式设计、组件、CSS、安全和国际化,并规定检查顺序与问题报告格式。
主要功能
- 01无障碍与 ARIA 检查
- 02性能与 Core Web Vitals 指南
- 03响应式设计建议
- 04组件、CSS 与安全规则
- 05分优先级的审查清单
- 06统一的问题报告格式
适用场景
- 01审查 UI 代码中的无障碍问题
- 02检查不同视口下的响应式表现
- 03评估界面性能与加载状态
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ cloudai-x/ claude-workflow-v2 --skill web-design-guidelines安装后在 Claude Code 中输入/web-design-guidelines确认已加载。
详细介绍
Web 界面指南
何时加载
- 触发条件:UI 审核、无障碍检查、响应式设计审查、UX 最佳实践评估
- 跳过:不涉及 UI 组件的纯后端工作
用于审查 Web 界面的独立指南。审核 UI 代码时请遵循这些规则。
输出格式
按以下格式报告问题:file:line — [RULE_ID] description
示例:src/Button.tsx:12 — [A11Y-01] 图标按钮缺少 aria-label
1. 无障碍(A11Y)
A11Y-01:语义化 HTML
- 操作使用
<button>,导航使用<a>,数据输入使用<input> - 交互元素不得使用
<div onClick>或<span onClick> - 地标区域使用
<nav>、<main>、<aside>、<header>、<footer>
A11Y-02:ARIA 标签
- 所有交互元素都需要无障碍名称
- 只有图标的按钮必须设置
aria-label - 表单输入必须关联
<label>或aria-label - 图片需要
alt文本(装饰性图片:alt="")
A11Y-03:键盘导航
- 所有交互元素都必须可通过 Tab 键访问
- 自定义组件需要正确设置
role、tabIndex和按键处理程序 - 焦点必须清晰可见(不得在没有替代方案的情况下设置
outline: none) - 模态框/对话框必须限制焦点范围,并在关闭时将焦点还原
A11Y-04:颜色与对比度
- 文本对比度至少为 4.5:1(大号文本为 3:1)
- 不得仅靠颜色传达含义(应添加图标、文本或图案)
- 确保 UI 在 200% 缩放时仍可使用
A11Y-05:屏幕阅读器
- 动态内容变更需要使用
aria-live区域 - 加载状态需要设置
aria-busy="true" - 错误消息需通过
aria-describedby与输入项关联
2. 性能(PERF)
PERF-01:图像优化
- 使用
next/image或带有srcset的响应式图片 - 指定
width和height,避免布局偏移 - 延迟加载首屏以下的图片:
loading="lazy" - 使用 WebP/AVIF,并提供回退方案
PERF-02:包体积
- 不要使用聚合导入:使用
import Button from 'lib/Button',而不是import { Button } from 'lib'(或启用optimizePackageImports) - 对 CSS 进行树摇:使用 CSS modules 或 Tailwind
content配置(v3)/自动检测(v4) - 延迟加载路由和大型组件:使用
React.lazy()或动态导入
PERF-03:渲染
- 避免布局抖动:不要在循环中先读取再写入 DOM
- 谨慎使用
will-change(仅用于已知动画) - 优先使用 CSS 动画,而不是 JS 动画
- 使用
transform和opacity实现 60fps 动画(仅由合成器处理)
PERF-04:Core Web Vitals
- LCP < 2.5s:优化最大的图片/文本,预加载关键资源
- INP < 200ms:主线程上不得有长任务,延后非关键 JS
- CLS < 0.1:为图片/嵌入内容设置尺寸,首屏上方不得注入内容
3. 响应式设计(RD)
RD-01:移动优先
- 先设置移动端基础样式,再使用
@media (min-width)设置较大屏幕的样式 - 触控目标最小为 44x44px
- 任何视口下都不得出现水平滚动
RD-02:流式布局
- 字体排版使用
rem/em,不要使用px - 使用
clamp()实现流式排版:font-size: clamp(1rem, 2.5vw, 2rem) - 优先使用 Flex/Grid,而不是固定宽度
- 内容最大宽度:为提升可读性,使用
max-width: 65ch
RD-03:断点
- 不要针对设备设置断点,而应针对内容设置断点
- 常用断点:640px(sm)、768px(md)、1024px(lg)、1280px(xl)
- 在 320px、375px、768px、1024px、1440px、1920px 下测试
4. 组件模式(CP)
CP-01:表单
- 在字段旁以内联方式显示验证错误
- 移动键盘使用
type="email"、type="tel"、inputmode="numeric" - 提交过程中禁用提交按钮(防止重复提交)
- 出错时保留表单状态(不要清空字段)
CP-02:加载状态
- 内容区域优先显示骨架屏,而不是加载动画
- 长时间操作应显示进度(进度条优于加载动画)
- 加载期间禁用交互元素
- 在加载容器上设置
aria-busy="true"
CP-03:错误状态
- 始终显示可采取操作的错误消息(提供“重试”按钮,而不只是显示“错误”)
- 不向用户显示技术错误(在内部记录日志,并向用户显示友好消息)
- 为 React 组件树设置错误边界
- 网络故障时启用重试逻辑
CP-04:空状态
- 切勿显示空白页面——提供有帮助的空状态
- 添加行动号召:“目前没有项目。创建你的第一个项目。”
- 谨慎使用插图(它们会增加打包体积)
CP-05:模态框和对话框
- 使用
<dialog>元素或适当的role="dialog" - 将焦点限制在模态框内
- 按 Escape 键或点击背景时关闭
- 关闭时将焦点返回触发元素
- 打开时禁止 body 滚动
5. CSS 实践(CSS)
CSS-01:优先级
- 优先使用类选择器,而非 ID 或元素选择器
- 避免使用
!important(使用优先级或级联层) - 使用 CSS 自定义属性进行主题设置
- 间距方向保持一致:优先使用
margin-bottom,而非margin-top
CSS-02:布局
- 一维布局使用 Flexbox,二维布局使用 Grid
- 避免使用
position: absolute进行布局(仅用于覆盖层) - Flex/Grid 子元素之间使用
gap,而非外边距 - 全高度布局使用
min-height: 100dvh(而非100vh)
CSS-03:深色模式
- 使用
prefers-color-scheme媒体查询 - 将所有颜色定义为 CSS 自定义属性
- 测试两种模式——检查两种模式下的对比度
- 不要只是反转颜色——应专门为深色模式进行设计
6. 安全性(SEC)
SEC-01:内容安全
- 未经消毒处理,切勿使用
dangerouslySetInnerHTML - 渲染前对用户生成的内容进行消毒处理
- 对带有
target="_blank"的外部链接使用rel="noopener noreferrer"
SEC-02:表单和输入
- 所有表单都要启用 CSRF 防护
- 限制表单提交频率
- 同时在客户端和服务器端进行验证
7. 国际化(I18N)
I18N-01:文本
- 不要硬编码字符串——使用 i18n 库或常量
- 支持 RTL 布局:使用
logical properties(使用margin-inline-start,而非margin-left) - 不要截断文本——设计必须能容纳文本长度增加 40%
- 在
<html>标签上使用lang属性
审查清单
审查文件时,按以下顺序检查(先检查 CRITICAL):
- CRITICAL:A11Y-01、A11Y-02、SEC-01——语义化 HTML、ARIA、XSS 防护
- HIGH:PERF-04、A11Y-03、CP-01——核心 Web 指标、键盘操作、表单
- MEDIUM:RD-01、CSS-02、CP-02、CP-03——响应式设计、布局、加载和错误
- LOW:CSS-03、I18N-01、CP-04——深色模式、国际化、空状态
评论
支持 Markdown