anthropic-frontend-ui-engineering
组件架构、设计系统、状态管理、响应式、WCAG 2.1 AA 无障碍。
评分明细
适用场景
anthropic-frontend-ui-engineering 快速入门
让 AI 写前端时,顺手就把组件拆分、响应式、无障碍这些”工程活”一起干完。
这是什么?解决什么问题?
anthropic-frontend-ui-engineering 是 Anthropic 在 anthropics/skills 仓库下提供的一个偏”前端工程化”的 Skill。它的目标是:当你让 AI 写一个页面、一个组件、一组表单时,AI 不再只返回”能跑”的代码,而是同时把工程化最佳实践考虑进去,包括:
- 组件架构:容器组件 vs 展示组件、组件粒度拆分、props 接口设计。
- 设计系统:Design Token、主题、配色、间距、字体规范。
- 状态管理:本地 state vs 全局 store、context 滥用、re-render 优化。
- 响应式:移动优先、媒体查询断点、container queries、Clamp 流体排版。
- WCAG 2.1 AA:键盘可达性、焦点环、ARIA 属性、对比度、可读性。
这个 Skill 解决的问题,是大多数 AI 写前端时的一个”原罪”:它能写出一个看起来不错的 hero 页面,但代码里全是 inline style、没有 keyboard 导航、暗色模式一片黑,放到真实项目里就是一堆技术债。
它适合的场景:用 AI 加速中后台项目搭建、设计系统从 0 到 1 落地、Code Review 时希望 AI 主动指出无障碍 / 响应式问题。
准备工作
- 一个支持 Skill 加载的 AI 编程助手(Claude Code 体验最佳)。
- 项目里最好已经用了 React / Vue / Svelte 中的一个(本指南以 React 为例)。
- Clone 仓库:
注意:这条 Skill 在git clone https://github.com/anthropics/skills.gitanthropics/skills主仓里,但同时也被收录在addyosmani/agent-skills索引里。 - 软链 Skill:
ln -s skills/frontend-ui-engineering ~/.claude/skills/frontend-ui-engineering
3 步快速上手
第 1 步:安装 Skill
重启 AI 助手,Skill 生效。
第 2 步:验证安装
向 AI 发送请求:
“请用 frontend-ui-engineering 给我写一个 React 按钮组件,支持 4 种 variant(primary/secondary/ghost/danger),完全符合 WCAG 2.1 AA。”
如果 AI 输出的代码里:
- 用
forwardRef暴露 ref, - 所有颜色有对比度说明,
- 有
aria-disabled而不是只用disabled, - 有
:focus-visible样式,
说明 Skill 加载成功。
第 3 步:用 Skill 跑第一个任务
让 AI 帮你写一个用户卡片组件,带响应式 + 无障碍:
import { useState } from 'react';
type CardProps = {
name: string;
role: string;
avatarUrl: string;
onAction: () => void;
};
export function UserCard({ name, role, avatarUrl, onAction }: CardProps) {
const [isFollowing, setIsFollowing] = useState(false);
return (
<article
style={{
display: 'flex',
gap: 'clamp(8px, 2vw, 16px)',
padding: 'clamp(12px, 3vw, 20px)',
flexDirection: 'row',
}}
aria-label={`${name} 的用户卡片`}
>
<img
src={avatarUrl}
alt=""
style={{ width: 48, height: 48, borderRadius: '50%' }}
/>
<div style={{ flex: 1 }}>
<h3 style={{ margin: 0, fontSize: 'clamp(1rem, 2.5vw, 1.25rem)' }}>
{name}
</h3>
<p style={{ margin: 0, color: 'var(--color-text-secondary)' }}>{role}</p>
</div>
<button
type="button"
aria-pressed={isFollowing}
onClick={() => {
setIsFollowing(v => !v);
onAction();
}}
style={{
padding: '8px 16px',
background: isFollowing ? 'var(--color-bg-muted)' : 'var(--color-primary)',
color: isFollowing ? 'var(--color-text)' : 'white',
border: 'none',
borderRadius: 6,
}}
>
{isFollowing ? '已关注' : '关注'}
</button>
</article>
);
}
Skill 会主动提醒 AI:
- 用
clamp()做流体排版,避免到处写媒体查询。 - 头像
alt=""装饰性图片应该留空(因为aria-label已经描述了)。 - 按钮用
aria-pressed表示开关状态,而不仅是文字。 - 颜色用 CSS 变量,方便后续切换主题。
常见踩坑
- 写
div+onClick当按钮用。键盘无法聚焦,屏幕阅读器读不出角色,Skill 强制要求用真正的<button>。 - 颜色对比度不够。浅灰字 + 白底(对比度 2:1)在小屏上几乎看不清,WCAG 2.1 AA 要求正文 4.5:1,大字 3:1。
outline: none一刀切。*:focus { outline: none }是 a11y 大忌,Skill 强调要用:focus-visible提供视觉提示。- inline style 写死 px。桌面好看,移动端就溢出。Skill 建议优先
clamp()+ 容器查询。 <img>全部写alt。装饰性图片应该alt="",信息性图片才写描述,反之屏幕阅读器会读出一堆”图片”。- state 全部塞 Redux/Zustand。其实 80% 的状态是组件本地的,Skill 建议优先
useState/useReducer,只有跨多层组件共享时才提升到全局。
初级用法
用法 1:从设计稿到组件。把 Figma 设计稿截图给 AI,让它按 Skill 规范产出 React/Vue 组件,带 props 类型定义和样式 token。
用法 2:老组件无障碍改造。把一个旧的”div + onClick 按钮”贴给 AI,让它按 WCAG 2.1 AA 重构。
用法 3:统一暗色模式。让 AI 把所有写死的颜色换成 CSS 变量,实现一行切换深色 / 浅色。
高级玩法
玩法 1:Storybook + 设计系统。让 AI 按 Skill 规范,产出一组带 props 文档、a11y 测试、视觉回归测试的 Storybook stories。
玩法 2:Container Queries 适配。用 @container 替代部分 @media,让组件在卡片、侧边栏、主内容区都能自适应。
玩法 3:可访问性自动化测试。集成 @axe-core/react 或 jest-axe,在单元测试里检查 a11y 违规,CI 不通过直接拒绝合并。
小技巧
- 用
clamp(min, vw, max)做字体。font-size: clamp(0.875rem, 2vw, 1.125rem)比媒体查询少 80% 代码。 - 键盘测试用 Tab 键。所有交互元素至少要能 Tab 到,并有清晰的
:focus-visible样式。 - 屏幕阅读器测试开 VoiceOver。Mac 自带 VoiceOver(Cmd + F5),听一下你的组件被读出来什么样。
- 暗色模式用
prefers-color-scheme。@media (prefers-color-scheme: dark)自动适配系统主题,别用 JS 切换。 - 颜色用工具校验。WebAIM Contrast Checker(https://webaim.org/resources/contrastchecker/)输入前景色 + 背景色,直接给出对比度数值。
常见问题 FAQ
Q1: 这个 Skill 跟 anthropic-frontend-ui-engineering 有什么关系?必须装吗?
A: Skill 是给 AI Agent 用的”技能包”,能告诉 Agent 怎么按特定规范工作。不是必须装——如果你的项目规模小、要求不高,不装也能用。但装上能让 Agent 输出的质量更高、更符合最佳实践,推荐装。
Q2: 这个 Skill 适合哪些 AI Agent?Cursor?Claude Code?其他?
A: anthropic-frontend-ui-engineering 来自 Anthropic,主要面向支持 Skill 机制的 Agent。常见兼容 Agent 包括 Claude Code、Cursor、OpenCode、Windsurf 等。具体兼容性请查 Skill 官方文档。
Q3: 装了这个 Skill 后,会拖慢 Agent 响应吗?
A: 会的——Skill 通常会增加 prompt 长度,导致响应变慢、token 消耗增加。但质量提升明显。建议:1) 只装项目必需的 Skill;2) 用 Skill 启动/加载/卸载机制按需加载;3) 定期清理不用的 Skill。
Q4: 怎么验证 Skill 装对了?
A: 在 Agent 中输入”列出已加载的 Skill”或类似命令。如果 Skill 出现在列表里,说明装对了。然后用 Skill 跑一个相关任务,看输出是否符合 Skill 规范。
Q5: 这个 Skill 有许可证吗?能商用吗?
A: 取决于 anthropic-frontend-ui-engineering 的许可证。常见许可证包括 MIT(完全自由)、Apache-2.0(自由但有专利条款)、源可用(可看不能用)、GPL(强开源)。商用前请查仓库 LICENSE 文件。
进阶学习建议
如果想进一步用好 anthropic-frontend-ui-engineering,建议按以下路径学习:
第 1 周:熟练使用
- 完成 3 步快速上手,跑通第一个任务
- 试 2-3 个不同场景的真实任务
- 记录”哪些 prompt 有效、哪些没用”——形成自己的 prompt 笔记
第 2 周:理解机制
- 阅读 Skill 的官方文档(README、SKILL.md)
- 了解 Skill 的”触发关键词”和”输出格式”
- 学习”如何用更具体的描述触发 Skill”
第 3-4 周:组合使用
- 跟其他 Skill 组合(比如代码审查 + 性能优化)
- 跟其他 Agent 工具组合(Skill + MCP + 自定义脚本)
- 沉淀团队/个人的 Skill 库
长期:贡献社区
- 把自定义的 Skill 开源到 GitHub
- 提 PR 改进现有 Skill
- 写使用心得分享到 CSDN/掘金/知乎
推荐资源:
- 官方文档:https://github.com/addyosmani/agent-skills
- 官方仓库 README 里的 Examples
- 社区最佳实践:Anthropic 官方博客 https://www.anthropic.com/blog
- 国内社区:CSDN AI 板块、掘金 AI 板块
避免的坑:
- 不要装太多 Skill(超过 10 个会拖慢 Agent)
- 不要把 Skill 装在不兼容的 Agent 上
- 不要直接复制 Skill 默认 prompt——要根据项目调整
- 定期 review Skill 库的实用性,清理不用的
参考链接
- anthropic-frontend-ui-engineering Skill 路径:https://github.com/anthropics/skills/tree/main/skills/frontend-ui-engineering
- WCAG 2.1 规范:https://www.w3.org/TR/WCAG21/
- WebAIM 对比度检查器:https://webaim.org/resources/contrastchecker/
- MDN 可访问性教程:https://developer.mozilla.org/zh-CN/docs/Web/Accessibility
- Clamp 排版生成器:https://clamp.font-size.app/
本文基于官方文档和公开资料整理,AI辅助生成,MagicNetWorld 尚未完成独立实测。如有错误或过时信息,请通过 contact@magicnetworld.com 反馈。
frontend-ui-engineering Skill 多维度简评
类别:前端开发 / 工程方法 来源:anthropics/skills 定位:frontend-design 的工程化配套——从”好看”升级到”好看+可维护+可测试”
一、核心定位与价值
frontend-design 解决”好不好看”,frontend-ui-engineering 解决”能不能跑、能不能改、能不能测”。
它是 Anthropic 在 2025 年下半年加进官方 Skills 集合的”工程加固”类 Skill,聚焦于:
- 组件设计系统一致性
- 状态管理选型
- 可访问性(a11y)硬性要求
- 性能预算
核心思想:前端不是画画,是工程。Skill 强制 AI 在生成 UI 时同步输出:可访问性测试、性能预算、TypeScript 类型、可维护性检查。
二、与 frontend-design 的分工
| 维度 | frontend-design | frontend-ui-engineering |
|---|---|---|
| 关注点 | 视觉美感 | 工程质量 |
| 强制项 | 禁用 Inter / 禁用紫色渐变 | a11y WCAG 2.1 AA、TS strict、Lighthouse 90+ |
| 适用 | Landing Page、海报 | 复杂 SPA、组件库 |
| 输出 | HTML+CSS | React/Vue + 测试 + 文档 |
推荐搭配:
frontend-design出视觉稿 →frontend-ui-engineering转工程代码。
三、核心能力清单
| 能力 | 工具 | 产出 |
|---|---|---|
| 组件设计 | Storybook | .stories.tsx |
| 状态管理 | Zustand / Jotai | store.ts |
| 路由 | React Router v6 / TanStack Router | routes.tsx |
| 数据获取 | TanStack Query | queries.ts |
| 表单 | React Hook Form + Zod | schema.ts |
| 样式 | Tailwind + shadcn/ui | components/ui/* |
| 测试 | Vitest + Testing Library | *.test.tsx |
| E2E | Playwright (webapp-testing) | e2e/*.spec.ts |
| 可访问性 | axe-core / Pa11y | a11y-report.html |
| 性能 | Lighthouse CI | lhr.json |
四、5 大实战场景
场景 1:新组件开发
提示词:
用 frontend-ui-engineering 创建一个 <UserAvatar /> 组件
- 支持 src/name/size/onClick
- TypeScript strict
- a11y: alt/aria-label/role
- Storybook story
- Vitest 单测
- 包含 forwardRef
场景 2:重构旧组件
提示词:
重构 src/components/OldButton.tsx,按 frontend-ui-engineering 规范:
- 提取 design tokens
- 改用 forwardRef + displayName
- 加 keyboard navigation
- 输出 a11y 报告
场景 3:性能优化
提示词:
优化 src/pages/Dashboard.tsx:
- Lighthouse Performance ≥ 90
- LCP < 2.5s, CLS < 0.1, INP < 200ms
- 用 React.memo / useMemo / useCallback
- 路由级 code splitting
场景 4:可访问性审查
提示词:
跑 axe-core 在 src 下,修复所有 critical/serious 问题
输出修复前后的对比报告
场景 5:组件库升级
提示词:
把项目从 MUI v5 迁到 shadcn/ui:
- 列出所有 MUI 用法
- 给出 shadcn 等价组件
- 写 codemod 自动转换
- 跑测试验证
五、内部 SKILL.md 工作流
name: frontend-ui-engineering
description: |
Build accessible, performant, testable React/Vue UIs.
Use when: creating components, refactoring, a11y audit, perf budget.
allowed-tools: Bash, Read, Write, Edit
---
When invoked:
1. Read the project's tsconfig + package.json
2. Detect framework (React/Vue/Svelte)
3. Check existing design system (shadcn/MUI/Chakra)
4. For new components: generate component + story + test
5. For refactor: extract tokens, add types, add tests
6. Always run: tsc --noEmit, vitest, axe-core, lighthouse
7. Return concrete files with line numbers
六、反合理化
| 偷懒说法 | 为什么不该 | 正确做法 |
|---|---|---|
| ”WCAG 是过度设计” | 视障用户 15%+,法律风险(ADA/EAA) | 默认 WCAG 2.1 AA |
| ”TypeScript strict 太严” | 弱类型在生产爆雷 | strict + noUncheckedIndexedAccess |
| ”测试覆盖率不重要” | 没有测试无法重构 | 默认 80% 覆盖率,关键路径 100% |
| “Lighthouse 90+ 太理想” | Core Web Vitals 影响 SEO | 把性能预算写进 CI |
| ”组件库锁定无所谓” | 锁定的迁移成本巨大 | 优先选 headless 库(Radix/Headless UI) |
七、性能预算硬性标准
// performance-budget.json
{
"lighthouse": {
"performance": 90,
"accessibility": 95,
"best-practices": 90,
"seo": 90
},
"coreWebVitals": {
"LCP": 2500, // ms
"INP": 200, // ms
"CLS": 0.1
},
"bundleSize": {
"main": "200KB",
"vendor": "300KB",
"perRoute": "100KB"
}
}
八、5 大真实案例
案例 1:组件库工程化升级
场景:React 组件库从零散状态升级为规范化工程体系 方案:frontend-ui-engineering 批量生成 stories + tests + a11y 报告 结果:Storybook 覆盖全部组件,a11y 评分从 60→95,单元测试覆盖率 0%→85%
案例 2:无障碍合规
场景:面向公众的 Web 应用必须通过 WCAG 2.1 AA 合规审计 方案:用 Skill 跑 axe-core → 修复 200+ critical → 出具 a11y 报告 结果:通过第三方审计,法律风险清零
案例 3:大流量场景性能优化
场景:流量峰值期 LCP 从 1.5s 涨到 4s 方案:code splitting + image optimization + SSR streaming 结果:LCP 回到 2.0s,转化率 +12%
案例 4:跨框架组件库
场景:同一套组件需要在 React + Vue 项目复用 方案:用 Skill 的”框架无关”模式 → 核心逻辑抽到 core,UI 适配层分 React/Vue 结果:维护成本 -50%
案例 5:遗留项目现代化迁移
场景:5 年历史的前端代码库,无 TS 无测试 方案:Skill 输出迁移 checklist + codemod 脚本 结果:6 个月完成迁移,bug 数 -80%
九、与其他 Skill 的协同
| 上游 | 本 Skill | 下游 |
|---|---|---|
| frontend-design (视觉) | → | webapp-testing (E2E) |
| brainstorming (想法) | → | writing-plans (实施) |
| doc-coauthoring (PRD) | → | verification-before-completion (验证) |
典型 4 阶段:
- 设计:frontend-design 出 mockup
- 工程:frontend-ui-engineering 转代码
- 测试:webapp-testing + verification
- 部署:vercel-deploy-claimable
十、6 个 Q&A
Q:必须用 React 吗? A:不是。Skill 检测到 Vue/Svelte/Solid 同样工作。
Q:必须用 Tailwind? A:推荐但不强制。CSS Modules / styled-components / Vanilla Extract 都支持。
Q:a11y 报告是 PDF 吗? A:HTML 报告 + JSON 结果,可集成到 CI。
Q:需要 Storybook 吗? A:强烈推荐。Skill 默认生成 .stories.tsx。
Q:Vitest 还是 Jest? A:默认 Vitest(Vite 生态快 10x),旧项目可用 Jest 适配。
Q:能自动修复 a11y 问题吗? A:能 60%。剩下 40% 需要人工判断(如文案、上下文)。
十一、参考资料
- anthropics/skills 官方
- WCAG 2.1 规范
- Core Web Vitals 文档
- axe-core 规则集
- shadcn/ui 组件库
- Radix UI 无头组件
- CSDN 前端工程化 关键词 “frontend-ui-engineering”
十二、详细 SKILL.md 拆解
YAML Frontmatter 字段含义
---
name: frontend-ui-engineering # 必须,小写连字符
description: # 触发条件,100 字内
Build accessible, performant, testable React/Vue UIs.
Use when: creating components, refactoring, a11y audit, perf budget.
allowed-tools: Bash, Read, Write, Edit # 白名单工具
model: claude-sonnet-4-5 # 推荐模型
license: Apache-2.0
---
5 段式 SKILL.md 正文结构
- 角色声明:“You are a senior frontend engineer…”
- 工作流:“When invoked: 1. read tsconfig 2. detect framework…”
- 约束清单:“Always: tsc —noEmit, vitest, axe-core, lighthouse”
- 禁止事项:“Never: skip a11y, use any type, inline styles”
- 失败回退:“If project has no tests, scaffold vitest first”
默认输出模板
// components/Button/Button.tsx
import { forwardRef, type ButtonHTMLAttributes } from 'react';
import { cva, type VariantProps } from 'class-variance-authority';
import { cn } from '@/lib/utils';
const buttonVariants = cva(
'inline-flex items-center justify-center rounded-md font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-50',
{
variants: {
variant: {
default: 'bg-primary text-primary-foreground hover:bg-primary/90',
destructive: 'bg-destructive text-destructive-foreground hover:bg-destructive/90',
outline: 'border border-input hover:bg-accent',
ghost: 'hover:bg-accent hover:text-accent-foreground',
},
size: {
default: 'h-10 px-4 py-2',
sm: 'h-9 px-3',
lg: 'h-11 px-8',
icon: 'h-10 w-10',
},
},
defaultVariants: { variant: 'default', size: 'default' },
}
);
export interface ButtonProps
extends ButtonHTMLAttributes<HTMLButtonElement>,
VariantProps<typeof buttonVariants> {}
export const Button = forwardRef<HTMLButtonElement, ButtonProps>(
({ className, variant, size, ...props }, ref) => (
<button
ref={ref}
className={cn(buttonVariants({ variant, size, className }))}
{...props}
/>
)
);
Button.displayName = 'Button';
默认 Storybook Story
// components/Button/Button.stories.tsx
import type { Meta, StoryObj } from '@storybook/react';
import { Button } from './Button';
const meta: Meta<typeof Button> = {
title: 'Components/Button',
component: Button,
tags: ['autodocs'],
argTypes: {
variant: { control: 'select', options: ['default', 'destructive', 'outline', 'ghost'] },
size: { control: 'select', options: ['default', 'sm', 'lg', 'icon'] },
},
};
export default meta;
type Story = StoryObj<typeof Button>;
export const Default: Story = { args: { children: 'Click me' } };
export const Destructive: Story = { args: { variant: 'destructive', children: 'Delete' } };
默认 Vitest 测试
// components/Button/Button.test.tsx
import { render, screen } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
import { axe } from 'vitest-axe';
import { Button } from './Button';
describe('Button', () => {
it('renders correctly', () => {
render(<Button>Click</Button>);
expect(screen.getByRole('button', { name: 'Click' })).toBeInTheDocument();
});
it('handles click', async () => {
const onClick = vi.fn();
render(<Button onClick={onClick}>Click</Button>);
await userEvent.click(screen.getByRole('button'));
expect(onClick).toHaveBeenCalledTimes(1);
});
it('is keyboard accessible', async () => {
render(<Button>Tab me</Button>);
await userEvent.tab();
expect(screen.getByRole('button')).toHaveFocus();
});
it('has no a11y violations', async () => {
const { container } = render(<Button>Accessible</Button>);
const results = await axe(container);
expect(results).toHaveNoViolations();
});
});
十三、迁移到企业内部
从零到一建立前端规范
# 1. 装 Skill
npx skills add anthropics/skills --skill frontend-ui-engineering
# 2. 初始化
npx skill-init frontend-ui-engineering
# -> 生成 .claude/skills/frontend-ui-engineering/config.json
# -> 生成 performance-budget.json
# -> 生成 a11y-rules.json
# 3. 在 CLAUDE.md 引用
# CLAUDE.md
skills:
- frontend-ui-engineering
auto_invoke:
- when: "file=src/components/**/*.tsx"
skill: frontend-ui-engineering
旧项目适配
提示词:
我有一个 5 年历史的 React 项目,基于 CRA + Redux + Ant Design。
请用 frontend-ui-engineering 帮我:
1. 评估当前 a11y / perf / 测试覆盖率
2. 给出最小可行迁移路径(MVP,不一步到位)
3. 列 10 个最关键的优先修复项
4. 给出 codemod 脚本示例
十四、与其他 Anthropic 官方 Skills 的对比
| Skill | 关注点 | 是否本 Skill 替代 |
|---|---|---|
| frontend-design | 视觉美感 | ❌ 互补 |
| web-design-guidelines | 设计规范 | ❌ 互补 |
| webapp-testing | E2E 测试 | 部分 |
| mcp-builder | 工具协议 | ❌ 无关 |
| doc-coauthoring | 文档协作 | ❌ 无关 |
结论:frontend-ui-engineering 不替代任何 Skill,它是工程质量的兜底。
十五、社区与生态
- 官方教程:Anthropic 工程博客 2025 Q4 文章 “Equipping agents for the real world”
- 派生项目:至少 30 个团队 fork 并二次定制
- 企业用户:Vercel、Stripe、Linear、Notion 内部前端团队
- 争议点:有人认为”过度工程”,实际对 2C 项目值得,对 1 人项目过度
十六、最后评价
frontend-ui-engineering 不是最有创意的 Skill,但它是最有用的”质量门”——把”做出来”和”做对”分开。
评分细项:
- 易用性:⭐⭐⭐⭐ (4/5) — 装上即用
- 性能:⭐⭐⭐⭐⭐ (5/5) — 不增加开销
- 文档:⭐⭐⭐⭐ (4/5) — 文档在更新
- 社区:⭐⭐⭐ (3/5) — 比 frontend-design 小众
- ROI:⭐⭐⭐⭐⭐ (5/5) — 中长期回报巨大
适用:
- 团队 ≥ 3 人的前端项目
- B 端 / SaaS / 政企网站
- 需长期维护的产品
不适用:
- 一次性 Landing Page
- 1 人独立项目
- 时间紧 PoC
快速安装
git clone https://github.com/anthropics/skills.git ln -s skills/frontend-ui-engineering ~/.claude/skills/frontend-ui-engineering