做产品 PMaker 首页
搜索
跟随系统
颜色主题
空格的键盘
组件不统一,页面再怎么调都像拼的每个页面各造一套圆角、字号、内边距全不一样,改一处要改七八个文件AI 每次只看到当前页面,没有全局视野,一定会自己造一套组件被复用圆角定完一次,后面几十个页面都不用再想新页面基本就是拼装,不再需要做样式决定组件先行把设计决定从「每次都做」变成「做一次」

同一个按钮在三个页面长了三个样。不是谁做错了,是它从来没被定义过。

先定组件后拼页

组件不统一,页面再怎么调都像拼的。

先把常用的十几个组件定下来,再用它们拼页面。反过来做,每个页面都会长出一套自己的样式。

你会遇到的现象:

  • 同一个按钮在不同页面上圆角、字号、内边距都不一样
  • 改一个样式要在七八个文件里各改一遍,还漏了两处
  • 让 AI 做新页面,它又造了一套新的卡片样式

vibecoding 里这个问题格外突出。AI 每次只看到当前这一个页面,没有全局视野,所以每做一个页面它都会重新发明一遍按钮。你不给它一套现成的组件,它就一定会自己造。

组件先行还有个附带好处:**它把设计决定从「每次都做」变成了「做一次」。**按钮的圆角定完之后,后面几十个页面都不用再想这件事。这也是设计系统的核心价值:把重复的视觉决定固化成可复用的资产,而不是每个页面重来一遍。design-systems-101

更现实地看,组件先行也是给 AI 编程兜底。AI 生成页面时的默认行为是照着当前页面的上下文现做——你不定义组件,等于默认允许它每次即兴发挥。这些零散决定攒下的债,会在第五个页面之后集中爆发,到时候再回头统一,成本是现在的好几倍。

先定哪十来个

组件 要定清楚什么
按钮 主要 / 次要 / 危险三种,每种含默认、悬停、按下、禁用、加载五个状态
输入框 默认、聚焦、报错、禁用、只读,加上标签和提示文字的位置
卡片 内边距、圆角、边框还是阴影,二选一别都用
列表项 行高、分隔方式、悬停态、选中态
标签 状态色一套,尺寸一到两种
弹窗 / 抽屉 宽度、标题区、内容区、按钮区的固定结构
空态 / 加载 / 错误 三个通用组件,全站复用(见四态齐全
提示条 成功、警告、错误三种,位置和消失时机统一

这八类覆盖了绝大多数界面。它们定完,新页面基本就是拼装工作,不再需要做样式决定。起步阶段可以只定按钮、输入框、卡片三件套,跑通第一个页面之后再补其余几类——别为了「完整」先停下来设计三个月。

定的时候要写清楚具体数值,不能只写「圆角小一点」。数值要从间距字号那两组变量里取,而不是各自新定。更稳妥的做法是直接引用变量名:写「radius-1」比写「圆角 8px」更好——前者在换主题时不用改几十处。

给 AI 的话

CLAUDE.md · 组件规则

## 组件

项目已有的组件在 src/components/ui/ 下。
做任何页面之前,先看一遍这个目录。

强制要求:
- 需要按钮、输入框、卡片、列表项、标签、弹窗、
  空态、加载态、错误态时,一律使用已有组件,
  不要在页面里写内联样式或新建同类组件。
- 已有组件不满足需求时,先告诉我缺什么、
  建议怎么扩展(加一个 variant 还是加一个 prop),
  等我确认再改。不要绕过去自己写一个。
- 新建组件时,颜色 / 间距 / 字号 / 圆角必须引用设计变量,
  不允许写死数值。
- 每个组件都要实现完整状态:按钮五态、输入框五态。

做完页面后,列出你用到的所有组件,
以及有没有新建或修改过任何组件。

最后那句是个轻量的审计。它能让你及时发现 AI 偷偷造了新组件,而不是等到第五个页面才发现风格漂了。

**怎么验收。**做新页面时故意不看组件目录,先让 AI 自由发挥,画完对照组件清单数一数它「新造」了几个组件。为零,说明规则生效了;为两三个以上,说明组件库覆盖不够——先把缺的组件补进库里,再继续做页面,别让临时样式落地。

参考资料

  1. Design Systems 101 — Nielsen Norman Group