做产品 PMaker 首页
搜索
跟随系统
颜色主题
空格的键盘
间距的差别要能表达关系随手定11、13、14、15,一堆相近但不相等的值差别小到看不出故意,大到能被感觉到,页面有点乱却说不清一套固定值4 / 8 / 16 / 24 / 40 / 64,间距变成有意义的信号8 表示紧密相关,24 表示这是两个不同的组五到六个值就够用,定好之后间距不再是每次要做的决定

随手定会攒出一堆相近但不相等的值;固定一组值之后,8 表示紧密相关,24 表示不同的组。

一套间距

定一组固定数值,别每个地方现拍一个。

页面上所有的间距只从一组固定数值里取。定好之后,间距就不再是每次要做的决定。

你会遇到的现象:

  • 页面说不上哪里不对,就是有点乱
  • 两个模块的内边距差 2px,看着别扭但找不到原因
  • 让 AI 改一处间距,它顺手把别处也改了,值还都不一样

随手定的间距会产生一堆相近但不相等的值:11、13、14、15。这些差别小到看不出是故意的,大到能被感觉到,结果就是「有点乱」但说不清哪里乱。用固定的一组值之后,间距的差别变成了有意义的信号:8 表示紧密相关,24 表示这是两个不同的组。这是格式塔分组原则里的接近性在数值上的落地——靠近的物体会被感知成一组,间距就是它的量化版本。grouping

间距回答的是「这些内容是不是一回事」。8 和 24 之间的距离差,比任何分割线都安静;删掉分割线之后,正是这组数在替分割线表达分组。这也是为什么视觉层级和留白优先的做法都要先有一套间距——没有固定值,分层就无从谈起。

怎么定这组数

五到六个值就够用。多了等于没定,因为总能找到一个「差不多合适」的;少了会不够用,被迫破例。定完之后顺手把每个值该用在哪写进文档,团队和 AI 就都能照着用。下面这组是常见起点:

用在哪 典型场景
4 元素内部 图标和文字之间、标签内边距
8 紧密相关的两项 标题和它的正文、表单标签和输入框
16 同一组内的条目 列表项之间、卡片的内边距
24 组与组之间 两个区块之间、卡片之间
40 / 64 大区块和页面边距 页面顶部留白、章节之间

基数取 4 或 8 都行,关键是全站只有一套。取 4 的倍数更灵活,取 8 的倍数更整齐;移动端因为屏幕小,通常从 4 起步。

怎么用

  • **间距差要能表达关系。**相邻两级之间至少差 1.5 倍,8 和 24 的差别一眼能看出来,8 和 12 就模糊了。
  • **竖向间距比横向更重要。**人是纵向扫页面的,纵向的节奏乱了最容易被感知。
  • **写成变量,不要写死。**定义成 CSS 变量或设计令牌,改一次全站生效。
  • **破例要有理由。**确实需要一个不在表里的值时,先想想是不是层级关系没理清。理清之后通常会发现,不是缺一个值,而是这个元素根本不该出现在这里。

验收也很简单:把页面截图缩小到 50% 眯着眼看。缩小的图抹掉文字细节,剩下的就是间距的节奏——相关的元素是不是聚成一团、不同的组是不是拉开了。如果缩小后还是乱的,十有八九是有人现拍了值。间距是 AI 最容易随手生成的属性之一,这也是为什么要把这组数写进约束文件,而不是指望每次提醒它。

给 AI 的话

把间距规范写进项目的约束文件,AI 每次生成界面都会遵守。

CLAUDE.md · 间距规范

## 间距

全站间距只能取这组值,不允许出现其他数字:
4 / 8 / 16 / 24 / 40 / 64(单位 px)

用法:
- 4 元素内部,比如图标和文字之间
- 8 紧密相关的两项,比如标题和它的正文
- 16 同组条目之间、卡片内边距
- 24 组与组之间、卡片之间
- 40 / 64 大区块之间、页面上下边距

要求:
- 定义成 CSS 变量(--sp-1 到 --sp-6),
  组件里引用变量,不要写具体数值。
- 如果某处你认为需要表里没有的值,先告诉我原因,
  不要自己取一个中间值。
- 已有代码里出现表外的间距值时,主动指出来。

最后一条挺有用。让 AI 顺手做体检,比你自己逐个查快得多。间距和字号阶梯是同一套思路的两半:数值都收敛成固定组,页面才谈得上秩序感。

参考资料

  1. Principles of grouping — Wikipedia