# Design To Code

> Implements UI from design mockups (Figma, Sketch, or image) with pixel-accurate layout, responsive behavior, and design tokens. Use when 还原设计图, implementing designs, 切图, 设计稿转代码, or converting mockups to frontend code.

- Skill: `whyzsm/design-to-code` (Agent Skill, multi-file: 5 files)
- Install (CLI): `npx skillmds@latest add whyzsm/design-to-code`
- Raw SKILL.md: https://api.skillmd.com/api/skills/whyzsm/design-to-code/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Design & Media
- Author: whyzsm (https://skillmd.com/u/whyzsm)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/whyzsm/design-to-code

---


# 还原设计图（Design to Code）

将设计稿（Figma/Sketch/图片）高保真还原为前端代码，保证布局、间距、字体、颜色与交互一致。

## 触发场景

- 用户说「还原设计图」「按设计稿实现」「切图」「设计转代码」
- 提供 Figma/Sketch 链接、设计图截图或标注
- 需要实现某个页面/组件的 UI

## 执行流程

### 1. 先确认用户给了什么

| 用户给的 | 第一步 |
|---------|-------|
| Figma 链接 | 问：有没有 Figma 访问权限？如果没有，让用户截图或导出标注 |
| 设计图截图 | 直接分析，提取尺寸/颜色/字体/间距，列出关键标注 |
| 只有描述，没有设计图 | 问：「有没有设计稿？如果没有，我可以按常见 UI 规范实现，但可能和你预期有出入」 |
| 有设计图 + 现有代码 | 先读现有代码，了解技术栈和已有组件，再还原设计 |

### 2. 分析设计稿，提取关键信息

读设计图时，按这个顺序提取（不要跳过）：

**布局结构**
- 整体是几列？用 Flex 还是 Grid？
- 各区块的宽度是固定的还是弹性的？
- 有没有响应式断点？

**间距与尺寸**（精确到 px）
- 容器的 padding
- 元素之间的 gap/margin
- 组件的宽高（固定值还是百分比）

**字体**
- 字号、字重、行高、字间距
- 颜色（含透明度）

**颜色**
- 背景色、文字色、边框色、阴影
- 是否能映射到项目已有的 design token 或 Tailwind 颜色

**交互状态**（设计稿里有没有标注）
- hover、focus、active、disabled
- 没有标注的，按项目现有规范处理，不要自己发明

### 3. 实现顺序，不要乱

按这个顺序写代码，不要一上来就写细节：

1. **HTML 骨架**：先把语义化结构搭出来，不加任何样式
2. **布局**：Flex/Grid 定位，保证对齐和间距
3. **字体排版**：字号、字重、行高、颜色
4. **视觉装饰**：背景、边框、圆角、阴影
5. **交互状态**：hover/focus/disabled
6. **响应式**：断点适配
7. **动效**：最后加，设计稿有说明才加

### 4. 遇到这些情况，按以下方式处理

**设计稿里的颜色/字号在项目 token 里没有**
→ 先问用户：「这个颜色 `#3B82F6` 是不是对应 `blue-500`？」不要直接写魔法值
→ 如果确认没有对应 token，用 CSS 变量命名（`--color-brand-primary`），便于后续统一

**设计稿标注不清晰，看不出具体数值**
→ 说明哪里看不清，给出合理推测值，让用户确认：「这里间距看起来是 16px，对吗？」

**设计稿有动效但没有说明**
→ 不要自己发明动效，问用户：「这里有过渡动画吗？如果有，持续时间和缓动函数是什么？」

**实现后和设计稿有出入**
→ 主动说明差异和原因，不要假装没有：「这里字体用了系统字体代替，因为项目没有引入 Inter」

### 5. 还原度自检（提交前必做）

- [ ] 关键尺寸与设计稿一致（容忍 1-2px 差异）
- [ ] 字体、颜色与设计一致
- [ ] 主要断点下布局正常，无错位
- [ ] 可交互元素有明确的状态反馈（hover/focus/disabled）
- [ ] 语义化 HTML（按钮用 `<button>`，链接用 `<a>`，不用 `<div>` 代替）
- [ ] 图片有 `alt` 属性

## 输出约定

- 使用项目现有技术栈（如 Next.js、Tailwind、SCSS、组件库）
- 组件化：可复用部分拆成组件并命名清晰
- 语义化 HTML + 合理 ARIA（按钮、链接、表单）
- 必要时注明：某处与设计稿差异及原因（如兼容性、可访问性）

## 常用对照

| 设计稿 | 实现方式 |
|--------|----------|
| 8px 栅格 | 间距用 8 的倍数（8/16/24/32） |
| 字体层级 | 对应 heading/body/caption 等语义类或 design token |
| 模糊/毛玻璃 | backdrop-filter + 半透明背景 |
| 多行截断 | line-clamp 或 -webkit-line-clamp |
| 安全区域 | padding 配合 env(safe-area-inset-*) |

