CSS: 手搓12列栅格

最后更新:2026-10-13

栅格系统(Grid System)是网页布局中非常经典的方案——把一行分为若干列(通常是 12 列),通过组合不同的列宽实现多样化布局。Bootstrap 等框架的核心就是栅格系统。

本节涉及属性: grid-template-areas flex-wrap

1. 为什么是 12 列?

12 的因数很多:1、2、3、4、6、12,所以它能灵活组合:


2. 用 Flexbox 实现栅格

(1) 基本结构

▶ 示例

(2) HTML 使用

HTML
<!-- 三栏等宽:每列占 4 份 -->
<div class="row">
  <div class="col-4">占 4 列</div>
  <div class="col-4">占 4 列</div>
  <div class="col-4">占 4 列</div>
</div>

<!-- 两栏不对称:左 3 右 9 -->
<div class="row">
  <div class="col-3">占 3 列</div>
  <div class="col-9">占 9 列</div>
</div>

<!-- 四栏等宽:每列占 3 份 -->
<div class="row">
  <div class="col-3">占 3 列</div>
  <div class="col-3">占 3 列</div>
  <div class="col-3">占 3 列</div>
  <div class="col-3">占 3 列</div>
</div>

3. 添加响应式断点

让栅格在不同屏幕下有不同的列数:

▶ 示例

▶ 试一试

(1) 响应式使用示例

HTML
<!-- 手机:堆叠显示;平板:两栏;桌面:四栏 -->
<div class="row">
  <div class="col-sm-12 col-md-6 col-lg-3">Col sm 12 col md 6 col lg 3</div>
  <div class="col-sm-12 col-md-6 col-lg-3">Col sm 12 col md 6 col lg 3</div>
  <div class="col-sm-12 col-md-6 col-lg-3">Col sm 12 col md 6 col lg 3</div>
  <div class="col-sm-12 col-md-6 col-lg-3">Col sm 12 col md 6 col lg 3</div>
</div>

4. 添加偏移类

有时候需要让列偏移,比如让内容居中:

▶ 示例

▶ 试一试
HTML
<!-- 让内容位于中间 -->
<div class="row">
  <div class="col-6 col-offset-3">
    这个内容占据中间6列,左右各偏移3列
  </div>
</div>

5. 完整的栅格系统

▶ 示例


6. 用 CSS Grid 实现栅格

也可以使用 Grid 来实现,更简洁:

▶ 示例

▶ 试一试

本节涉及属性: grid-template-areas flex-wrap

❓ 常见问题

Q 为什么栅格系统都用 12 列?
A 12 能被 2、3、4、6 整除,组合最灵活。可以做出 1/2、1/3、1/4、1/6、2/3、3/4 等各种比例。Bootstrap 等主流框架都采用 12 列栅格,这已经成了事实标准。
Q 手写栅格和用 Bootstrap 的栅格有什么区别?
A 手写栅格能帮你理解原理,Bootstrap 的栅格是封装好的实现。实际项目直接用 Bootstrap 更高效,但理解原理后遇到框架不满足的场景,你也能自己写栅格系统。
Q Flex 版栅格和 Grid 版栅格哪个好?
A 各有利弊。Flex 版适合一维排列,但无法跨行对齐。Grid 版二维能力强,列与列之间可以对齐。如果只需要简单的行内列分配,Flex 版就够了;如果需要网格线对齐,用 Grid 版。

7. 常用布局模式

这是最常见的页面布局模式:

▶ 示例

▶ 试一试

(2) 瀑布流布局(Pinterest风格)

使用Grid实现简单的瀑布流效果:

▶ 示例

▶ 试一试

(3) 仪表盘布局

使用Grid实现数据展示面板:

▶ 示例

💡 布局要点: 圣杯布局用 grid-template-areas 定义区域,瀑布流用 repeat(3, 1fr) 均分列,仪表盘用固定列数展示数据卡片。

📖 小节

📝 作业

  1. 实现上面的完整 12 列栅格系统,创建一个 HTML 页面展示不同列组合的效果(如 3-3-3-3、4-4-4、2-8-2 等)。
  2. 使用响应式栅格,让一个页面在手机上显示单列、平板上显示两列、桌面上显示四列。
  3. 使用 col-offset-3 让一个内容块在页面中居中显示。
  4. 使用 Grid 版本重新实现上面的 12 列栅格,对比两个版本的代码差异。
Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏