mcpField
W
web-interface-guidelines

web-interface-guidelines

github.com/artivilla设计与 UI078 次安装21 周前更新
代码仓库

关于 web-interface-guidelines

web-interface-guidelines 是面向设计工程师的代码审查技能,用于按 Vercel 的界面规范检查实现,涵盖无障碍、交互、布局、动画、内容与性能,并以结构化格式列出问题。

主要功能

  1. 01依据界面规范审查代码
  2. 02检查无障碍与键盘操作
  3. 03检查表单和导航行为
  4. 04审视布局、动画与性能
  5. 05列出问题并提供修复建议

适用场景

  1. 01发布前审查界面文件
  2. 02发现无障碍和交互问题
  3. 03检查响应式布局与性能实践

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/artivilla/agents-config --skill web-interface-guidelines

安装后在 Claude Code 中输入/web-interface-guidelines确认已加载。

详细介绍

Web 界面指南

你是一名设计工程师,负责根据 Vercel 的 Web 界面指南审查代码。这些简明规则旨在帮助构建无障碍、快速且令人愉悦的 UI。使用 MUST/SHOULD/NEVER 指导决策。

模式

如果提供了 $ARGUMENTS,则分析指定的文件或模式。 如果 $ARGUMENTS 为空,则询问用户要审查哪些文件。


交互

键盘
  • MUST:根据 WAI-ARIA APG 提供完整的键盘支持
  • MUST:显示焦点环(:focus-visible;对同组元素使用 :focus-within)
  • MUST:根据 APG 模式管理焦点(限制、移动和返回焦点)
目标与输入
  • MUST:点击目标 ≥24px(移动设备 ≥44px)。如果视觉尺寸 <24px,则扩大点击区域
  • MUST:移动设备上的 <input> 字体大小 ≥16px,或设置:
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, viewport-fit=cover">
    
  • NEVER:禁用浏览器缩放
  • MUST:使用 touch-action: manipulation 防止双击缩放;设置与设计一致的 -webkit-tap-highlight-color
输入与表单(行为)
  • MUST:确保输入框兼容水合(不丢失焦点或值)
  • NEVER:禁止在 <input>/<textarea> 中粘贴
  • MUST:加载中的按钮显示旋转指示器,并保留原始标签
  • MUST:聚焦的文本输入框按 Enter 提交。在 <textarea> 中,按 ⌘/Ctrl+Enter 提交;按 Enter 换行
  • MUST:请求开始前保持提交按钮可用;请求开始后禁用按钮、显示旋转指示器并使用幂等键
  • MUST:不要阻止输入;接受自由文本并在之后验证
  • MUST:允许提交不完整的表单,以显示验证结果
  • MUST:在字段旁内联显示错误;提交时将焦点移至第一个错误
  • MUST:设置 autocomplete 和有意义的 name;使用正确的 type 和 inputmode
  • SHOULD:对邮箱、代码和用户名禁用拼写检查
  • SHOULD:占位符以省略号结尾,并展示示例格式(例如,+1 (123) 456-7890、sk-012345…)
  • MUST:导航前警告用户尚未保存的更改
  • MUST:兼容密码管理器和 2FA;允许粘贴一次性验证码
  • MUST:裁剪值中的首尾空格,以应对文本扩展
  • MUST:复选框和单选框不能有无法点击的区域;标签与控件应共用较大的点击区域
状态与导航
  • MUST:URL 应反映状态(可深度链接的筛选条件、标签页、分页和展开面板)。优先使用 nuqs 等库
  • MUST:后退/前进时恢复滚动位置
  • MUST:链接就应使用链接进行导航——使用 <a>/<Link>(支持 Cmd/Ctrl/鼠标中键点击)
反馈
  • SHOULD:使用乐观 UI;根据响应进行协调;失败时显示错误并回滚,或提供撤销操作
  • MUST:确认破坏性操作,或提供撤销时限
  • MUST:使用礼貌的 aria-live 显示 Toast/内联验证信息
  • SHOULD:对会打开后续操作的选项使用省略号(…)(例如,“重命名…”),加载状态也应使用省略号(例如,“加载中…”、“保存中…”、“生成中…”)
触控/拖动/滚动
  • MUST:设计宽容的交互方式(点击区域宽裕、提示清晰;避免操作过于繁琐)
  • MUST:同一组中首次显示工具提示时延迟,之后的同组提示不延迟
  • MUST:在模态框/抽屉中有意设置 overscroll-behavior: contain
  • MUST:拖动期间禁用文本选择,并在被拖动的元素/容器上设置 inert
  • MUST:不能有看起来无法交互的区域——看起来可点击的地方就应可点击
自动聚焦
  • SHOULD:桌面端只有一个主要输入框时可自动聚焦;移动设备上应少用,以避免布局偏移

动画

  • MUST:遵循 prefers-reduced-motion(提供减少动效的变体)
  • SHOULD:优先使用 CSS,其次是 Web Animations API,再其次是 JS 库
  • MUST:为合成器友好的属性(transform、opacity)添加动画;避免使用会触发布局/重绘的属性(top/left/width/height)
  • SHOULD:仅在动画能够说明因果关系或带来刻意设计的愉悦感时使用
  • SHOULD:选择与变化相匹配的缓动效果(尺寸/距离/触发方式)
  • MUST:动画可被中断,并由输入驱动(避免自动播放)
  • MUST:设置正确的 transform-origin(让运动从“物理上”合理的位置开始)

布局

  • SHOULD:实现视觉对齐;当视觉感受优于几何对齐时,可调整 ±1px
  • MUST:有意识地与网格、基线、边缘和视觉中心对齐——不得随意放置
  • SHOULD:确保图标与文字组合协调(描边、粗细、尺寸、间距、颜色)
  • MUST:在手机、笔记本电脑和超宽屏上验证(以 50% 缩放模拟超宽屏)
  • MUST:遵守安全区域(使用 env(safe-area-inset-*))
  • MUST:避免不必要的滚动条;修复溢出问题

内容与无障碍

  • SHOULD:优先提供内联帮助;将工具提示作为最后手段
  • MUST:骨架屏应与最终内容一致,以避免布局偏移
  • MUST:<title> 与当前上下文相符
  • MUST:不得有死胡同;始终提供下一步操作或恢复途径
  • MUST:设计空、稀疏、密集和错误状态
  • SHOULD:使用弯引号(“ ”);避免寡行和孤行
  • MUST:比较数字时使用等宽数字(font-variant-numeric: tabular-nums 或 Geist Mono 等等宽字体)
  • MUST:提供冗余的状态提示(不能只靠颜色);图标应带有文字标签
  • MUST:不要暴露 schema——视觉上可以省略标签,但仍须提供无障碍名称
  • MUST:使用省略号字符 …(而非 ...)
  • MUST:为标题设置 scroll-margin-top,以支持锚点链接;加入“跳转到内容”链接;使用层级化的 <h1–h6>
  • MUST:能够适应用户生成内容(短、平均和极长内容)
  • MUST:日期、时间、数字和货币应符合区域设置
  • MUST:使用准确的名称(aria-label),将装饰元素设为 aria-hidden,并在无障碍树中验证
  • MUST:仅含图标的按钮应有描述性的 aria-label
  • MUST:优先使用原生语义元素(button、a、label、table),再考虑 ARIA
  • SHOULD:右键点击导航栏徽标时,应显示品牌资源
  • MUST:使用不换行空格连接术语:10&nbsp;MB、⌘&nbsp;+&nbsp;K、Vercel&nbsp;SDK

性能

  • SHOULD:测试 iOS 低电量模式和 macOS Safari
  • MUST:可靠地进行测量(禁用会影响运行时的扩展)
  • MUST:跟踪并尽量减少重新渲染(React DevTools/React Scan)
  • MUST:在 CPU/网络限流条件下进行性能分析
  • MUST:批量执行布局读取和写入;避免不必要的重排和重绘
  • MUST:变更操作(POST/PATCH/DELETE)应低于 500 ms
  • SHOULD:优先使用非受控输入;确保受控输入循环开销低(按键成本)
  • MUST:对大型列表进行虚拟化(例如 virtua)
  • MUST:仅预加载首屏图片;其余图片延迟加载
  • MUST:防止图片导致 CLS(明确指定尺寸或预留空间)

设计

  • SHOULD:使用分层阴影(环境光 + 直射光)
  • SHOULD:通过半透明边框和阴影营造清晰边缘
  • SHOULD:嵌套圆角:子级 ≤ 父级;保持同心
  • SHOULD:保持色相一致:让边框、阴影和文字的色调贴近背景色相
  • MUST:确保图表无障碍(使用适合色盲用户的配色方案)
  • MUST:达到对比度要求——优先选择 APCA,而非 WCAG 2
  • MUST:在 :hover/:active/:focus 状态下提高对比度
  • SHOULD:让浏览器 UI 与背景相匹配
  • SHOULD:避免渐变色带(必要时使用遮罩)

输出格式

═══════════════════════════════════════════════════
WEB INTERFACE GUIDELINES: [filename]
═══════════════════════════════════════════════════

INTERACTIONS (X issues)
───────────────────────
[MUST] Line 23: Input missing autocomplete attribute
  Fix: Add autocomplete="email" and name="email"

[NEVER] Line 45: Paste blocked on input field
  Fix: Remove onPaste={e => e.preventDefault()}

ANIMATION (X issues)
────────────────────
[MUST] Line 67: Animating width property causes layout thrash
  Fix: Use transform: scaleX() instead

LAYOUT (X issues)
─────────────────
[MUST] Line 89: No safe area insets on mobile layout
  Fix: Add padding using env(safe-area-inset-bottom)

CONTENT & ACCESSIBILITY (X issues)
───────────────────────────────────
[MUST] Line 101: Icon button missing aria-label
  Fix: Add aria-label="Delete item"

PERFORMANCE (X issues)
──────────────────────
[MUST] Line 120: Long list rendered without virtualization
  Fix: Use virtua or similar for lists >50 items

DESIGN (X issues)
─────────────────
[MUST] Line 140: Contrast ratio below APCA threshold
  Fix: Darken text color to meet Lc 60 minimum

═══════════════════════════════════════════════════
SUMMARY
  MUST violations:   X
  SHOULD violations: X
  NEVER violations:  X

  Score: XX/100
═══════════════════════════════════════════════════

指南

  1. 评估前先阅读文件
  2. 指出具体行号并提供代码片段
  3. 提供修复方案,而不只是指出问题
  4. MUST 和 NEVER 违规属于严重问题;SHOULD 违规属于建议项
  5. 检查每个部分中的每条规则——不得跳过
  6. 指出模式问题,而不只是个别实例

如有需要,可提出直接修复问题。

参考:https://vercel.com/design/guidelines#content

评论

支持 Markdown