Loading...
Loading...
Compare original and translation side by side
| Scenario | Ask? |
|---|---|
| "Make a deck" (no PRD, no audience) | ✅ Ask extensively: audience, duration, tone, variants |
| "Use this PRD to make a 10-min deck for Eng All Hands" | ❌ Enough info — start building |
| "Turn this screenshot into an interactive prototype" | ⚠️ Only ask if the intended interactions are unclear |
| "Make 6 slides about the history of butter" | ✅ Too vague — at least ask about tone and audience |
| "Design onboarding for my food-delivery app" | ✅ Ask heavily: users, flows, brand, variants |
| "Recreate the composer UI from this codebase" | ❌ Read the code directly — no questions needed |
| 场景 | 是否提问 |
|---|---|
| “制作一套幻灯片”(无PRD、无受众信息) | ✅ 需详细询问:受众、时长、风格、变体方向 |
| “根据这份PRD为全体工程师大会制作一套10分钟的幻灯片” | ❌ 信息足够——直接开始制作 |
| “将这张截图转化为交互式原型” | ⚠️ 仅当预期交互不明确时才提问 |
| “制作6张关于黄油历史的幻灯片” | ✅ 过于模糊——至少询问风格和受众 |
| “为我的外卖应用设计引导流程” | ✅ 需深入询问:用户群体、流程、品牌、变体方向 |
| “从这个代码库中重现编辑器UI” | ❌ 直接阅读代码——无需提问 |
Code ≫ Screenshots: When the user provides both a codebase and screenshots, invest your effort in reading source code and extracting design tokens rather than guessing from screenshots — rebuilding/editing an interface from code yields far higher quality than from screenshots.
代码 ≫ 截图:当用户同时提供代码库和截图时,优先投入精力阅读源代码并提取设计令牌,而非从截图中猜测——从代码重建/编辑界面的质量远高于从截图重建。
Design Decisions:
- Color palette: [primary / secondary / neutral / accent]
- Typography: [heading font / body font / code font]
- Spacing system: [base unit and multiples]
- Border-radius strategy: [large / small / sharp]
- Shadow hierarchy: [elevation 1–5]
- Motion style: [easing curves / duration / trigger]设计决策:
- 调色板:[主色/辅助色/中性色/强调色]
- 排版:[标题字体/正文字体/代码字体]
- 间距系统:[基础单位及倍数]
- 圆角策略:[大/小/锐利]
- 阴影层级:[层级1–5]
- 动效风格:[缓动曲线/时长/触发方式][image][icon][image][icon]<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Descriptive Title</title>
<style>/* CSS */</style>
</head>
<body>
<!-- Content -->
<script>/* JS */</script>
</body>
</html><!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Descriptive Title</title>
<style>/* CSS */</style>
</head>
<body>
<!-- Content -->
<script>/* JS */</script>
</body>
</html>integrity<script src="https://unpkg.com/react@18.3.1/umd/react.development.js"
integrity="sha384-hD6/rw4ppMLGNu3tX5cjIb+uRZ7UkRJ6BPkLpg4hAu/6onKUg4lLsHAs9EBPT82L"
crossorigin="anonymous"></script>
<script src="https://unpkg.com/react-dom@18.3.1/umd/react-dom.development.js"
integrity="sha384-u6aeetuaXnQ38mYT8rp6sbXaQe3NL9t+IBXmnYxwkUI2Hw4bsp2Wvmx4yRQF1uAm"
crossorigin="anonymous"></script>
<script src="https://unpkg.com/@babel/standalone@7.29.0/babel.min.js"
integrity="sha384-m08KidiNqLdpJqLq95G/LEi8Qvjl/xUYll3QILypMoQ65QorJ9Lvtp2RXYGBFj1y"
crossorigin="anonymous"></script>integrity<script src="https://unpkg.com/react@18.3.1/umd/react.development.js"
integrity="sha384-hD6/rw4ppMLGNu3tX5cjIb+uRZ7UkRJ6BPkLpg4hAu/6onKUg4lLsHAs9EBPT82L"
crossorigin="anonymous"></script>
<script src="https://unpkg.com/react-dom@18.3.1/umd/react-dom.development.js"
integrity="sha384-u6aeetuaXnQ38mYT8rp6sbXaQe3NL9t+IBXmnYxwkUI2Hw4bsp2Wvmx4yRQF1uAm"
crossorigin="anonymous"></script>
<script src="https://unpkg.com/@babel/standalone@7.29.0/babel.min.js"
integrity="sha384-m08KidiNqLdpJqLq95G/LEi8Qvjl/xUYll3QILypMoQ65QorJ9Lvtp2RXYGBFj1y"
crossorigin="anonymous"></script>const styles = { ... }stylesconst terminalStyles = { container: { ... }, line: { ... } };
const headerStyles = { wrap: { ... } };style={{...}}styles<script type="text/babel">windowfunction Terminal() { /* ... */ }
function Line() { /* ... */ }
Object.assign(window, { Terminal, Line });scrollIntoViewelement.scrollTop = ...window.scrollTo({...})const styles = { ... }stylesconst terminalStyles = { container: { ... }, line: { ... } };
const headerStyles = { wrap: { ... } };style={{...}}styles<script type="text/babel">windowfunction Terminal() { /* ... */ }
function Line() { /* ... */ }
Object.assign(window, { Terminal, Line });scrollIntoViewelement.scrollTop = ...window.scrollTo({...})type="module"<script type="text/babel" src="...">type="module"<script type="text/babel" src="...">oklch()text-wrap: prettyclamp()@container@media (prefers-color-scheme)@media (prefers-reduced-motion)oklch()text-wrap: prettyclamp()@container@media (prefers-color-scheme)@media (prefers-reduced-motion)Landing Page.htmlDashboard Prototype.html<script>v2v3My Design.htmlMy Design v2.html📚 More code templates (device frames, slide engine, animation timeline, Tweaks panel, dark mode, design canvas, data visualization) available in references/advanced-patterns.md
Landing Page.htmlDashboard Prototype.html<script>v2v3My Design.htmlMy Design v2.html📚 更多代码模板(设备框架、幻灯片引擎、动画时间线、Tweaks面板、深色模式、设计画布、数据可视化)可在references/advanced-patterns.md中获取
[icon]▢16:9 image[icon]▢16:9 imagebackdrop-filtermix-blend-modemaskbackdrop-filtermix-blend-modemask| Context | Minimum Size |
|---|---|
| 1920×1080 presentations | Text ≥ 24px (ideally larger) |
| Mobile mockups | Touch targets ≥ 44px |
| Print documents | ≥ 12pt |
| Web body text | Start at 16–18px |
| 场景 | 最小尺寸 |
|---|---|
| 1920×1080演示文稿 | 文本≥24px(理想情况下更大) |
| 移动原型 | 触摸目标≥44px |
| 打印文档 | ≥12pt |
| Web正文文本 | 从16–18px开始 |
transform: scale()localStorage01 Title02 Agenda05data-screen-labeltransform: scale()localStorage01 Title02 Agenda05data-screen-labelResizeObserverResizeObserveruseTimeEasinginterpolatehttps://unpkg.com/popmotion@11.0.5/dist/popmotion.min.jsAvoid importing Framer Motion / GSAP / Lottie and other heavy libraries — they introduce bundle-size overhead, version-compatibility issues, and problems with React 18's inline Babel mode. Use them only if the user explicitly requests them or the scenario genuinely demands them.
useTimeEasinginterpolatehttps://unpkg.com/popmotion@11.0.5/dist/popmotion.min.js避免导入Framer Motion / GSAP / Lottie等重型库——它们会增加包体积开销、版本兼容性问题,且与React 18的内联Babel模式存在冲突。仅当用户明确要求或场景确实需要时才使用。
<!-- Data Visualization: Charts -->
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script> <!-- Standard charts (line / bar / pie) -->
<script src="https://d3js.org/d3.v7.min.js"></script> <!-- Complex custom visualizations -->
<!-- Google Fonts example (avoid Inter / Roboto / Arial / Fraunces / system-ui) -->
<link href="https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@400;500;600;700&display=swap" rel="stylesheet"><!-- 数据可视化:图表 -->
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script> <!-- 标准图表(折线/柱状/饼图) -->
<script src="https://d3js.org/d3.v7.min.js"></script> <!-- 复杂自定义可视化 -->
<!-- Google Fonts示例(避免使用Inter / Roboto / Arial / Fraunces / system-ui) -->
<link href="https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@400;500;600;700&display=swap" rel="stylesheet"><!-- Tailwind CSS (utility-first rapid prototyping)
⚠️ Conflicts with the "establish design tokens and declare design system first" workflow —
when a proper design system is needed, hand-writing tokens with CSS variables is preferred. -->
<script src="https://cdn.tailwindcss.com"></script>
<!-- Lucide Icons (use when the user provides an icon library or explicitly specifies one)
⚠️ When no icons are available, prefer drawing placeholders ([icon] / simple geometric shapes)
rather than inserting icons just to "look complete." -->
<script src="https://unpkg.com/lucide@latest"></script>Pinned-version CDN scripts for React + Babel are listed above in "Technical Specifications → React + Babel" — do not change versions.
<!-- Tailwind CSS(实用优先的快速原型工具)
⚠️ 与“先建立设计令牌并明确设计系统”的工作流程冲突——
当需要正式设计系统时,优先使用CSS变量手写令牌。 -->
<script src="https://cdn.tailwindcss.com"></script>
<!-- Lucide Icons(当用户提供图标库或明确指定时使用)
⚠️ 无可用图标时,优先使用占位符([icon]/简单几何图形)
而非为了“看起来完整”而插入图标。 -->
<script src="https://unpkg.com/lucide@latest"></script>React + Babel的固定版本CDN脚本已在“技术规范→React + Babel”部分列出——请勿更改版本。
text-wrap: prettyscrollIntoViewconst styles = {...}Object.assign(window, {...})text-wrap: prettyscrollIntoViewconst styles = {...}Object.assign(window, {...})