W3C 原生二维布局系统

CSS Grid
布局完全指南

从核心概念到 10 个实战案例,彻底吃透现代前端唯一原生二维布局系统。告别 Flex 嵌套布局的繁琐写法,进入精准二维排版时代。

10
CASES
2D
LAYOUT
100%
COMPATIBLE
0
DEPS
/ 01 — INTRODUCTION

为什么 Grid
现代布局的终极方案?

Flexbox 长期占据主流,但始终无法规避一维布局的天然短板。

在前端布局领域,Flexbox 一维布局长期占据主流,但始终存在无法规避的短板:仅能控制单方向对齐与分布,多行布局会出现行列高度不均、错位适配、复杂排版嵌套冗余等问题,做不了精准的二维并行布局。

CSS Grid 是 W3C 官方推出的唯一原生二维布局系统,专门解决同时控制行和列的布局需求,能够精准划分网页网格区域、自由控制元素跨行列排布,彻底弥补 Flexbox 的局限性。

目前所有现代浏览器(Chrome、Firefox、Edge、Safari)均全面兼容 Grid,无兼容壁垒,是企业级后台、官网、卡片流、瀑布流、复杂排版的首选布局方案。

Grid vs Flexbox

布局维度
一维
二维
行列适配
易错位
精准对齐
空白处理
无法紧凑
dense 填充
使用场景
简单列表
复杂栅格
学习成本
中等
DOM 嵌套
多层
单层
/ 02 — CORE CONCEPTS

核心基础:概念与逻辑

所有属性的核心前提,先懂术语,再学规则。Grid 是二维网格布局,同时管理行(横向)和列(纵向)。

01

网格容器

设置了 display: grid 的父元素,所有布局规则都在容器上定义,是整个网格系统的根。

02

网格项目

网格容器的直接子元素,自动适配网格规则,无需额外设置浮动或弹性规则。

03

网格轨道

划分出来的行、列单元格的尺寸区域,分为行轨道和列轨道,是布局骨架。

04

网格线

分割轨道的横竖线条(列线、行线),是项目跨行列定位的依据,序号从 1 开始。

05

网格间隙

轨道与轨道之间的空白间距,不承载内容仅做分隔,使用 gap 设置。

06

网格区域

多个相邻单元格合并后的整块区域,用于复杂布局排版,可自定义命名。

/ 03 — PROPERTIES

容器与项目全属性

容器属性定义整体规则,项目属性控制单个元素,两者协作完成所有复杂布局。

定义行列轨道 grid-template

两大核心属性,分别定义列的数量宽度、行的数量高度,支持多种单位混合使用。

/* 3列:固定 + 均分 + 自适应 */ .container { grid-template-columns: 200px 1fr auto; /* 4列等宽,最小100px最大1fr */ grid-template-columns: repeat(4, minmax(100px, 1fr)); /* 2行固定高度 */ grid-template-rows: 100px 150px; }

核心取值方式:

px/em 固定尺寸 · % 百分比 · fr 剩余空间单位 · repeat() 重复函数 · minmax() 区间函数 · auto 自适应内容

网格间隙 gap

替代老旧的 grid-gap,统一设置行列间距,不会产生布局挤压、不会超出容器。

.container { gap: 10px; /* 行列均为10px */ row-gap: 15px; /* 单独行间距 */ column-gap: 8px; /* 单独列间距 */ }

优于 margin 间距:无外边距合并问题,不会引起布局塌陷,是网格间隙的首选方案。

整体对齐方式 align / justify

分两层控制:项目在单元格内对齐 + 整体网格在容器内对齐。

.container { /* 单元格内项目对齐 */ justify-items: center; /* 水平 */ align-items: center; /* 垂直 */ /* 整体网格对齐(小于容器时)*/ justify-content: space-between; align-content: center; /* 值: start/end/center/stretch/ space-between/around/evenly */ }

项目跨行列 grid-column / row

通过网格线序号或 span 关键字,控制项目占据的行列范围,实现合并单元格效果。

.item { /* 列:从第1条到第3条线(跨2列)*/ grid-column: 1 / 3; /* 行:从第2条到第4条线(跨2行)*/ grid-row: 2 / 4; /* 简写:span 直接定义跨越数量 */ grid-column: span 2; grid-row: span 2; }

自动排布规则 grid-auto-flow

控制超出定义行列的项目自动排布方向,dense 模式可填充空白网格。

.container { grid-auto-flow: row; /* 默认行优先 */ grid-auto-flow: column; /* 列优先 */ grid-auto-flow: row dense; /* 紧凑填充 */ }

dense 模式自动填充空位,解决跨行列后的留白问题,适配不规则卡片布局。

区域命名布局 grid-template-areas

Grid 最强特性之一,通过自定义区域名称实现可视化布局,直观搭建复杂结构。

.layout { grid-template-columns: 220px 1fr; grid-template-areas: "header header" "sidebar main" "footer footer"; } .header { grid-area: header; } .sidebar { grid-area: sidebar; }
/ 04 — PRACTICE

10 个实战案例
从零吃透所有场景

所有案例均为可直接复用的真实 Grid 实现,覆盖 90% 日常开发布局场景。左侧是实际渲染效果,右侧是源码。

01

基础等宽栅格布局

自适应4列卡片布局,自动均分容器宽度,适配不同屏幕

入门必学
LIVE DEMO
1
2
3
4
/* repeat + 1fr 实现精准等宽 */ .grid-box { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; } /* 无需计算百分比,彻底解决 Flex 等宽布局的细微错位 */
02

混合尺寸栅格布局

宽侧边栏 + 双等宽主内容经典布局,混合固定尺寸与自适应

常用
LIVE DEMO
侧栏
主内容A
主内容B
/* 固定侧边栏 + 两份均分主内容 */ .grid-box { display: grid; grid-template-columns: 240px 1fr 1fr; gap: 15px; } /* Flex 实现需嵌套容器 Grid 单层代码完成,结构更简洁 */
03

minmax 自适应响应式栅格

无需媒体查询,自动适配列数的弹性卡片布局

响应式
LIVE DEMO · 缩放窗口试试
1
2
3
4
5
6
/* auto-fit 自动填充容器 minmax 保证最小宽度 200px 超出则均分空间,无媒体查询响应式 */ .grid-box { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 16px; }
04

项目跨列跨行合并布局

首图通栏、局部区块合并的图文布局,替代繁琐定位嵌套

跨行列
LIVE DEMO
通栏头部
侧边通栏
内容1
内容2
.grid-box { display: grid; grid-template-columns: repeat(3, 1fr); grid-template-rows: 120px 180px; gap: 12px; } .item1 { grid-column: span 3; /* 跨3列 */ } .item2 { grid-row: span 2; /* 跨2行 */ }
05

可视化区域布局(经典后台)

通过区域命名直观搭建头部+侧边栏+主体+页脚标准后台布局

企业级
LIVE DEMO
HEADER
SIDEBAR
MAIN CONTENT
.layout-box { display: grid; grid-template-columns: 220px 1fr; grid-template-rows: 60px 1fr 40px; grid-template-areas: "header header" "sidebar main" "footer footer"; } .header { grid-area: header; } .sidebar { grid-area: sidebar; } .main { grid-area: main; } .footer { grid-area: footer; }
06

精准居中布局

一行代码实现元素水平+垂直居中,比 Flex 居中更简洁

最简
LIVE DEMO
居中元素 place-items: center
.center-box { display: grid; place-items: center; /* 简写: 同时设置 justify-items + align-items 居中 */ height: 300px; } /* 无任何兼容问题,一行搞定 */
07

紧凑流式布局

消除跨行列后的空白空位,自动填充紧凑排布

dense
LIVE DEMO
1 (跨2列)
2
3
4 (跨2行)
5
6
.dense-box { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; grid-auto-flow: row dense; /* 开启紧凑填充模式 自动填补跨行列产生的空位 */ }
08

单个项目独立对齐

全局统一对齐前提下,单独修改某个项目的位置

个性化
LIVE DEMO · 中间底部对齐,右侧顶部对齐
1 居中
2 底部
3 顶部
.grid-box { display: grid; grid-template-columns: repeat(3, 1fr); align-items: center; /* 全局居中 */ height: 200px; gap: 10px; } .item-special { align-self: end; /* 单独底部 */ } /* 优先级高于容器 align-items */
09

固定表头自适应表格

替代传统 table 布局,样式自定义自由度更高

表格
LIVE DEMO
ID
名称
操作
001
Grid 基础
编辑
002
实战案例
编辑
003
避坑指南
编辑
.table-grid { display: grid; grid-template-columns: 80px 1fr 120px; gap: 1px; background: #eee; /* 间隙作边框 */ } .table-item { padding: 10px; background: #fff; }
10

极简瀑布流布局

无需 JS、无需复杂计算,原生轻量化瀑布流

进阶
LIVE DEMO
1
2
3
4
5
6
.waterfall { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); grid-auto-rows: 10px; /* 基础行高 */ gap: 15px; } .item1 { grid-row: span 20; } .item2 { grid-row: span 28; } .item3 { grid-row: span 16; } /* 相比 JS 瀑布流: 无卡顿、无重排 性能更优,原生支持 */
/ 05 — TIPS & PITFALLS

开发实战核心技巧

避坑指南与最优搭配,让你的 Grid 代码更稳健、更高效。

01

日常最优搭配

单行简单排布用 Flex,多行复杂栅格、精准布局用 Grid,两者结合使用,兼顾简洁性与功能性。

02

仅对直接子元素生效

Grid 仅对直接子元素生效,孙子元素不参与网格布局,无需嵌套多余容器,这是常见误区。

03

fr 单位特性

fr 单位仅分配剩余空间,不会挤压固定尺寸元素,适配性极强,是 Grid 最核心的单位。

04

gap 优于 margin

gap 间距不会叠加、不会超出容器,优先替代 margin 间距,避免布局塌陷问题。

05

auto-fit vs auto-fill

auto-fit 用于自适应列数(拉伸填满),auto-fill 用于预留空位(保留列位),按需选用。

06

学习成本性价比

属性多但逻辑规整,一次学会终身复用。投入少量时间,换取长期布局效率的大幅提升。

// UNIVERSAL RESPONSIVE FORMULA
最简响应式万能公式

无需媒体查询,适配所有设备的卡片布局,企业项目通用:

.grid-wrap { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 1rem; }
/ 06 — CONCLUSION

掌握 Grid,
就是掌握二维布局
终极思维

Flexbox 解决了一维排布的便捷性,Grid 彻底解决了二维布局的精准性。用更少的 DOM 结构、更少的 CSS 代码,实现 Flex 需要多层嵌套、复杂计算才能完成的复杂布局。

"容器定义规则,项目自由适配" —— 这就是 Grid 的核心思维。从此告别繁琐的布局嵌套,实现高效、精准、优雅的前端二维排版。