首页 / Tailwind CSS 入门教程 / 间距控制:padding与margin

Tailwind CSS 入门教程

间距控制:padding与margin

本教程共 50 篇 · 第 21 篇 · 更新于 2026-07-29 · 约 7 分钟阅读

Tailwind CSSTailwind CSS 入门教程paddingmargin间距space-between负边距

21. 间距控制:padding与margin

本节目标:彻底搞懂 Tailwind 的间距命名体系,能熟练用 padding 控制内边距、margin 控制外边距、space-* 控制子元素间距,不再纠结该用哪个类。

间距是 CSS 里最常用但也最容易写乱的属性。Tailwind 用一个统一的间距比例系统解决了这个问题。

间距比例体系

Tailwind 所有间距类共用同一套刻度。数字越大,间距越大:

数字rempx常见用途
000无间距
0.50.125rem2px极小间距
10.25rem4px紧凑元素内
20.5rem8px标签内部
30.75rem12px表单项
41rem16px默认内边距
61.5rem24px卡片内边距
82rem32px区域间距
123rem48px大区块间距
164rem64px页面级间距
Tip

记住「数字 × 4 = 像素值」这个规律(大部分情况)。比如 p-4 就是 16px,p-6 就是 24px。

padding:内边距

p-{size} 控制元素内容到边框的距离。

<div class="p-4">四周各 16px 内边距</div>

方向性 padding

类名方向
pt-{size}上(top)
pr-{size}右(right)
pb-{size}下(bottom)
pl-{size}左(left)
px-{size}水平(左右)
py-{size}垂直(上下)
<!-- 经典的按钮内边距:水平大、垂直小 -->
<button class="px-4 py-2 bg-blue-500 text-white rounded">
  点击我
</button>
Note

v4 中不再推荐使用 start-* / end-* 命名(如 ps-4pe-4),改用 inset-s-* / inset-e-*。旧类会发出警告,未来版本移除。这是 v4.2 的破坏性变更。

margin:外边距

m-{size} 控制元素边框到外部的距离。语法跟 padding 完全对称:

<div class="m-4">四周各 16px 外边距</div>
<div class="mt-2">上边距 8px</div>
<div class="mx-auto">水平居中</div>
<div class="my-8">垂直方向 32px 间距</div>

负值 margin

在类名前加 - 就是负值:

<div class="-mt-4">向上偏移 16px</div>
<div class="-mx-2">向两侧溢出 8px</div>

负 margin 常用于:

  • 让元素突破容器边界
  • 重叠效果
  • 抵消父容器的 padding
<!-- 子元素宽度超出父容器,左右各溢出 16px -->
<div class="p-4">
  <div class="-mx-4 bg-blue-100 p-4">
    我跟父容器边缘齐平
  </div>
</div>

auto margin

mx-auto 是最常用的 auto margin,让块级元素水平居中:

<div class="mx-auto max-w-2xl">
  居中内容,最大宽度 672px
</div>

在 flex 容器中,ml-automt-auto 等有特殊用途:

<div class="flex">
  <div>靠左</div>
  <div class="ml-auto">靠右</div>
</div>
Warning

mx-auto 只对块级元素且设置了宽度(或 max-width)的元素生效。没宽度的话,块级元素默认占满,auto margin 分配不到空间。

space-between:子元素间距

space-x-{size}space-y-{size} 是给子元素批量加间距的利器,不需要手动给每个子元素设 margin。

<!-- 水平排列,子元素之间 16px 间距 -->
<div class="flex space-x-4">
  <button>按钮1</button>
  <button>按钮2</button>
  <button>按钮3</button>
</div>

<!-- 垂直排列,子元素之间 8px 间距 -->
<div class="space-y-2">
  <div>项目1</div>
  <div>项目2</div>
  <div>项目3</div>
</div>

它的工作原理是给除了第一个子元素外的所有子元素添加 margin-left(或 margin-top)。

反向间距

当 flex 方向是 flex-row-reverseflex-col-reverse 时,需要配合 space-x-reverse / space-y-reverse,否则间距方向会反:

<div class="flex flex-row-reverse space-x-4 space-x-reverse">
  <!-- 反向排列,间距方向正确 -->
  <div>3</div>
  <div>2</div>
  <div>1</div>
</div>
Tip

什么时候用 space-* 而不是给每个子元素加 margin?当你有一组同类的子元素(按钮组、列表项、表单字段)且它们间距一致时,space-* 更简洁。但如果子元素间距各不相同,还是手动加 margin 更灵活。

实际应用:卡片组件

综合运用 padding、margin 和 space:

<div class="p-6 bg-white rounded-lg shadow">
  <h2 class="text-xl font-bold mb-2">卡片标题</h2>
  <p class="text-gray-600 mb-4">卡片内容描述文字...</p>
  <div class="flex space-x-2">
    <button class="px-4 py-2 bg-blue-500 text-white rounded">确认</button>
    <button class="px-4 py-2 border rounded">取消</button>
  </div>
</div>
  • p-6 → 卡片内部留白
  • mb-2 / mb-4 → 文本之间的间距
  • space-x-2 → 按钮之间的间距
  • px-4 py-2 → 按钮自身的内边距

间距一致性原则

说实话,间距这事儿看着简单,但乱起来真的能让人抓狂。我自己平时就遵循几个原则:

  1. 坚持 4 的倍数:4、8、16、24、32、48、64……这就像音乐的节拍一样,保持住视觉节奏,页面就不会显得杂乱。我见过不少设计师一开始没注意,后面改起来特别痛苦。
  2. 根据内容密度来定:信息密集的区域用 2-4 就够,大段落之间可以用 6-8,给人呼吸感。
  3. padding 和 margin 分工明确:组件内部空间用 padding 定义,组件之间的距离用 margin 控制。这招让我少踩了不少坑。
  4. 能用 gap/space- 就别逐个加 margin*:一组元素间距一致时,gap(flex/grid)或 space-*(子元素)既简洁又省心,后面改起来也方便。

本节小结

  • p-{size} / m-{size} → 内/外边距
  • px- / py- / pt- / pr- / pb- / pl- → 方向性
  • -m-{size} → 负值 margin
  • mx-auto → 水平居中
  • space-x-{size} / space-y-{size} → 子元素间距
  • 数字 × 4 ≈ 像素值(记忆技巧)