Bootstrap: 间距
最后更新:2026-08-26
1. 本课导读
(1) 前置知识
- 掌握 Bootstrap 排版体系(h1~h6、display 标题)
- 熟悉文字颜色
.text-*和对齐工具类
(2) 🎯 你将学到
- 理解间距刻度体系(0~5)及对应的 rem 值
- 掌握 margin 和 padding 的方向缩写规则
- 学会使用响应式间距(如
p-md-5) - 熟练使用
gap-*和mx-auto工具类 - 能独立精确控制页面元素之间的间距
(3) 痛点
Alice 在上一课写了个人主页,但发现卡片之间太挤、标题离文字太近——传统方式要给每个元素写 margin-bottom: 1.5rem。
(4) 解法
Bootstrap 的间距工具类让这一切变得简单。它提供了一套基于 rem 的间距工具类,覆盖 margin 和 padding 的所有方向组合,让你不需要写一行 CSS 就能精确控制元素间距。Bootstrap 只需一个 mb-4。
理解方式: Bootstrap 的间距系统就像一个"步进尺"——每个数字代表一个固定刻度值(从 0.25rem 到 3rem),你只需要选数字,不用记像素值。
(5) 收益
使用 Bootstrap 间距工具类后,Alice 只需 mb-4、p-3 这样的 class 就能精确控制元素间距,告别手写 CSS 的繁琐,页面布局更加整洁高效。
2. 间距刻度
间距刻度从 0 到 5,每个数字对应一个 rem 值:
| 刻度 | rem | px(16px 基准) | 类比 |
|---|---|---|---|
0 |
0 | 0px | 无间距 |
1 |
0.25 | 4px | 极小间距 |
2 |
0.5 | 8px | 紧凑间距 |
3 |
1 | 16px | 标准间距 |
4 |
1.5 | 24px | 大间距 |
5 |
3 | 48px | 极大间距 |
此外还有 auto(自动)。
3. 属性与方向
class 命名规则:{p|m}{t|b|s|e|x|y|空白}{0|1|2|3|4|5|auto}
m t 3
^ ^ ^
属性 方向(可选) 数值
| 部分 | 选项 | 含义 |
|---|---|---|
| 属性 | m |
margin(外边距) |
p |
padding(内边距) | |
| 方向 | t |
top(上) |
b |
bottom(下) | |
s |
start(左,逻辑属性) | |
e |
end(右,逻辑属性) | |
x |
left + right(水平) | |
y |
top + bottom(垂直) | |
| 空白 | 四个方向 |
注意: Bootstrap 5 使用逻辑属性
s(start)和e(end)替代了l(left)和r(right),以更好地支持 RTL(从右到左)语言。中文和英语场景下s= 左,e= 右。
▶ 示例:间距刻度演示
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Spacing Demo</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
<style>
.box { background: #e9ecef; border: 1px solid #0d6efd; }
.highlight { background: #0d6efd; color: #fff; text-align: center; }
</style>
</head>
<body>
<div class="container py-4">
<!-- Margin bottom -->
<div class="box">
<div class="highlight mb-0">mb-0</div>
<div class="highlight mb-1">mb-1 (4px)</div>
<div class="highlight mb-2">mb-2 (8px)</div>
<div class="highlight mb-3">mb-3 (16px)</div>
<div class="highlight mb-4">mb-4 (24px)</div>
<div class="highlight mb-5">mb-5 (48px)</div>
</div>
<hr>
<!-- Padding all sides -->
<div class="box p-0"><span>p-0</span></div>
<div class="box p-3 mt-2"><span>p-3 (16px on all sides)</span></div>
<div class="box p-5 mt-2"><span>p-5 (48px on all sides)</span></div>
</div>
</body>
</html>
输出: Bootstrap 5.3 样式生效的组件效果(如按钮、卡片、轮播、折叠等),页面默认采用 Bootstrap 默认主题(亮色)和响应式网格。
4. 常用间距组合
实际开发中最常用的间距模式:
<!-- Card list: spacing between cards -->
<div class="card mb-3">Card 1</div>
<div class="card mb-3">Card 2</div>
<div class="card mb-3">Card 3</div>
<!-- Section: vertical padding -->
<section class="py-5">Section with 48px top & bottom padding</section>
<!-- Button: margin around -->
<button class="btn btn-primary me-2">Save</button>
<button class="btn btn-secondary">Cancel</button>
<!-- Container: horizontal padding -->
<div class="px-4">Content with comfortable side padding</div>
输出: Bootstrap 5.3 样式生效的组件效果(如按钮、卡片、轮播、折叠等),页面默认采用 Bootstrap 默认主题(亮色)和响应式网格。
| 模式 | 常见写法 | 作用 |
|---|---|---|
| 卡片间距 | mb-3 |
卡片之间留 16px 间隙 |
| 区块间距 | py-5 |
区块上下各 48px 留白 |
| 按钮间距 | me-2 |
按钮组之间留 8px |
| 容器内边距 | px-4 |
左右各 24px 安全边距 |
5. 水平居中:mx-auto
当元素有固定宽度时,mx-auto 实现水平居中:
▶ 示例:水平居中
<div style="width: 200px;" class="mx-auto bg-primary text-white text-center p-3">
Centered block with mx-auto
</div>
输出: Bootstrap 5.3 样式生效的组件效果(如按钮、卡片、轮播、折叠等),页面默认采用 Bootstrap 默认主题(亮色)和响应式网格。
mx-auto等价于 CSS 的margin-left: auto; margin-right: auto;,适用于所有块级元素。
6. 响应式间距
间距工具类支持所有断点后缀,让不同屏幕尺寸拥有不同的间距:
<div class="p-3 p-md-5 bg-light">
Resize the browser to see padding change at 768px breakpoint.
</div>
输出: Bootstrap 5.3 样式生效的组件效果(如按钮、卡片、轮播、折叠等),页面默认采用 Bootstrap 默认主题(亮色)和响应式网格。
| 写法 | 手机 (xs) | 平板 (md+) |
|---|---|---|
p-3 p-md-5 |
16px | 48px |
mb-2 mb-lg-0 |
8px margin-bottom | 0 margin-bottom |
pt-4 pt-xl-5 |
24px padding-top | 48px padding-top |
7. gap 间距
Flexbox 和 Grid 布局中,gap 工具类控制子元素之间的间距:
<div class="d-flex gap-3">
<div class="bg-primary text-white p-3">Item 1</div>
<div class="bg-primary text-white p-3">Item 2</div>
<div class="bg-primary text-white p-3">Item 3</div>
</div>
输出: Bootstrap 5.3 样式生效的组件效果(如按钮、卡片、轮播、折叠等),页面默认采用 Bootstrap 默认主题(亮色)和响应式网格。
| gap class | 值 | 说明 |
|---|---|---|
gap-0 |
0 | 无间距 |
gap-1 |
0.25rem | 极小 |
gap-2 |
0.5rem | 紧凑 |
gap-3 |
1rem | 标准 |
gap-4 |
1.5rem | 宽松 |
gap-5 |
3rem | 很大 |
8. 间距 vs 容器内边距
graph TD
A[Container padding: 0 12px] --> B[Row margin: 0 -12px]
B --> C[Col 1 padding: 0 12px]
B --> D[Col 2 padding: 0 12px]
B --> E[Col 3 padding: 0 12px]
输出: Bootstrap 5.3 样式生效的组件效果(如按钮、卡片、轮播、折叠等),页面默认采用 Bootstrap 默认主题(亮色)和响应式网格。
| 层级 | 间距控制方式 | 说明 |
|---|---|---|
| 容器 | 内置 padding | 内容不贴边 |
| 行 | 负 margin | 抵消容器的 padding |
| 列 | 内置 padding | 列之间的间隙(gutter) |
| 内部 | p-* / m-* |
内容元素的精确间距 |
(2) 间距刻度完整参考
| 刻度 | rem | px (16px 基准) | 名称 | 适用场景 |
|---|---|---|---|---|
0 |
0 | 0px | 无间距 | 移除默认边距 |
1 |
0.25 | 4px | 极小 | 图标与文字间隙 |
2 |
0.5 | 8px | 紧凑 | 按钮组间距 |
3 |
1 | 16px | 标准 | 卡片间距、段落间距 |
4 |
1.5 | 24px | 大 | 区块间距 |
5 |
3 | 48px | 极大 | 页面分区间距 |
auto |
auto | auto | 自动 | 水平居中 |
(3) 响应式间距断点
| 写法 | 手机 (<576px) | 平板 (>=768px) | 桌面 (>=992px) | 大屏 (>=1200px) |
|---|---|---|---|---|
p-3 p-md-4 p-lg-5 |
16px | 24px | 48px | 48px |
m-2 m-md-3 m-xl-4 |
8px | 16px | 16px | 24px |
px-2 px-lg-4 |
8px (左右) | 8px (左右) | 24px (左右) | 24px (左右) |
py-3 py-md-5 |
16px (上下) | 48px (上下) | 48px (上下) | 48px (上下) |
gap-2 gap-lg-4 |
8px | 8px | 24px | 24px |
▶ 示例:响应式间距页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Responsive Spacing</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
<style>
.demo-section { background: #f8f9fa; border-radius: 8px; }
</style>
</head>
<body>
<div class="container">
<!-- Hero: responsive padding -->
<div class="bg-primary text-white text-center px-3 py-5 px-md-5 py-md-6 rounded">
<h1 class="display-5">响应式间距演示</h1>
<p class="mb-0">缩放宽口观察间距变化</p>
</div>
<!-- Cards: responsive gap -->
<div class="row g-2 g-md-3 g-lg-4 mt-4">
<div class="col-12 col-md-4">
<div class="demo-section p-3 p-md-4">
<h5>卡片一</h5>
<p class="mb-0 small">手机端 p-3,桌面端 p-4</p>
</div>
</div>
<div class="col-12 col-md-4">
<div class="demo-section p-3 p-md-4">
<h5>卡片二</h5>
<p class="mb-0 small">gap 随断点递增</p>
</div>
</div>
<div class="col-12 col-md-4">
<div class="demo-section p-3 p-md-4">
<h5>卡片三</h5>
<p class="mb-0 small">g-2 → g-3 → g-4</p>
</div>
</div>
</div>
<!-- Info bar -->
<div class="d-flex flex-column flex-md-row justify-content-between align-items-center bg-light p-3 p-md-4 mt-4 rounded">
<span class="mb-2 mb-md-0">flex-column 变成 flex-md-row</span>
<button class="btn btn-primary">点击</button>
</div>
</div>
</body>
</html>
输出: Bootstrap 5.3 样式生效的组件效果(如按钮、卡片、轮播、折叠等),页面默认采用 Bootstrap 默认主题(亮色)和响应式网格。
▶ 示例:卡片布局间距
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Card Spacing</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container py-4">
<h3 class="mb-4">博客文章列表</h3>
<div class="card mb-3">
<div class="card-body">
<h5 class="card-title">文章标题一</h5>
<p class="card-text text-muted small mb-2">2026 年 1 月 15 日</p>
<p class="card-text">这是一篇示范文章,展示卡片之间的 mb-3 间距。</p>
<a href="#" class="btn btn-sm btn-primary">阅读更多</a>
</div>
</div>
<div class="card mb-3">
<div class="card-body">
<h5 class="card-title">文章标题二</h5>
<p class="card-text text-muted small mb-2">2026 年 1 月 14 日</p>
<p class="card-text">每张卡片底部都有 16px 间距,列表清晰可读。</p>
<a href="#" class="btn btn-sm btn-outline-primary">阅读更多</a>
</div>
</div>
<div class="card mb-4 p-4 bg-light border-0">
<div class="row g-3">
<div class="col-6">
<div class="p-3 bg-primary text-white rounded text-center">py-3 内部</div>
</div>
<div class="col-6">
<div class="p-3 bg-success text-white rounded text-center">g-3 沟槽</div>
</div>
</div>
</div>
<div class="d-flex gap-2 justify-content-end">
<button class="btn btn-secondary">上一页</button>
<button class="btn btn-primary">下一页</button>
</div>
</div>
</body>
</html>
输出: Bootstrap 5.3 样式生效的组件效果(如按钮、卡片、轮播、折叠等),页面默认采用 Bootstrap 默认主题(亮色)和响应式网格。
▶ 示例:表单间距
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Form Spacing</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container py-4">
<div class="row justify-content-center">
<div class="col-12 col-md-8 col-lg-6">
<h3 class="mb-4">用户注册</h3>
<form>
<div class="mb-3">
<label for="name" class="form-label">姓名</label>
<input type="text" class="form-control" id="name" placeholder="请输入姓名">
</div>
<div class="mb-3">
<label for="email" class="form-label">邮箱</label>
<input type="email" class="form-control" id="email" placeholder="name@example.com">
</div>
<div class="mb-3">
<label for="pwd" class="form-label">密码</label>
<input type="password" class="form-control" id="pwd">
<div class="form-text text-muted mt-1">密码长度至少 8 位</div>
</div>
<div class="mb-4 form-check">
<input type="checkbox" class="form-check-input" id="agree">
<label class="form-check-label" for="agree">同意服务条款</label>
</div>
<div class="d-flex gap-2">
<button type="submit" class="btn btn-primary">注册</button>
<button type="reset" class="btn btn-outline-secondary">重置</button>
</div>
</form>
<p class="text-muted small mt-4 mb-0">提示:所有输入框间距使用 mb-3 统一控制</p>
</div>
</div>
</div>
</body>
</html>
输出: Bootstrap 5.3 样式生效的组件效果(如按钮、卡片、轮播、折叠等),页面默认采用 Bootstrap 默认主题(亮色)和响应式网格。
❓ 常见问题
class="mt-3 mb-4 p-2" 同时设置上边距 16px、下边距 24px、四周内边距 8px。CSS 层叠中后定义的 class 如果值不同会覆盖先定义的,但 Bootstrap 的间距 class 互不冲突所以顺序无关。p-5 是 48px,我觉得太大了怎么办?p-4(24px)或 p-3(16px);(2) 自定义 CSS 变量 --bs-gutter-x 调整网格间距;(3) Phase 5 讲解 Sass 定制时可修改 $spacer 变量重新定义整个刻度体系。mx-auto 为什么只对块级元素生效?margin: auto 在 CSS 规范中要求元素必须有明确的宽度(非 auto 即可),且元素是块级(display: block)。行内元素没有宽度概念,所以 mx-auto 不生效。m{n|s|e|t|b|x|y}-n{1|2|3|4|5} 类,如 mt-n3 表示负的 1rem 上边距。负 margin 常用于抵消容器 padding 或实现重叠效果。注意负值不适用于 padding 和 gap,且响应式后缀(如 mt-md-n3)也支持。p-* 或 m-*。嵌套场景中常见做法是:父容器设 p-* 控制内边距,子元素设 mb-* 控制间距。响应式 breakpoint 后缀也支持嵌套——class="px-3 px-md-5" 在不同屏幕尺寸下表现一致。📖 小节
- 间距 class 格式:
{m|p}{t|b|s|e|x|y}{0|1|2|3|4|5|auto} - 刻度
0~5对应 0 ~ 3rem,基于$spacer变量(默认 1rem) - 响应式后缀:
mt-md-3、p-lg-5等实现不同屏幕不同间距 gap-*控制 flex/grid 子元素间距,mx-auto水平居中- 间距系统与网格的 gutter 保持一致(基础单位 0.5rem)
📝 作业
- ⭐ 使用间距 class 构建一个三卡片布局:卡片之间
gap-3,卡片内部p-4,外部容器py-5,在第一张卡片上额外添加mt-3观察效果。 - ⭐⭐ 用响应式间距做一个区块:手机端
px-3 py-4,桌面端px-5 py-5。 - ⭐⭐⭐ 创建一个居中按钮组(
mx-auto+d-flex+gap-2),包含三个按钮,按钮之间有 8px 间距。