关于 ui-analyzer
ui-analyzer 是一项将界面截图分析转化为 React、TypeScript 和 Tailwind CSS 实现方案的技能,适用于需要还原界面或理解其结构的开发者。它按步骤提取布局、组件与设计令牌,并提供代码生成及验证指导。
主要功能
- 01分析截图中的布局与界面组件
- 02提取颜色、字体和间距令牌
- 03规划可复用的组件结构
- 04生成 React 与 TypeScript 代码
- 05提供响应式与无障碍检查指导
适用场景
- 01根据登录页截图实现表单界面
- 02拆解仪表盘布局并生成组件
- 03从设计系统截图提取样式令牌
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ smallnest/ langgraphgo --skill ui-analyzer安装后在 Claude Code 中输入/ui-analyzer确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/design-tokens.mdlayout-patterns.mdui-analysis-checklist.md详细介绍
UI 分析器
此技能提供了一套系统化的方法,用于分析 UI 设计截图,并使用 TypeScript 和 Tailwind CSS 将其转换为可用于生产环境的 React 组件。
用途
将 UI 设计截图转换为结构清晰、易于访问且易于维护的 React 组件。此技能将引导你分析布局、提取设计令牌、识别组件,并生成简洁的代码,在遵循最佳实践的同时还原设计。
何时使用此技能
在以下情况下使用此技能:
- 用户提供 UI 设计截图、模型图或 Figma 导出文件
- 用户要求“实现此设计”或“构建此 UI”
- 用户要求“分析此截图”
- 用户想将设计转换为代码
- 用户需要帮助理解 UI 的结构
- 用户要求匹配现有设计
分析工作流
分析 UI 截图时,请按以下步骤系统地进行:
第 1 步:初步观察和截图阅读
如果用户提供了文件路径,或在对话中分享了图片,请先使用 Read 工具阅读提供的截图。
查看截图后:
- 描述你在 UI 中看到的内容
- 识别屏幕/页面类型(登录、仪表板、表单等)
- 确定目标设备(桌面设备、移动设备、自适应布局)
- 记录整体风格(现代、极简、色彩丰富等)
- 继续之前先与用户确认你的理解
第 2 步:布局分析
识别高层布局结构:
-
主要布局类型 - 参考
references/layout-patterns.md进行识别:- 单列
- 侧边栏布局
- 页眉 + 内容
- 网格布局
- 分屏
- 仪表板
- 主从布局
- 其他模式
-
布局层级 - 拆分为以下区域:
- 页眉/导航
- 主要内容区域
- 侧边栏(如有)
- 页脚(如有)
- 嵌套结构
-
自适应布局注意事项:
- 布局应如何适配移动设备?
- 哪些元素应堆叠或隐藏?
- 断点策略
参考 references/layout-patterns.md 获取 Tailwind 实现模式。
第 3 步:识别组件
使用 references/ui-analysis-checklist.md 系统地识别所有 UI 组件:
导航组件:
- 顶部导航、侧边栏导航、面包屑、选项卡等
数据展示组件:
- 卡片、表格、列表、统计信息、徽章、头像、图标等
输入组件:
- 文本输入框、选择框、复选框、单选框、开关、日期选择器等
操作组件:
- 按钮(主要、次要等)、图标按钮、链接等
反馈组件:
- 警告提示、Toast、进度条、加载状态等
浮层组件:
- 模态框、抽屉、工具提示、弹出层、下拉菜单等
列出所有已识别的组件,并注明:
- 组件类型和用途
- 在布局中的位置
- 大致尺寸和样式
- 交互状态(如可见)
步骤 4:提取设计令牌
使用 references/design-tokens.md 提取设计系统的值:
配色方案:
- 识别设计中所有不重复的颜色
- 按用途分类:
- 品牌主色
- 辅助色/强调色
- 背景色(主背景、次要背景)
- 文本颜色(主要、次要、弱化)
- 边框颜色
- 状态颜色(成功、警告、错误、信息)
- 将每种颜色映射到最接近的 Tailwind 颜色,或注明需要自定义颜色
- 创建颜色参考表
排版:
- 识别字体系列(衬线、无衬线、等宽)
- 列出观察到的所有文本字号
- 映射到 Tailwind 排版比例(
text-xs到text-6xl) - 记录使用的字重(常规、中等、半粗、粗体)
- 识别标题层级(H1-H6)
间距:
- 观察内边距模式(卡片内边距、按钮内边距等)
- 观察外边距/间隔模式(区块之间、项目之间)
- 映射到 Tailwind 间距比例(p-4、m-6、gap-8 等)
- 记录间距单位(通常以 4px 或 8px 为基准)
其他令牌:
- 边框圆角(从
rounded-none到rounded-full) - 阴影(从
shadow-sm到shadow-2xl) - 边框宽度
- 图标尺寸
请参阅 references/design-tokens.md 中的完整映射表。
步骤 5:详细分析组件
针对识别出的每个主要组件:
- 组件边界——从哪里开始/到哪里结束?
- 属性/数据——接收哪些数据?
- 内部结构——子组件和元素
- 样式细节:
- 背景颜色
- 文本颜色和字号
- 内边距和外边距
- 边框和圆角
- 阴影
- 交互状态(如果可见或可推断):
- 悬停
- 激活/按下
- 聚焦
- 禁用
- 加载中
- 错误
- 无障碍需求:
- ARIA 标签
- 语义化 HTML
- 键盘导航
步骤 6:实现策略
规划实现方式:
- 组件层级——应先构建哪些组件?
- 可复用性——哪些模式会重复出现?将其提取为可复用组件
- 状态管理——组件是否需要 Zustand,还是使用局部状态即可?
- 与 react-component-generator 集成——能否使用现有模板?
- 文件结构——组件应放在哪里?
如果 react-component-generator 技能可用:
- 参考其常见组件模板(表单、卡片、按钮、模态框等)
- 使用其组件结构最佳实践
- 遵循其命名约定
步骤 7:生成代码
按照以下原则生成 React 组件:
结构:
- 先为属性编写 TypeScript 接口
- 使用带有 React.FC 的函数组件
- 添加 JSDoc 注释
- 同时导出具名导出和默认导出
样式:
- 仅使用 Tailwind CSS 进行样式设计
- 应用提取出的设计令牌
- 按逻辑组织类名(布局 → 间距 → 颜色 → 效果 → 状态)
- 在需要时使用响应式类(sm:、md:、lg:、xl:)
最佳实践:
- 使用语义化 HTML 元素
- 添加 ARIA 属性以满足无障碍需求
- 处理加载和错误状态
- 支持键盘导航
- 使用恰当的 TypeScript 类型(不要使用
any) - 保持组件专注且易于组合
组件模板示例:
import React from 'react';
interface ComponentNameProps {
// Props based on analysis
title: string;
description?: string;
onClick?: () => void;
className?: string;
}
/**
* ComponentName - Brief description based on UI purpose
*
* @param props - Component props
* @returns JSX.Element
*/
export const ComponentName: React.FC<ComponentNameProps> = ({
title,
description,
onClick,
className = ''
}) => {
return (
<div className={`/* Tailwind classes from design */ ${className}`}>
{/* Implementation based on screenshot */}
</div>
);
};
export default ComponentName;
步骤 8:验证和完善
生成代码后:
- 对照截图检查——是否符合设计?
- 检查响应式效果——能否适配不同屏幕尺寸?
- 验证无障碍性——是否包含 ARIA 标签和语义化 HTML?
- 验证设计令牌——颜色、间距和排版是否正确?
- 考虑边缘情况——长文本、空状态、加载状态
- 注明假设——明确说明哪些内容是推测的,哪些已确认
第 9 步:交付内容
向用户提供:
-
分析摘要:
- 布局描述
- 组件拆解
- 提取的设计令牌
-
生成的代码:
- 完整的 React 组件
- TypeScript 接口
- 应用的 Tailwind 类
-
实现说明:
- 安装要求(如需安装软件包)
- 使用示例
- 自定义建议
- 响应式行为说明
-
后续步骤:
- 建议改进或变体
- 指出可能需要调整的部分
- 提供生成其他相关组件的帮助
常见场景
场景 1:简单表单截图
用户:“实现这个登录表单设计 [截图]”
方法:
- 查看截图
- 识别:包含表单输入框和按钮的居中卡片布局
- 提取:颜色、输入框样式、按钮样式、间距
- 参考
layout-patterns.md→“居中弹窗/卡片”模式 - 参考
react-component-generator→ FormComponent 模板 - 生成:结构规范的 LoginForm.tsx,并包含验证
- 应用与设计相符的 Tailwind 类
场景 2:仪表盘截图
用户:“构建这个仪表盘 UI [截图]”
方法:
- 查看截图
- 识别:包含网格状统计卡片的页眉 + 侧边栏布局
- 拆分为多个组件:
- 页眉组件
- 侧边栏导航
- StatCard 组件(重复使用)
- 仪表盘主体布局
- 提取设计令牌,确保风格一致
- 参考
layout-patterns.md→“仪表盘布局”模式 - 从可复用的 StatCard 开始生成组件
- 将组件组合成主 Dashboard 组件
场景 3:包含多个部分的复杂页面
用户:“实现这个落地页 [截图]”
方法:
- 查看截图
- 识别各个部分:主视觉区、功能网格、用户评价、行动号召
- 使用清单分别分析每个部分
- 提取共享的设计令牌
- 逐个生成各部分组件
- 展示如何将各个部分组合成完整页面
- 提供响应式行为说明
场景 4:组件库截图
用户:“根据这张设计系统截图创建组件 [截图]”
方法:
- 查看截图
- 识别:展示了多种按钮、输入框和卡片变体
- 提取系统的设计令牌
- 生成每个组件变体
- 记录 prop 变体
- 创建使用指南
- 建议如何在项目中组织这些组件
参考文件的用法
references/ui-analysis-checklist.md
- 何时使用:第 3 步(组件识别)期间,以及作为全面的分析指南
- 用途:确保不遗漏任何组件或细节
- 方法:系统地逐项检查清单中的各个部分
references/layout-patterns.md
- 何时使用:第 2 步(布局分析)和第 7 步(代码生成)期间
- 用途:快速识别常见模式并获取实现代码
- 方法:将观察到的布局与模式匹配,并根据提供的代码进行调整
references/design-tokens.md
- 何时使用:第 4 步(设计令牌提取)和第 7 步(代码生成)期间
- 用途:准确地将视觉元素映射到 Tailwind 类
- 方法:使用颜色表、间距比例和组件尺寸指南
准确分析的技巧
- 系统化分析——按顺序执行工作流步骤,不要跳步
- 测量尺寸——仔细估算尺寸和间距
- 寻找规律——重复出现的元素表明设计系统风格一致
- 标注不确定之处——清楚区分假设与已确认的细节
- 考虑响应式设计——始终考虑移动设备上的表现
- 优先考虑无障碍性——从一开始就加入 ARIA 标签和语义化 HTML
- 遵循 DRY 原则——在模式重复时提取可复用组件
- 查阅参考资料——充分使用参考文件,确保准确性
- 与用户确认——大量生成代码前,先确认理解无误
- 迭代优化——根据用户反馈进行调整
与其他技能集成
与 react-component-generator 技能配合使用
当这两项技能都可用时:
- 使用 ui-analyzer 理解设计并提取需求
- 参考 react-component-generator 模板中的类似组件
- 将 ui-analyzer 提取的设计令牌应用到模板中
- 遵循 react-component-generator 的命名和结构约定
这将打造一套强大的工作流:分析 → 确定模板 → 自定义 → 实现。
完整工作流示例
用户提供登录页面截图
- ✅ 阅读截图并描述 UI
- ✅ 确定:居中卡片布局,带图片的分屏布局
- ✅ 提取设计令牌:
- 主蓝色:#3B82F6 →
bg-blue-500 - 文本:#1F2937 →
text-gray-800 - 背景:#F9FAFB →
bg-gray-50 - 卡片内边距:约 32px →
p-8 - 输入框高度:约 40px →
h-10 - 按钮:蓝色背景、白色文本、圆角 md
- 主蓝色:#3B82F6 →
- ✅ 确定组件:
- Logo/品牌元素
- 标题和副标题
- 电子邮件输入框(带标签)
- 密码输入框(带标签和显示/隐藏图标)
- “记住我”复选框
- “忘记密码?”链接
- 提交按钮
- 底部的注册链接
- ✅ 参考 layout-patterns.md → 分屏 + 居中卡片模式
- ✅ 生成 LoginForm.tsx:
- 用于 props 的 TypeScript 接口
- 表单验证结构
- 与设计匹配的 Tailwind 类
- 无障碍属性
- 响应式行为(在移动端堆叠显示)
- ✅ 提供用法示例和说明
- ✅ 提出生成配套图片区域或调整样式
注意事项
- 在进行任何分析前,始终先阅读截图
- 大量生成代码前,优先请用户确认是否理解正确
- 不确定颜色或间距时,选择最接近的 Tailwind 默认值
- 清晰记录所有假设
- 提供完整、可运行的代码,而不是伪代码
- 在匹配设计的同时,考虑提出改进建议
- 根据用户反馈做好迭代准备