网页界面审查技能Skill web-design-guidelines

这个技能用于自动审查用户界面代码,确保其符合网页界面最佳实践,涵盖可访问性、焦点状态、表单、动画、性能、排版等多个方面,帮助前端开发者提升代码质量和用户体验。关键词:UI审查、前端开发、可访问性、性能优化、代码审计、网页设计、用户体验。

前端开发 0 次安装 0 次浏览 更新于 3/20/2026

名称: 网页设计指南 描述: 审查UI代码以符合网页界面指南。当被要求“审查我的UI”、“检查可访问性”、“审核设计”、“审查UX”或“检查我的网站是否符合最佳实践”时使用。 元数据: 作者: vercel 版本: “1.0.0”

网页界面指南

审查文件以确保符合网页界面指南。

工作原理

  1. 从以下源URL获取最新指南
  2. 读取指定文件(或提示用户提供文件/模式)
  3. 对照获取的指南中的所有规则进行检查
  4. 以简洁的文件:行格式输出发现

使用方式

当用户提供文件或模式参数时:

  1. 从上述源URL获取指南
  2. 读取指定文件
  3. 应用获取的指南中的所有规则
  4. 使用指南中指定的格式输出发现

如果未指定文件,询问用户要审查哪些文件。

核心指南

审查这些文件以符合:$ARGUMENTS

读取文件,对照以下规则检查。输出简洁但全面——牺牲语法以求简洁。高信噪比。

规则

可访问性

  • 仅图标按钮需要aria-label
  • 表单控件需要<label>aria-label
  • 交互元素需要键盘处理程序(onKeyDown/onKeyUp
  • 动作使用<button>,导航使用<a>/<Link>(而不是<div onClick>
  • 图像需要alt(或如果装饰性则alt=""
  • 装饰性图标需要aria-hidden="true"
  • 异步更新(如toasts、验证)需要aria-live="polite"
  • 使用语义HTML(<button><a><label><table>)而非ARIA
  • 标题层级<h1><h6>;为主内容包含跳过链接
  • 标题锚点上使用scroll-margin-top

焦点状态

  • 交互元素需要可见焦点:focus-visible:ring-*或等效
  • 永远不要使用outline-none / outline: none而没有焦点替代
  • 使用:focus-visible而非:focus(避免点击时的焦点环)
  • 复合控件使用:focus-within分组焦点

表单

  • 输入框需要autocomplete和有意义的name
  • 使用正确的typeemailtelurlnumber)和inputmode
  • 永远不要阻止粘贴(onPaste + preventDefault
  • 标签可点击(htmlFor或包裹控件)
  • 在电子邮件、代码、用户名上禁用拼写检查(spellCheck={false}
  • 复选框/单选按钮:标签+控件共享单个点击目标(无死区)
  • 提交按钮在请求开始前保持启用;请求期间显示旋转器
  • 错误信息内联在字段旁;提交时聚焦第一个错误
  • 占位符以结尾并显示示例模式
  • 非认证字段上使用autocomplete="off"以避免密码管理器触发
  • 导航前警告未保存更改(beforeunload或路由守卫)

动画

  • 尊重prefers-reduced-motion(提供减少变体或禁用)
  • 仅动画transform/opacity(合成器友好)
  • 永远不要使用transition: all——明确列出属性
  • 设置正确的transform-origin
  • SVG:在<g>包装器上使用变换,设置transform-box: fill-box; transform-origin: center
  • 动画可中断——在动画中响应用户输入

排版

  • 使用而非...
  • 使用花引号" "而非直引号"
  • 不间断空格:10 MB⌘ K、品牌名称
  • 加载状态以结尾:"加载中…""保存中…"
  • 数字列/比较使用font-variant-numeric: tabular-nums
  • 标题上使用text-wrap: balancetext-pretty(防止孤行)

内容处理

  • 文本容器处理长内容:truncateline-clamp-*break-words
  • Flex子项需要min-w-0以允许文本截断
  • 处理空状态——不为空字符串/数组渲染破损UI
  • 用户生成内容:预期短、平均和非常长的输入

图像

  • <img>需要显式的widthheight(防止CLS)
  • 折叠下图像:loading="lazy"
  • 折叠上关键图像:priorityfetchpriority="high"

性能

  • 大列表(>50项):虚拟化(virtuacontent-visibility: auto
  • 渲染中无布局读取(getBoundingClientRectoffsetHeightoffsetWidthscrollTop
  • 批处理DOM读取/写入;避免交错
  • 首选非受控输入;受控输入必须每次击键廉价
  • 为CDN/资产域添加<link rel="preconnect">
  • 关键字体:<link rel="preload" as="font">配合font-display: swap

导航与状态

  • URL反映状态——过滤器、标签、分页、扩展面板在查询参数中
  • 链接使用<a>/<Link>(支持Cmd/Ctrl+点击、中键点击)
  • 深度链接所有有状态UI(如果使用useState,考虑通过nuqs或类似同步URL)
  • 破坏性操作需要确认模态或撤销窗口——从不立即执行

触摸与交互

  • touch-action: manipulation(防止双击缩放延迟)
  • 有意识设置-webkit-tap-highlight-color
  • 模态/抽屉/侧边栏中使用overscroll-behavior: contain
  • 拖拽期间:禁用文本选择,设置inert于被拖拽元素
  • 谨慎使用autoFocus——仅桌面,单一主要输入;避免移动端

安全区域与布局

  • 全出血布局需要env(safe-area-inset-*)以应对缺口
  • 避免不需要的滚动条:容器上使用overflow-x-hidden,修复内容溢出
  • 使用flex/grid而非JS测量进行布局

深色模式与主题

  • 深色主题中<html>上使用color-scheme: dark(修复滚动条、输入框)
  • <meta name="theme-color">匹配页面背景
  • 原生<select>:显式设置background-colorcolor(Windows深色模式)

本地化与国际化

  • 日期/时间:使用Intl.DateTimeFormat而非硬编码格式
  • 数字/货币:使用Intl.NumberFormat而非硬编码格式
  • 通过Accept-Language / navigator.languages检测语言,而非IP

水合安全

  • 带有value的输入框需要onChange(或使用defaultValue用于非受控)
  • 日期/时间渲染:防止水合不匹配(服务器 vs 客户端)
  • 仅在真正需要时使用suppressHydrationWarning

悬停与交互状态

  • 按钮/链接需要hover:状态(视觉反馈)
  • 交互状态增加对比度:悬停/激活/焦点比其余更突出

内容与文案

  • 主动语态:“安装CLI”而非“CLI将被安装”
  • 标题/按钮使用标题大小写(芝加哥风格)
  • 计数使用数字:“8个部署”而非“八个”
  • 具体按钮标签:“保存API密钥”而非“继续”
  • 错误消息包括修复/下一步,不仅仅是问题
  • 第二人称;避免第一人称
  • 空间受限时使用&而非“and”

反模式(标记这些)

  • user-scalable=nomaximum-scale=1禁用缩放
  • onPaste配合preventDefault
  • transition: all
  • outline-none而没有焦点可见替代
  • 内联onClick导航而没有<a>
  • 带有点击处理程序的<div><span>(应为<button>
  • 图像没有尺寸
  • 大数组.map()而没有虚拟化
  • 表单输入没有标签
  • 图标按钮没有aria-label
  • 硬编码日期/数字格式(使用Intl.*
  • autoFocus没有明确理由

输出格式

按文件分组。使用文件:行格式(VS Code可点击)。简洁发现。

## src/Button.tsx

src/Button.tsx:42 - 图标按钮缺少aria-label
src/Button.tsx:18 - 输入框缺少标签
src/Button.tsx:55 - 动画缺少prefers-reduced-motion
src/Button.tsx:67 - transition: all → 列出属性

## src/Modal.tsx

src/Modal.tsx:12 - 缺少overscroll-behavior: contain
src/Modal.tsx:34 - "..." → "…"

## src/Card.tsx

✓ 通过

陈述问题 + 位置。除非修复不明显,否则跳过解释。无前言。