Bootstrap 布局容器
上一篇讲了栅格原理,这一章我们深入布局三件套的细节:container 的几种变体、row 的列间距(gutter)、行与列的对齐控制。这些是写"看起来专业"的页面的关键。
1. container 的三种变体
container 是最外层容器,Bootstrap 提供了三种:
<!-- 1. container-fluid:永远占满视口宽度,无 max-width 限制 -->
<div class="container-fluid bg-primary text-white py-3">
全宽容器(适合全屏 banner)
</div>
<!-- 2. container:响应式固定宽度,有 max-width,自动居中 -->
<div class="container bg-light py-3">
默认 container(适合绝大多数页面)
</div>
<!-- 3. container-{sm|md|lg|xl|xxl}:100% 宽直到该断点,然后变固定宽 -->
<div class="container-md bg-info py-3">
md 及以下全宽,md 以上变固定
</div>三者的核心差别:
container:最常用。在不同断点下有不同的 max-width(540/720/960/1140/1320px),自动居中。适合绝大多数页面。container-fluid:永远 100% 宽度,没有 max-width 限制。适合全屏 banner、视频背景、需要"铺满"的视觉模块。container-sm/container-md/container-lg等:100% 宽度直到该断点,超过断点才变固定宽度。比如container-md在 md 及以下全宽,md 以上变固定。适合"小屏全宽、大屏固定"的混合布局。
2. container 在各断点的实际宽度
这是面试常考、新手容易懵的点。container 在不同屏幕宽度下有不同的 max-width,Bootstrap 自动切换:
<!-- container 在各断点的实际 max-width:
xs(<576px) → 100% 全宽
sm(≥576px) → max-width: 540px
md(≥768px) → max-width: 720px
lg(≥992px) → max-width: 960px
xl(≥1200px) → max-width: 1140px
xxl(≥1400px) → max-width: 1320px
-->这条规则的好处:在手机上 container 占满屏幕(避免左右留白浪费空间),在桌面上居中且限制最大宽度(避免内容拉得太宽难阅读)。Bootstrap 的"移动优先"在这里体现得淋漓尽致。
3. row 的列间距:gutter
gutter 是 row 控制内部 col 之间间距的工具。Bootstrap 4 用 no-gutters,5.0 重构为 g-*(更灵活,还分水平和垂直):
<!-- g-0:取消列间距(让 col 紧贴,常用于图片网格) -->
<div class="row g-0">
<div class="col-6"><img src="a.jpg" class="w-100" /></div>
<div class="col-6"><img src="b.jpg" class="w-100" /></div>
</div>
<!-- g-2 / g-3 / g-4 / g-5:间距依次变大(默认 g-3 是 24px) -->
<div class="row g-4">
<div class="col-4"><div class="p-3 bg-light">A</div></div>
<div class="col-4"><div class="p-3 bg-light">B</div></div>
<div class="col-4"><div class="p-3 bg-light">C</div></div>
</div>
<!-- gx-* / gy-*:分别只控制水平 / 垂直间距 -->
<div class="row gx-5 gy-2">
<div class="col-6">水平间距大,垂直小</div>
<div class="col-6">水平间距大,垂直小</div>
</div>g-0:取消所有间距。常用于图片网格、卡片墙,让 col 紧贴。g-1~g-5:间距依次变大。g-3 是默认值(24px)。gx-*:只控制水平间距。gy-*:只控制垂直间距(让换行后的列也有垂直间距)。
gutter 是 Bootstrap 5 最重要的改进之一——以前要写自定义 padding 才能调间距,现在一个 class 搞定。
4. 行级垂直对齐:align-items
当一行内不同 col 高度不一致时(比如一个有图一个没图),怎么对齐?用 row 的 align-items-*:
<!-- 行级对齐:整行所有列的垂直对齐方式 -->
<div class="row align-items-start">
<div class="col">顶部对齐</div>
<div class="col">顶部对齐</div>
</div>
<div class="row align-items-center">
<div class="col">垂直居中</div>
<div class="col">垂直居中</div>
</div>
<div class="row align-items-end">
<div class="col">底部对齐</div>
<div class="col">底部对齐</div>
</div>
<!-- 单列独立对齐 -->
<div class="row align-items-center" style="height: 200px;">
<div class="col align-self-start">我自己顶部</div>
<div class="col">整行居中</div>
<div class="col align-self-end">我自己底部</div>
</div>align-items-start:所有列顶部对齐(默认)。align-items-center:所有列垂直居中。align-items-end:所有列底部对齐。align-self-*:给单列单独覆盖对齐方式。
注意:要让 align-items 生效,row 必须有明确的高度——要么内容自然撑开,要么你显式设 height。否则"垂直居中"没有参照系。
5. 水平分布:justify-content
row 内部 col 总宽不足 12 时,会有剩余空间。justify-content-* 决定剩余空间怎么分布:
<!-- 水平分布:row 的 justify-content 工具类 -->
<div class="row justify-content-start">
<div class="col-3">靠左</div>
</div>
<div class="row justify-content-center">
<div class="col-3">居中</div>
</div>
<div class="row justify-content-end">
<div class="col-3">靠右</div>
</div>
<div class="row justify-content-between">
<div class="col-3">左</div>
<div class="col-3">右</div>
</div>
<div class="row justify-content-around">
<div class="col-3">A</div>
<div class="col-3">B</div>
</div>
<div class="row justify-content-evenly">
<div class="col-3">A</div>
<div class="col-3">B</div>
</div>- start / center / end:剩余空间分别堆到右、两侧、左侧,内容靠左/居中/靠右。
- between:首尾贴边,中间均分。常用于导航栏(logo 左、菜单右)。
- around:每个 col 两侧等量空白(比 between 多两侧外边距)。
- evenly:所有空白完全均分(包括首尾)。
6. col 内部的内容对齐
上面讲的是 col 之间的对齐。如果你想让 col 内部的内容(比如图标和文字)对齐,需要用 d-flex 把 col 变成 flex 容器:
<!-- col 自己的内容对齐(用 d-flex + align-items) -->
<div class="col d-flex align-items-center">
<img src="icon.png" height="20" />
<span class="ms-2">图标与文字垂直居中</span>
</div>
<!-- 文本对齐:text-start/center/end -->
<div class="col text-center">
这段文字水平居中
</div>这是新手最容易卡住的点:col 默认是 block,内部内容是上下堆叠的。要水平排列内容,必须加 d-flex。这是 Bootstrap 把 Flexbox 工具类暴露出来的核心用法。
7. 一个综合示例
把上面的容器、间距、对齐组合起来,做一个典型的"卡片网格"布局:
- 外层 container 居中限宽
- row 用 g-4 给卡片间距
- 每个卡片 col 在桌面占 4 列(一行三个)
- 卡片内部用 d-flex 让图标和标题对齐
这种结构在落地页、产品特性介绍、博客列表里随处可见。熟练后写一遍只要两分钟。
小结
布局容器的要点:
- container 三种:固定 / 全宽 / 断点条件。
- gutter 用 g-* / gx-* / gy-* 控制列间距。
- 行对齐:align-items 控制垂直,justify-content 控制水平。
- 列内部对齐要加 d-flex,把 col 变成 flex 容器。
下一篇我们正式开始学组件——从最常用的按钮开始。
← 上一篇 栅格系统
下一篇 按钮组件 →