CSS Grid 布局完全指南

CSS Grid 是目前最强大的二维布局系统,可以同时处理行和列。相比 Flexbox 的一维布局,Grid 更适合构建复杂的网页整体结构。本文从基础概念到高级技巧,全面总结 Grid 布局的核心知识点。

一、Grid 核心概念

  • Grid 容器:声明 display: gridinline-grid 的元素。
  • 网格线 (grid lines):构成网格的分界线,有行号和列号。
  • 网格轨道 (grid track):两条相邻网格线之间的空间,即一行或一列。
  • 网格单元格 (grid cell):最小的单位,四条网格线围成的区域。
  • 网格区域 (grid area):由多条网格线围成的矩形区域,可包含多个单元格。

二、容器属性(常用)

1. display: grid / inline-grid

定义块级或行内网格容器。

2. grid-template-columns / grid-template-rows

定义列宽和行高。可以使用固定值、百分比、fr 单位(剩余空间分数)、repeat() 函数。

.container {
  display: grid;
  grid-template-columns: 200px 1fr 2fr;
  grid-template-rows: auto 100px;
}

3. gap (grid-gap)

设置行与列之间的间隙,可分别设置 row-gapcolumn-gap

.container {
  gap: 20px 30px;
  /* 等同于 row-gap:20px; column-gap:30px; */
}

4. justify-items / align-items

控制所有单元格内容的水平/垂直对齐方式,可选值:start, end, center, stretch(默认)。

5. place-items

同时设置 align-items 和 justify-items 的简写。

三、子项属性(常用)

1. grid-column / grid-row

指定项目占用的列/行起始和结束位置,基于网格线编号。

.item {
  grid-column: 1 / 3;   /* 从第1条列线开始到第3条结束,即跨2列 */
  grid-row: 2 / 4;
}

2. grid-area

可以指定四个边的网格线,或者与命名网格区域配合使用。

四、实战案例:经典博客布局

利用 Grid 快速构建 头部-侧边栏-内容-底部 的响应式布局:

<div class="blog">
  <header>头部</header>
  <aside>侧边栏</aside>
  <main>主要内容</main>
  <footer>底部</footer>
</div>

五、常用布局示例演示

1
2
3
4
5
6

⬆️ 三列等宽,自动换行(Grid 默认按行填充)

六、与 Flexbox 的对比选择

  • 一维布局(单行或单列) → Flexbox(例如导航栏、列表排列)
  • 二维布局(行列同时控制) → Grid(例如整体页面、相册画廊、复杂表单)
  • 两者可结合使用:Grid 负责宏观结构,内部元素用 Flexbox 做细节排列。

CSS Grid 是现代前端开发的必备技能,掌握它能够大幅提高布局效率。本文所有示例均已在个人测试环境中验证,欢迎参考学习。

← 返回笔记列表