构建具备生产级质量、可访问性(Accessible)且响应式(Responsive)的面向用户界面(UI)。适用于以下场景:构建或修改界面与页面、创建组件、实现布局、满足 WCAG 可访问性要求、管理状态,或当输出需要呈现专业、真实、生产就绪(production-quality)的视觉与交互效果,而非典型的 AI 生成风格。
前端 UI 工程
功能概述
前端 UI 工程是一项面向实际任务的技能,主要用于Overview. 构建可访问、 执行和可视化的制作质量用户界面;目标是 UI , 它看起来是由设计意识 e 构建的。
核心要点
- 它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。
- 使用时应结合输入条件选择合适的执行方式,核对必要参数、依赖环境与输出内容,并按原始要求处理异常情况。
- 该技能适合需要稳定复用相关能力的场景,可作为自动化工作流的一部分,也便于后续检查、调整和扩展。
使用与执行
从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;
结果检查与注意事项
若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。
前端 UI 工程
概述
构建具备可访问性、高性能与视觉精致度的生产级用户界面。目标是产出由顶尖公司中具备设计素养的工程师打造的 UI —— 而非由 AI 生成的界面。这意味着需严格遵循设计系统、正确实现无障碍支持、采用深思熟虑的交互模式,并杜绝泛化的“AI 审美”。
适用场景
- 构建新的 UI 组件或页面
- 修改现有面向用户的界面
- 实现响应式布局
- 添加交互逻辑或状态管理
- 修复视觉或用户体验问题
组件架构
文件结构
将组件相关所有内容集中存放:
src/components/
TaskList/
TaskList.tsx # 组件实现
TaskList.test.tsx # 测试文件
TaskList.stories.tsx # Storybook 示例(如使用)
use-task-list.ts # 自定义 Hook(如状态较复杂)
types.ts # 组件专属类型定义(如需要)
组件模式
优先采用组合而非配置:
// 推荐:可组合// 避免:过度配置 Tasks } />
保持组件职责单一:
// 推荐:只做一件事
export function TaskItem({ task, onToggle, onDelete }: TaskItemProps) {
return (
分离数据获取与呈现逻辑:
// 容器组件:负责数据获取
export function TaskListContainer() {
const { tasks, isLoading, error } = useTasks();
if (isLoading) return ;
if (error) return ;
if (tasks.length === 0) return ;
return ;
}
// 呈现组件:负责渲染
export function TaskList({ tasks }: { tasks: Task[] }) {
return (
-
{tasks.map(task =>
状态管理
选择最简单且可行的方案:
本地状态(useState) → 组件专属 UI 状态 提升的状态(Lifted state) → 在 2–3 个兄弟组件间共享 Context → 主题、认证、本地化等(读多写少) URL 状态(searchParams) → 过滤器、分页、可分享的 UI 状态 服务端状态(React Query、SWR) → 带缓存的远程数据 全局状态(Zustand、Redux) → 复杂的、全应用共享的客户端状态
避免 props 下钻超过 3 层。 若需将 props 穿透多个不使用它们的中间组件,请引入 Context 或重构组件树。
设计系统一致性
规避 AI 审美
AI 生成的 UI 具有明显可识别的模式。请全部规避:
| AI 默认样式 | 为何存在问题 | 生产级质量做法 |
|---|---|---|
| 全篇紫色/靛蓝色 | 模型默认采用视觉上“安全”的调色板,导致所有应用外观雷同 | 使用项目实际定义的配色方案 |
| 过度使用渐变 | 渐变增加视觉噪声,且常与多数设计系统冲突 | 使用扁平色或与设计系统一致的细微渐变 |
| 全元素圆角(rounded-2xl) | 最大圆角暗示“友好”,但忽略了真实设计中角半径的层级关系 | 统一使用设计系统规定的 border-radius |
| 模板化英雄区(hero section) | 套用布局模板,脱离实际内容与用户需求 | 以内容为先的布局方式 |
| 占位符文案(Lorem ipsum) | 占位文本掩盖了真实内容暴露的问题(长度、换行、溢出) | 使用贴近真实的占位内容 |
| 全局过大内边距 | 均等的大内边距破坏视觉层级并浪费屏幕空间 | 统一使用设计系统定义的间距比例 |
| 通用卡片网格 | 均质化网格是偷懒式布局,忽略信息优先级与用户浏览习惯 | 以目标为导向的布局方式 |
| 阴影过重 | 多层阴影增加内容竞争感,且在低端设备上拖慢渲染性能 | 仅在设计系统明确要求时使用细微或无阴影 |
间距与布局
使用一致的间距比例。禁止随意发明数值:
/* 使用既定比例:例如 0.25rem 增量(或项目所采用的比例) */ /* 推荐 */ padding: 1rem; /* 16px */ /* 推荐 */ gap: 0.75rem; /* 12px */ /* 不推荐 */ padding: 13px; /* 不属于任何标准比例 */ /* 不推荐 */ margin-top: 2.3rem; /* 不属于任何标准比例 */
排版
尊重层级结构:
h1 → 页面标题(每页一个) h2 → 区块标题 h3 → 子区块标题 body → 正文默认文字 small → 次要/辅助文字
不可跳过标题层级。不可将标题样式用于非标题内容。
颜色
- 使用语义化颜色 Token:
text-primary、bg-surface、border-default—— 禁止直接使用十六进制值 - 确保足够对比度(正文文字 ≥ 4.5:1;大号文字 ≥ 3:1)
- 不可仅依赖颜色传达信息(需同步使用图标、文字或图案)
无障碍支持(WCAG 2.1 AA)
每个组件必须满足以下标准:
键盘导航
// 所有可交互元素必须支持键盘访问
// ✓ 默认可聚焦
Click me // ✗ 不可聚焦
onKeyDown={e => {
if (e.key === 'Enter') handleClick();
if (e.key === ' ') e.preventDefault();
}}
onKeyUp={e => {
if (e.key === ' ') handleClick();
}}>
Click me
ARIA 标签
// 为缺少可见文本的可交互元素添加标签 // 为表单输入项添加 label // 或在无可见 label 时使用 aria-label
焦点管理
// 内容变更时主动移动焦点
function Dialog({ isOpen, onClose }: DialogProps) {
const closeRef = useRef(null);
useEffect(() => {
if (isOpen) closeRef.current?.focus();
}, [isOpen]);
// 对话框打开时限制焦点范围
return (
);
}
有意义的空状态与错误状态
// 禁止显示空白界面
function TaskList({ tasks }: { tasks: Task[] }) {
if (tasks.length === 0) {
return (
No tasks
Get started by creating a new task.
);
}
return - ...
响应式设计
采用移动优先策略,再逐步扩展:
// Tailwind:移动优先响应式需在以下断点进行测试:320px、768px、1024px、1440px。
加载与过渡效果
// 骨架屏加载(非旋转动画用于内容区域) function TaskListSkeleton() { return ({Array.from({ length: 3 }).map((_, i) => ( ))}); } // 乐观更新以提升感知速度 function useToggleTask() { const queryClient = useQueryClient(); return useMutation({ mutationFn: toggleTask, onMutate: async (taskId) => { await queryClient.cancelQueries({ queryKey: ['tasks'] }); const previous = queryClient.getQueryData(['tasks']); queryClient.setQueryData(['tasks'], (old: Task[]) => old.map(t => t.id === taskId ? { ...t, done: !t.done } : t) ); return { previous }; }, onError: (_err, _taskId, context) => { queryClient.setQueryData(['tasks'], context?.previous); }, }); }参阅
关于详细的无障碍要求及测试工具,请查阅
references/accessibility-checklist.md。常见借口
借口 事实 “无障碍只是锦上添花” 在许多司法管辖区属法律强制要求,亦是工程品质基准。 “我们稍后再做响应式” 后期补救响应式设计的难度是初始构建的 3 倍。 “设计稿尚未定稿,所以暂不加样式” 应使用设计系统默认值。无样式 UI 会给评审者留下严重缺陷的第一印象。 “这只是个原型” 原型极易演变为生产代码。务必从一开始就打好基础。 “AI 审美暂时可以接受” 这会传递低质量信号。请自始即采用项目真实的设计系统。 危险信号
- 单个组件超过 200 行(应拆分)
- 内联样式或任意像素值
- 缺失加载态、错误态或空态
- 未进行键盘导航测试
- 仅靠颜色表示状态(如红/绿色而无文字或图标)
- 泛化“AI 风格”(紫色渐变、超大卡片、模板化布局)
验证清单
完成 UI 开发后,请检查:
- 组件渲染无控制台报错
- 所有可交互元素支持键盘访问(Tab 键遍历页面)
- 屏幕阅读器可准确传达页面内容与结构
- 响应式适配:在 320px、768px、1024px、1440px 断点下均正常工作
- 加载态、错误态、空态均已覆盖
- 符合项目设计系统(间距、颜色、排版)
- 开发者工具或 axe-core 中无无障碍警告
热门AI工具
相关专题
本专题聚焦Go-Zero的API开发,拆解.api描述文件的语法结构、路由与分组定义、参数绑定与校验规则,说明统一响应体、JWT鉴权、跨域与接口文档生成的落地方式,并给出网关聚合与接口测试的实践建议。
0
2026.11.12
本专题围绕Go-Zero的安装与工具链配置展开,讲清Go版本要求、goctl安装方式、代理镜像、protoc依赖与环境变量设置,说明多版本共存、升级回退与CI流水线安装的做法,并整理安装阶段的常见报错与验证步骤。
0
2026.11.12
本专题整理Go-Zero的入门知识,从框架定位、环境准备到跑通第一个API服务,讲清目录分层、配置加载、日志与中间件的基本用法,并对比Gin、Kratos的差异,帮助Go开发者建立整体认知,判断它是否适合当前项目。
0
2026.11.12
本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。
0
2026.11.06
围绕Postman HTTP请求头配置展开,讲解Headers选项的具体使用方式,包括Key和Value参数填写、请求头信息添加、常见Header字段设置及请求头修改方法,帮助用户解决接口调试过程中遇到的请求头配置问题。
0
2026.11.06
详细介绍Postman接口请求的创建与发送方法,涵盖GET和POST请求、URL配置、请求参数、Headers请求头、Body请求体设置以及响应结果查看,帮助用户掌握Postman接口请求的完整操作流程。
0
2026.11.06
DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。
0
2026.11.05
DBeaver安全防护专题,围绕数据库连接安全、账号密码保护和访问权限管理展开,整理SSL/TLS加密连接、SSH隧道、数据库凭据保存及证书验证等配置方法,同时介绍敏感信息保护、远程连接风险和高权限账号使用等注意事项,帮助用户提高数据库日常管理的安全性。
0
2026.11.05
本专题聚焦DBeaver数据库连接配置与管理,覆盖从新建连接、选择数据库类型到填写连接参数和验证连接的完整流程。针对MySQL、PostgreSQL、SQL Server等常见数据库,整理相应的连接设置方法,并提供驱动缺失、认证失败和连接异常等问题的排查方向。
0
2026.11.04
热门下载
相关下载
精品课程
最新文章