跳到主要内容

Bootstrap 5 CSS Grid 布局完全指南

2026-06-30 ·

Bootstrap 5.2 开始原生支持 CSS Grid 布局模式,这一特性在 5.3 中得到进一步完善。本文将详细介绍如何在 Bootstrap 项目中使用 CSS Grid,以及与经典 Flexbox 网格的对比和组合策略。

版本要求:CSS Grid 布局模式需要 Bootstrap 5.2.0 及以上版本。

启用 CSS Grid 布局

在 Bootstrap 5 中启用 CSS Grid 布局只需要在 row 上添加 .row-cols-* 类,或者使用 .g-* 间距类配合 CSS Grid 实现更灵活的布局:

<div class="container">
    <!-- 使用 CSS Grid 的响应式列布局 -->
    <div class="row row-cols-1 row-cols-md-2 row-cols-lg-4 g-4">
        <div class="col">
            <div class="card">
                <div class="card-body">
                    <h5>卡片一</h5>
                    <p>自动自适应布局</p>
                </div>
            </div>
        </div>
        <div class="col">
            <div class="card">
                <div class="card-body">
                    <h5>卡片二</h5>
                    <p>无需手动设置列宽</p>
                </div>
            </div>
        </div>
        <div class="col">
            <div class="card">
                <div class="card-body">
                    <h5>卡片三</h5>
                    <p>响应式断点自动适配</p>
                </div>
            </div>
        </div>
        <div class="col">
            <div class="card">
                <div class="card-body">
                    <h5>卡片四</h5>
                    <p>每行自动 4 列</p>
                </div>
            </div>
        </div>
    </div>
</div>

与 Flexbox 网格的区别

特性Flexbox 网格CSS Grid 模式
最佳场景一维布局(行或列)二维布局(行列同时)
列宽控制.col-* 指定列数.row-cols-* 指定每行列数
垂直对齐.align-items-*Grid 原生对齐属性
列排序.order-*.order-*(相同)
自动列宽.col 自动均分.col 自动均分
跨行/跨列不直接支持原生 Grid 支持

实战:CSS Grid 卡片展示页

以下是一个完整的 CSS Grid 卡片展示页面示例:

<section class="container py-5">
    <h2 class="text-center mb-5">产品展示</h2>
    <div class="row row-cols-2 row-cols-md-3 row-cols-lg-4 g-4">
        <!-- 每个产品卡片 -->
        <div class="col">
            <div class="card h-100 shadow-sm">
                <img src="product.jpg" class="card-img-top" alt="产品">
                <div class="card-body">
                    <h5 class="card-title">产品名称</h5>
                    <p class="card-text text-secondary">产品描述</p>
                    <div class="d-flex justify-content-between align-items-center">
                        <span class="fw-bold text-primary">¥99</span>
                        <button class="btn btn-sm btn-outline-primary">购买</button>
                    </div>
                </div>
            </div>
        </div>
        <!-- 重复更多卡片... -->
    </div>
</section>

关键点:

  • row-cols-2 — 移动端每行 2 列
  • row-cols-md-3 — 平板每行 3 列
  • row-cols-lg-4 — 桌面每行 4 列
  • g-4 — 间距为 4 级(1.5rem)
  • h-100 — 卡片高度一致,适合网格布局

实战:博客首页杂志布局

CSS Grid 非常适合创建杂志风格的混合布局:

<div class="container py-5">
    <div class="row row-cols-1 row-cols-md-2 row-cols-lg-3 g-4">
        <!-- 特色文章,占两列 -->
        <div class="col" style="grid-column: span 2;">
            <div class="card border-0 shadow-sm">
                <div class="row g-0">
                    <div class="col-md-6">
                        <img src="featured.jpg" class="img-fluid rounded-start h-100" style="object-fit: cover;" alt="特色文章">
                    </div>
                    <div class="col-md-6">
                        <div class="card-body">
                            <h3>特色文章标题</h3>
                            <p>特色文章摘要内容...</p>
                        </div>
                    </div>
                </div>
            </div>
        </div>
        <!-- 三个普通文章列 -->
        <div class="col">
            <div class="card h-100">...</div>
        </div>
        <div class="col">
            <div class="card h-100">...</div>
        </div>
        <div class="col">
            <div class="card h-100">...</div>
        </div>
    </div>
</div>

混合使用 Flexbox 和 CSS Grid

在实际项目中,Flexbox 和 CSS Grid 并非二选一,而是互补的布局工具:

  • 页面级布局:使用 CSS Grid 定义整体页面结构(header、sidebar、main、footer)
  • 卡片/列表:使用 CSS Grid 的 .row-cols-* 创建均分布局
  • 组件内部:使用 Flexbox 实现导航栏、按钮组、卡片内容等一维排列
  • 表单布局:使用 CSS Grid 的表单标签-输入框对齐

Sass 配置

Bootstrap 的 CSS Grid 支持通过 Sass 变量控制:

// 启用 CSS Grid
$enable-cssgrid: true;

// 自定义断点
$grid-breakpoints: (
    xs: 0,
    sm: 576px,
    md: 768px,
    lg: 992px,
    xl: 1200px,
    xxl: 1400px
);

// 自定义列数
$grid-columns: 12;

@import "bootstrap/scss/bootstrap";

注意:启用 CSS Grid 后,.col-* 类将使用 CSS Grid 而非 Flexbox 实现。

常见问题

CSS Grid 和 Flexbox 网格可以混用吗?

可以。Bootstrap 的 Flexbox 网格类(.col-md-6)和 CSS Grid 类(.row-cols-md-2)可以共存。推荐在卡片列表、产品展示等场景使用 CSS Grid,在导航栏、表单、按钮组等场景使用 Flexbox。

CSS Grid 模式下的间距如何控制?

使用 .g-*(gap)类控制间距,与 Flexbox 网格的间距类完全一致,支持 .g-0.g-5,以及水平和垂直方向的 .gx-*.gy-*

跨列(span)怎么实现?

目前 Bootstrap 没有提供 .col-span-* 工具类,需要通过内联样式 style="grid-column: span 2;" 实现,或者自定义 CSS 类。这是 Bootstrap CSS Grid 模式的一个局限性。

总结

Bootstrap 的 CSS Grid 模式为布局提供了更多选择:

  • 使用 .row-cols-* 快速创建均分布局,无需手动计算列宽
  • CSS Grid 适合二维布局场景,Flexbox 适合一维排列
  • 两者可以混合使用,发挥各自优势
  • 通过 Sass 变量 $enable-cssgrid 开启

查看 布局文档 了解更多布局方式。

本网站使用 Cookie 来提升您的浏览体验。隐私政策