间距与尺寸
间距(padding/margin)和尺寸(width/height)是 CSS 里最频繁出现的两类属性。Tailwind 把它们系统化为"以 4px 为基础单位"的比例尺,这是它约束系统的核心体现。本篇详解这四大系列。
1. 4px 比例尺的设计哲学
Tailwind 规定所有间距必须是 4px 的倍数(少数特殊情况除外)。所以:
p-1= 4pxp-2= 8pxp-3= 12pxp-4= 16pxp-6= 24pxp-8= 32pxp-12= 48pxp-16= 64px
乍看是"被限制了",实则这是 Tailwind 最大的优势之一:你不再纠结"用 13px 还是 14px",只能从比例尺里选,设计天然一致。全站间距都遵循同一套节奏,看起来就专业。
2. padding 系列
p-* 是 padding(内边距)。配合方向后缀可以精准控制各方向:
<!-- padding 系列:数字代表 4px 的倍数 -->
<div class="p-4"> <!-- padding: 16px(四周) -->
<div class="p-8"> <!-- padding: 32px -->
<div class="px-4"> <!-- padding-left/right: 16px(左右) -->
<div class="py-2"> <!-- padding-top/bottom: 8px(上下) -->
<div class="pt-4"> <!-- padding-top: 16px -->
<div class="pr-2"> <!-- padding-right: 8px -->
<div class="pb-8"> <!-- padding-bottom: 32px -->
<div class="pl-0"> <!-- padding-left: 0 -->
<!-- 完整比例尺(摘录):
p-0 => 0
p-1 => 4px
p-2 => 8px
p-3 => 12px
p-4 => 16px
p-5 => 20px
p-6 => 24px
p-8 => 32px
p-10 => 40px
p-12 => 48px
p-16 => 64px
p-20 => 80px
p-24 => 96px
p-32 => 128px -->方向后缀要熟记:
- 无后缀(如
p-4):四周都是 16px x(如px-4):左右(left + right)各 16pxy(如py-2):上下(top + bottom)各 8pxt(如pt-4):仅上 16pxr(如pr-2):仅右 8pxb(如pb-8):仅下 32pxl(如pl-0):仅左 0
3. margin 系列
m-* 是 margin(外边距),命名规律和 padding 完全一致。最经典的写法是水平居中:
<!-- margin 系列:同样以 4px 为单位 -->
<div class="m-4"> <!-- margin: 16px(四周) -->
<div class="mx-auto"> <!-- margin: 0 auto(水平居中!经典写法) -->
<div class="my-8"> <!-- margin-top/bottom: 32px -->
<div class="mt-4"> <!-- margin-top: 16px -->
<div class="mb-2"> <!-- margin-bottom: 8px -->
<!-- 负边距:用 - 前缀,常用于"破格"效果 -->
<div class="-mt-4"> <!-- margin-top: -16px,向上挤压 -->
<div class="-mx-2"> <!-- margin: 0 -8px,允许内容超出 padding -->负边距用 - 前缀,常用于"破格"效果——让元素向上挤压、或允许内容超出父元素 padding。
4. space-x / space-y:子元素等距
当你有一组兄弟元素需要两两之间等距时(比如垂直列表),用 space-y-* 或 space-x-* 比手动给每个子元素加 margin 方便得多:
<!-- 兄弟元素之间的等距间距(子元素之间加分隔,首尾不带) -->
<div class="space-y-4">
<div>第一项</div> <!-- 与下一项间距 16px -->
<div>第二项</div>
<div>第三项</div>
</div>
<div class="space-x-4 flex">
<div>左</div> <!-- 与右侧间距 16px -->
<div>中</div>
<div>右</div>
</div>
<!-- 注意:space-* 是给子元素加 margin 实现的,
如果子元素本身有 margin 或自带背景,
可能出现预期外的边距合并问题 -->5. width 系列
宽度类是另一高频系列。除了像素值,Tailwind 还提供分数、百分比、视口单位:
<!-- 固定宽度 -->
<div class="w-16"> <!-- width: 64px -->
<div class="w-1/2"> <!-- width: 50% -->
<div class="w-1/3"> <!-- width: 33.33333% -->
<div class="w-2/3"> <!-- width: 66.66667% -->
<div class="w-full"> <!-- width: 100% -->
<div class="w-screen"> <!-- width: 100vw -->
<!-- 最大宽度(常用于限制内容可读宽度) -->
<div class="max-w-md"> <!-- max-width: 28rem(448px) -->
<div class="max-w-2xl"> <!-- max-width: 42rem(672px) -->
<div class="max-w-7xl"> <!-- max-width: 80rem(1280px) -->
<div class="max-w-none"> <!-- max-width: none -->
<!-- 最小宽度 -->
<div class="min-w-0"> <!-- min-width: 0(flex 子项防溢出) -->max-w-* 系列尤其重要。它用于限制内容的最大宽度,提升可读性——文字行宽超过 80 字符就难读。常见的容器写法:
max-w-md:28rem(448px),适合手机端表单max-w-3xl:48rem(768px),适合博客正文max-w-5xl:64rem(1024px),适合文章 + 侧栏max-w-7xl:80rem(1280px),适合后台 dashboard
6. height 系列
高度的命名和宽度完全对称,但实际项目里高度用得少——大多数时候高度由内容撑开。几个常用的:
<!-- 高度 -->
<div class="h-8"> <!-- height: 32px -->
<div class="h-full"> <!-- height: 100%(父元素需有高度) -->
<div class="h-screen"> <!-- height: 100vh(全屏) -->
<div class="min-h-screen"> <!-- min-height: 100vh(整页布局) -->
<!-- 视口百分比 -->
<div class="h-1/2"> <!-- height: 50%(需父元素有高度) -->7. 常见技巧
几个高频组合,值得记住:
<!-- 1. flex 子项防溢出:配合 min-w-0 让超长文本可省略 -->
<div class="flex">
<div class="min-w-0 flex-1 truncate">超长文本会被截断...</div>
</div>
<!-- 2. 居中容器:max-w + mx-auto 是经典 -->
<main class="max-w-3xl mx-auto px-4">
内容最多 768px 宽,左右自动留白
</main>
<!-- 3. 卡片间距统一用 gap-* 替代 margin(grid/flex 子项) -->
<div class="grid grid-cols-2 gap-4">
<div>A</div>
<div>B</div>
</div>8. 自定义间距
如果默认比例尺不够用(比如要 p-18 = 72px),可以在配置里扩展:
后面"自定义配置"篇会详讲。建议优先用默认值,实在不够再扩展——保持全站节奏一致比"精确到像素"更重要。
小结
记住这张表:
p-*:padding,加方向后缀x/y/t/r/b/lm-*:margin,负边距用-*space-x/y-*:子元素等距w-*:固定宽度,分数 / 百分比 / 视口max-w-*:最大宽度,限制可读宽度h-*:高度,常用h-screen全屏
掌握这些,你已经能拼出 80% 静态页面的骨架。下一篇我们学布局——怎么把这些元素排成 flex 行、grid 网格。
← 上一篇 Utility-first 原子化思想
下一篇 Flexbox 与 Grid 布局 →