引言:程序员做UI的困境

周末准备做个Side Project,后端接口设计好了,数据库也建好了,就差界面…然后就卡住了。

传统方案都不够优雅:

  • 找设计师?预算有限,沟通成本高
  • 买模板?不灵活,改起来一堆问题
  • 自己硬搞?配色土气,间距混乱

更要命的是,现有的AI方案也有问题

  • 上来就让你选技术栈(Next.js? Android?)
  • 要求你去收集设计灵感
  • 生成的代码绑定框架,换平台得重写

有一个更优雅的方案:

✅ 不需要懂设计,AI当你的产品+UI专家
✅ 不限定技术栈,先做设计后选技术
✅ 生成静态HTML设计稿,可视化评审
✅ 定稿后还原到任何平台(Web/Android/iOS)

核心方法:AI驱动的设计优先工作流

方法论对比

在这里插入图片描述

为什么用静态HTML作为设计稿?

维度 静态HTML 直接生成框架代码
技术栈 无关,任何平台都能参考 绑定特定框架
预览速度 秒开,浏览器直接看 需要安装依赖、编译
修改成本 低,只关注视觉 高,涉及框架细节
复用性 一次设计多端用 换平台重写

第一步:描述需求(2分钟)

用自然语言描述你要什么,不需要写PRD。

案例:项目管理仪表板

## 功能需求
- 项目列表卡片(名称、描述、进度、团队成员)
- 顶部统计数据(总数、进行中、已完成)
- 侧边活动时间线
- "新建项目"按钮

## 目标用户
技术团队的项目经理和开发者

## 期望感觉
专业、现代、简洁、深色主题,类似Linear、Notion

第二步:让AI当产品+UI专家(5分钟)

核心技巧:让AI扮演专家角色,自己去参考优秀产品

完整Prompt模板

你现在同时扮演两个角色:
1. 资深产品经理:理解需求,参考同类产品最佳实践
2. 资深UI设计师:精通现代设计,擅长B2B/SaaS产品

## 我的需求
[粘贴上面的需求描述]

## 你的任务

### 阶段1:产品设计
1. 参考Linear、Notion等优秀产品
2. 给出3个布局方案并推荐最佳

### 阶段2:UI设计
设计完整视觉方案:
- 配色方案(主色、背景、文本)
- 字体系统(大小和权重)
- 间距系统(容器、卡片、元素)
- 圆角和阴影
- 交互状态(hover、active)

### 阶段3:生成设计稿
用纯HTML+内联CSS生成完整静态页面:
- 现代CSS(Flexbox/Grid)
- 所有样式内联
- 包含交互状态
- 浏览器直接打开可用

## 输出格式
1. 产品方案(3个布局 + 推荐理由)
2. UI设计系统(详细参数)
3. 完整HTML代码

在这里插入图片描述

AI响应示例(实际生成)

产品方案:

推荐方案:三栏布局(主内容区 + 侧边栏)
- 顶部:统计卡片(总数、进行中、已完成、团队成员)
- 主内容区:项目卡片网格(自适应列数)
- 右侧边栏:活动时间线(固定320px宽度)
- 优势:信息层级清晰,符合Linear/Notion布局习惯,桌面端体验最佳

UI设计系统:

配色(深色主题,参考Linear):
- 背景层级:#0d0d0d(主背景)/ #161616(卡片)/ #1f1f1f(悬浮)/ #262626(提升)
- 文本层级:#ffffff(主文本)/ #a6a6a6(次级)/ #737373(三级)/ #525252(禁用)
- 强调色:#5e6ad2(Linear蓝紫,主色)/ #6b77e0(悬浮)/ #4f5bc4(激活)
- 语义色:#10b981(成功)/ #f59e0b(警告)/ #ef4444(错误)

字体系统:
- 大小:11px/13px/15px/17px/20px/24px/30px(7级)
- 权重:400(常规)/ 500(中等)/ 600(半粗)/ 700(粗体)

间距系统(8px基准):
- 4px/8px/12px/16px/20px/24px/32px/40px/48px/64px(11级)

圆角:4px(小)/ 6px(中)/ 8px(大)/ 12px(超大)
阴影:4级深度(sm/md/lg/xl)
过渡:150ms/200ms/300ms(fast/base/slow)

HTML代码(实际结构):

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <style>
    :root {
      /* 配色方案 */
      --bg-primary: #0d0d0d;
      --bg-secondary: #161616;
      --bg-tertiary: #1f1f1f;
      --text-primary: #ffffff;
      --text-secondary: #a6a6a6;
      --accent-primary: #5e6ad2;
      
      /* 字体系统 */
      --text-xs: 11px;
      --text-sm: 13px;
      --text-base: 15px;
      --text-lg: 17px;
      --text-xl: 20px;
      --text-2xl: 24px;
      
      /* 间距系统 */
      --space-4: 16px;
      --space-5: 20px;
      --space-6: 24px;
      --space-8: 32px;
      
      /* 圆角 */
      --radius-lg: 8px;
      
      /* 过渡 */
      --transition-base: 200ms cubic-bezier(0.4, 0, 0.2, 1);
    }
    
    body {
      background: var(--bg-primary);
      color: var(--text-primary);
      font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
    }
    
    .app-container {
      display: flex;
      min-height: 100vh;
    }
    
    .main-content {
      flex: 1;
      padding: var(--space-8);
    }
    
    .sidebar {
      width: 320px;
      background: var(--bg-secondary);
      padding: var(--space-6);
    }
    
    .project-card {
      background: var(--bg-secondary);
      border: 1px solid #262626;
      border-radius: var(--radius-lg);
      padding: var(--space-5);
      transition: all var(--transition-base);
    }
    
    .project-card:hover {
      border-color: #404040;
      background: var(--bg-tertiary);
      transform: translateY(-2px);
      box-shadow: 0 10px 15px rgba(0, 0, 0, 0.5);
    }
  </style>
</head>
<body>
  <div class="app-container">
    <div class="main-content">
      <!-- 顶部统计卡片 -->
      <!-- 项目网格 -->
      <div class="project-card">...</div>
    </div>
    <div class="sidebar">
      <!-- 活动时间线 -->
    </div>
  </div>
</body>
</html>

在这里插入图片描述

**关键**:让AI扮演角色+参考优秀产品,AI会自动应用最佳实践。你不需要懂设计!

第三步:评审和迭代(3分钟)

用自然语言描述问题,AI自动调整。

常见调整场景

场景1:卡片间距太紧凑
"项目卡片之间只有16px间距,感觉有点挤。
增加到20px,让内容更透气。"


场景2:hover效果不够明显
"鼠标移到卡片上,变化太subtle了,
上移幅度加大到4px,阴影再深一点。"


场景3:统计数字不够醒目
"统计卡片里的数字24px还不够大,
改成28px-30px,让关键数据更突出。"

关键技巧:对比式调整

不说具体数值,用自然语言:
"背景太暗" → AI调亮
"间距太紧" → AI增加
"圆角太大" → AI减小
"字体太小" → AI放大

在这里插入图片描述

第四步:还原到具体技术栈

设计稿定稿后,还原到任何技术栈。一套设计,多端复用!

Web: Next.js + Shadcn/UI

我有完整的静态HTML设计稿(见附件)。

请还原到Next.js + Shadcn/UI + TailwindCSS:
1. 严格遵循设计稿的配色、字体、间距、圆角、交互
2. 使用Shadcn/UI的Card、Badge、Progress组件
3. 用TailwindCSS实现样式
4. 生成完整代码(page.tsx + 组件)

生成代码示例(精简):

// app/dashboard/page.tsx
import { Card, CardHeader, CardContent } from '@/components/ui/card'
import { Button } from '@/components/ui/button'

export default function DashboardPage() {
  return (
    <div className="min-h-screen bg-[#0d0d0d]">
      <div className="max-w-[1920px] mx-auto px-8 py-8">
        {/* 顶部统计卡片 */}
        <div className="grid grid-cols-4 gap-4 mb-8">
          {/* 统计卡片 */}
        </div>
        
        <div className="flex justify-between mb-6">
          <h1 className="text-xl font-semibold">项目列表</h1>
          <Button className="bg-[#5e6ad2] hover:bg-[#6b77e0]">+ 新建项目</Button>
        </div>

        <div className="flex gap-8">
          <div className="flex-1">
            <div className="grid grid-cols-[repeat(auto-fill,minmax(320px,1fr))] gap-4">
              <Card className="bg-[#161616] border-[#262626] hover:bg-[#1f1f1f] hover:border-[#404040] hover:-translate-y-0.5 transition-all">
                {/* 项目卡片 */}
              </Card>
            </div>
          </div>

          <div className="w-[320px] bg-[#161616] border-l border-[#262626] p-6">
            {/* 侧边栏 - 活动时间线 */}
          </div>
        </div>
      </div>
    </div>
  )
}

Android: Jetpack Compose

将同一设计稿还原到Android Jetpack Compose:
1. 配色转换为Color定义
2. 间距转换为dp
3. 使用Material 3组件
4. 生成完整Kotlin代码

生成代码示例(精简):

// ui/theme/Color.kt
val DarkBackground = Color(0xFF0D0D0D)
val CardBackground = Color(0xFF161616)
val PrimaryBlue = Color(0xFF5E6AD2)

// DashboardScreen.kt
@Composable
fun DashboardScreen() {
    Scaffold(containerColor = DarkBackground) {
        Column(
            modifier = Modifier
                .padding(32.dp)
                .fillMaxSize()
        ) {
            // Header
            Row(
                modifier = Modifier.fillMaxWidth(),
                horizontalArrangement = Arrangement.SpaceBetween
            ) {
                Text("项目列表", fontSize = 20.sp, fontWeight = FontWeight.SemiBold)
                Button(onClick = {}, colors = ButtonDefaults.buttonColors(
                    containerColor = PrimaryBlue
                )) {
                    Text("+ 新建项目")
                }
            }

            Spacer(modifier = Modifier.height(48.dp))

            // Projects Grid
            LazyVerticalGrid(
                columns = GridCells.Adaptive(320.dp),
                horizontalArrangement = Arrangement.spacedBy(24.dp)
            ) {
                items(projects) { project ->
                    ProjectCard(project)
                }
            }
        }
    }
}
**核心价值**:静态HTML定稿后,还原到任何技术栈只需5分钟!所有视觉参数已确定,AI只需"翻译"成不同语言。

进阶技巧

1. 参考特定产品风格

✅ 具体描述:
"参考Linear的配色(低饱和度深色)、
间距系统(宽松留白)、
微交互(subtle hover效果)"

✅ 更好的描述:
"打开Linear项目列表页,注意:
- 卡片和背景对比subtle但层次清晰
- hover时卡片轻微上移,阴影加深
- 文本有3层级:标题/正文/辅助,对比明显
请复刻这种设计感觉"

2. 建立设计系统库

第一次生成满意的设计后,提取设计系统:

# design-system.md
配色:主色#5e6ad2 / 背景#0d0d0d / 卡片#161616 / 悬浮#1f1f1f
文本:主文本#ffffff / 次级#a6a6a6 / 三级#737373
间距:页面32px / 卡片20px / 元素16px / 小间距8px
圆角:大卡片8px / 按钮6px / 标签4px
字体:H1 20px/600 / 正文15px/400 / 小文本13px/400

下次直接引用:

根据我的设计系统(见design-system.md),
设计用户设置页面的静态HTML。
保持配色、间距、圆角完全一致。

3. 组件库思维

从设计稿中提取可复用组件的独立HTML:
- ProjectCard(项目卡片)
- StatusBadge(状态标签)
- ProgressBar(进度条)
- AvatarGroup(头像组)

每个组件独立文件,包含CSS,有多个变体。

避坑指南

错误1:设计稿太复杂

❌ 第一次就设计复杂页面,几千行代码难调整
✅ 先做核心页面,满意后再拆分组件

错误2:过早绑定技术栈

❌ 一开始就说"用React生成",需求变了前功尽弃
✅ 先用静态HTML做设计,定稿后再还原

错误3:忽略交互状态

❌ 只有默认状态,没有hover/active/disabled
✅ 设计阶段就要求所有交互状态

错误4:没有保存设计决策

❌ 做完就扔,下次又从头开始
✅ 保存设计稿+设计系统+组件库,持续复用

常见问题

Q1:静态HTML能有多高保真?
A:非常高!包含所有视觉细节、交互状态、响应式布局、动画效果。唯一缺少业务逻辑。

Q2:如何确保还原一致?
A:在Prompt中明确:“严格遵循设计稿的每个细节,精确到颜色值、间距、圆角。如果框架没有精确值,用自定义保证视觉一致。”

Q3:PM要改怎么办?
A:静态HTML改动成本极低(1分钟),而已写好的框架代码可能要10-20分钟。在设计稿阶段多迭代,定稿后再写代码。

Q4:AI设计真的好看吗?
A:取决于Prompt质量。提供参考对象(“参考Linear的配色、Notion的布局”),AI会"学习"优秀产品的设计。

总结

核心方法

设计与技术分离 - 先做设计,再选技术
AI驱动设计 - AI当产品+UI双重专家
静态HTML作桥梁 - 可视化、技术栈无关
自然语言迭代 - 不需要懂代码
一次设计多端复用 - Web/Android/iOS通用

立即实践

  1. 想一个小项目(待办、记账、笔记)
  2. 用本文Prompt让AI生成静态设计稿
  3. 浏览器预览,迭代2-3次
  4. 还原到你的技术栈

建立资产库

my-design-system/
├── designs/          # 静态设计稿
├── design-system.md  # 设计系统
├── components/       # 可复用组件
└── prompts/         # Prompt模板

AI不是取代设计师,而是让每个开发者都能做出专业UI。


系列文章


感谢阅读!如果这篇文章对你有帮助,欢迎点赞、收藏、分享。我们下期见!👋

有问题欢迎在评论区讨论,我会尽量回复每一条评论。

🎉 感谢关注,让我们一起享受技术带来的精彩!

我做了一个个人主页,能找到所有我提供给你的资源: 个人主页

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐