设计与 CSS 里的留白,各自叫什么
版面里「空着的地方」并非一种东西。元素之外、元素之内、列与列之间、行与行之间、字与字之间…… 每一处留白都有专名,也对应不同的 CSS 属性。下面这张图把九个名字汇在一处,本页把它们逐个做成可观察的 demo——margin / padding 还能拖动滑块实时看变化。
为什么要把「空白」拆成九个名字,而不笼统称作 spacing?因为同样一句「这里松一松」,在 CSS 里往往由完全不同的属性实现,改动的层级与副作用也各不相同。举个常见场景——想让一个按钮看起来更宽松:给它加 padding,是让按钮自身变大、文字离边框更远、连点击区一起放大;给它加
margin,按钮大小纹丝不动,只是把它和周围元素拉开——两者都让画面「松了」,落到代码却是两回事。其余几种同理:margin 还会与相邻元素折叠(上下相邻取较大值而非相加)、gap 既不折叠也不计入盒子尺寸、line-height
调的是文字行内而非盒子。把每一处留白对应到盒模型里确定的一层、确定的属性,设计意图才能无歧义地落到代码——否则「这里再松一点」既可能指 margin,也可能指 line-height,沟通与实现都会走样。
1 · 把它们放在一起看
九个名字其实落在四个层级上:margin / padding 是单个盒子的内外(CSS 盒模型);gutter / row-gap 是盒子之间的横竖间隔(由 gap 统一表达);grid / safe-area 是整体版面的骨架与安全边界;line-height / letter-spacing 是文字内部的疏密;而
negative space 站在更高处,是对所有留白的统筹审美。分清它们,沟通和实现时才不会把「再多留点空」这句话译错成代码。
一个常见混淆:margin vs padding。记住「外 margin、内 padding」——以元素 border 为界,border 之外是 margin(隔开邻居),border 之内是 padding(撑开内容)。上面 margin / padding 两个 demo 的染色带正是这两段空间。
延伸阅读
- CSS 盒模型导论 developer.mozilla.org content / padding / border / margin 四层的权威定义与图解。
- gap (row-gap / column-gap) developer.mozilla.org Grid / Flexbox 里 gutter 与 row gap 的统一写法。
- env() · safe-area-inset developer.mozilla.org 移动端安全区如何用 env() 取值并避让刘海与圆角。
- 本仓 · CSS Grid 网格轨道与 gap 的二维布局模型,本页 grid / gutter 的延伸。
- 本仓 · Web 排版 line-height / letter-spacing 之外,一行字真正怎么排布。