技术文章

CSS Grid 布局超详细零基础教程(从原理到实战)
技术文章 2026-07-27 76 阅读

CSS Grid 布局超详细零基础教程(从原理到实战)

豆包 本站 2026-07-27

Grid 是 CSS 最强大的二维布局系统,唯一同时支持「行+列」双向精准控制的布局方案。相比 Flex 一维布局,Grid 天生适配多行多列规整布局,无需浮动、无需百分比计算、无需复杂适配,是页面整体布局、卡片网格、后台架构的最优解。

本文全程新手友好,无晦涩术语,循序渐进讲清所有核心知识点、属性用法、取值技巧、常见坑,附带可直接复制运行的完整代码。

Flex布局超详细零基础教程(新手一站式完全掌握).md

一、核心认知:Grid 到底是什么?

1. 核心定位

Flex:一维布局 —— 只能沿单一方向排列(横/竖),换行只是伪多行,无法统一管控列对齐

Grid:二维布局 —— 同时定义行、列,把容器分割成规整网格单元格,子元素精准落在网格内

2. 必备基础术语(新手必记)

  • 网格容器(Grid Container):设置了 display: grid 的父元素,所有布局规则都定义在它身上

  • 网格项(Grid Item):网格容器的直接子元素,自动适配网格布局,孙子元素不生效

  • 网格线(Grid Line):分割行列的横竖线条(列线、行线),用于定位和跨格

  • 网格单元格(Grid Cell):横竖网格线围成的最小单个格子

  • 网格轨道(Grid Track):单个行/列的整体空间

  • 网格间距(Gap):格子之间的空白间距,替代传统 margin,无重叠、更规整

二、Grid 快速入门:最简初始化代码

Grid 布局只需两步启用,无需额外复杂配置:

  1. 父元素开启网格布局

  2. 定义列、行的尺寸规则

完整基础示例(可直接运行)

<style>
  /* 网格容器 */
  .grid-box {
    /* 开启标准网格布局(独占一行) */
    display: grid;
    /* 定义3列,每列平分剩余空间 */
    grid-template-columns: repeat(3, 1fr);
    /* 定义2行,高度自适应内容 */
    grid-template-rows: auto auto;
    /* 统一设置行列间距 */
    gap: 15px;
    /* 辅助样式,方便观察 */
    background: #f5f5f5;
    padding: 15px;
  }
  /* 网格项样式 */
  .grid-item {
    background: #409eff;
    color: #fff;
    text-align: center;
    padding: 20px 0;
    border-radius: 4px;
  }
</style>

<div class="grid-box">
  <div class="grid-item">1</div>
  <div class="grid-item">2</div>
  <div class="grid-item">3</div>
  <div class="grid-item">4</div>
  <div class="grid-item">5</div>
  <div class="grid-item">6</div>
</div>

效果:自动生成3列2行 规整网格,6个元素自动填满格子,间距均匀、列宽完全一致。

补充:display: inline-grid 行内网格,容器不独占一行,可和同行元素并排,极少用。

三、Grid 核心属性大全(容器属性)

Grid 90% 的场景都靠容器属性实现,掌握以下属性即可应对99%的布局需求。

1. 定义列:grid-template-columns

控制网格每一列的宽度,写几个值就代表几列。

常用取值(新手必掌握)

  • 固定像素grid-template-columns: 100px 200px 100px → 三列固定宽度

  • fr 等分单位(Grid 神器)fr 代表「剩余空间份数」,自动均分、自适应容器

  • 百分比grid-template-columns: 30% 40% 30% → 按比例分配

  • auto:自适应内容宽度

  • minmax(最小值, 最大值):限制尺寸范围,实现自适应

高频实用写法

/* 3列等宽(最常用) */
grid-template-columns: repeat(3, 1fr);

/* 左右固定、中间自适应(经典布局) */
grid-template-columns: 200px 1fr 200px;

/* 2列:最小200px,自动放大 */
grid-template-columns: repeat(2, minmax(200px, 1fr));

/* 不等分比例:1:2:1 */
grid-template-columns: 1fr 2fr 1fr;

小知识:repeat(次数, 规则) 是简写语法,避免重复写代码,简洁高效。

2. 定义行:grid-template-rows

控制网格每一行的高度,取值规则和列完全一致。只定义前几行,超出行数高度默认自适应。

/* 2行,第一行固定80px,第二行自适应 */
grid-template-rows: 80px auto;

/* 3行等高均分 */
grid-template-rows: repeat(3, 1fr);

3. 网格间距:gap(终极简写)

设置格子之间的间距,不叠加、不塌陷、无需margin,是Grid布局的优势之一。

/* 上下间距10px,左右间距20px */
gap: 10px 20px;

/* 行列统一间距15px(最常用) */
gap: 15px;

/* 单独设置 */
row-gap: 10px;  /* 行间距 */
column-gap: 20px; /* 列间距 */

4. 网格对齐(全局对齐)

分为「格子内容对齐」和「整体网格对齐」,新手极易混淆,清晰区分如下:

① 单元格内元素对齐(控制每一个格子里的内容)

  • justify-items:水平对齐(左/中/右)

  • align-items:垂直对齐(上/中/下)

通用取值:start 默认、center 居中、end 靠后、stretch 拉伸填满(默认)

/* 所有格子内容水平+垂直居中(一键居中神器) */
justify-items: center;
align-items: center;

② 整体网格对齐(网格总尺寸 < 容器尺寸时生效)

  • justify-content:整体网格水平对齐

  • align-content:整体网格垂直对齐

适用场景:行列用固定px宽度,网格整体没填满容器时,调整网格整体位置。

5. 自动填充:auto-fill / auto-fit(响应式神器)

无需媒体查询,一键实现自动适配列数,屏幕宽就多排,屏幕窄就少排。

/* 自动填充:每列最小250px,自动增减列数 */
grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));

核心区别:

  • auto-fill:剩余空间保留空白,填充空格子

  • auto-fit:剩余空间分配给现有格子,自动拉伸铺满

日常开发 优先用 auto-fit,布局更饱满美观。

四、Grid 项目属性(子元素专属)

用来控制单个网格项的位置、跨格、大小,实现不规则复杂布局。

1. 跨列 / 跨行(最常用)

/* 当前元素跨2列 */
grid-column: span 2;

/* 当前元素跨2行 */
grid-row: span 2;

实战场景:轮播大图、通栏标题、侧边栏跨行等高布局。

2. 精准定位网格线

网格线从1开始计数,可精准指定元素从第几根线到第几根线。

/* 列:从第1根线到第3根线(跨2列) */
grid-column: 1 / 3;

/* 行:从第2根线到第4根线(跨2行) */
grid-row: 2 / 4;

3. 单个元素独立对齐

覆盖容器全局对齐规则,单独设置某个格子的对齐方式:

justify-self: center; /* 单个元素水平居中 */
align-self: center; /* 单个元素垂直居中 */

五、Grid 区域布局(最直观的可视化布局)

Grid 最强功能之一:用文字画布局,直观易懂,专门用于页面整体架构(头部、侧边、主体、底部)。

完整后台布局示例(可直接复用)

<style>
  .layout {
    display: grid;
    /* 3列布局 */
    grid-template-columns: 200px 1fr;
    /* 3行布局 */
    grid-template-rows: 60px 1fr 40px;
    /* 可视化定义区域 */
    grid-template-areas:
      "header header"
      "sidebar main"
      "footer footer";
    /* 占满屏幕高度 */
    height: 100vh;
    margin: 0;
    gap: 10px;
  }
  /* 子元素绑定区域 */
  .header { grid-area: header; background: #1989fa; }
  .sidebar { grid-area: sidebar; background: #333; color: #fff; }
  .main { grid-area: main; background: #f5f5f5; }
  .footer { grid-area: footer; background: #eee; }
</style>

<div class="layout">
  <div class="header">头部导航</div>
  <div class="sidebar">侧边栏</div>
  <div class="main">主体内容</div>
  <div class="footer">底部版权</div>
</div>

优势:代码即布局图,一眼看懂页面结构,修改布局只需修改grid-template-areas 文字,无需调整定位。

六、Grid 核心取值精讲(新手必懂)

1. fr 单位(重中之重)

fr = fraction(分数),只分配剩余空白空间,不挤压固定尺寸元素。

示例:200px 1fr 2fr

  • 第一列固定200px

  • 剩余空间分为3份,第二列占1份,第三列占2份

完美解决「固定+自适应」布局,比百分比、auto 更精准。

2. minmax() 函数

语法:minmax(最小值, 最大值),给尺寸设置上下限,杜绝布局塌陷。

/* 列宽最小200px,最大不限,自适应拉伸 */
minmax(200px, 1fr)

七、新手高频误区 & 避坑指南

误区1:Grid 子元素还需要浮动/定位

❌ 错误:开启 Grid 后,子元素 自动脱离普通文档流,浮动、clear、vertical-align 全部失效,无需额外设置。

误区2:分不清 justify-items 和 justify-content

✅ 口诀:items 管格子内部,content 管整体网格

绝大多数场景,新手只用 justify-items / align-items 即可。

误区3:Grid 可以替代所有 Flex 布局

❌ 没必要:单行单列线性布局(导航、按钮组)优先 Flex,代码更简洁;多行多列、整体页面布局优先 Grid

误区4:auto-fill 和 auto-fit 混用出错

✅ 总结:想要留白用 auto-fill,想要铺满用 auto-fit,响应式卡片一律 auto-fit。

八、Grid 实战场景总结(开发直接套用)

1. 通用卡片网格(商品、图片、列表)

.card-wrap {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
  gap: 20px;
}

无需媒体查询,自动适配手机/平板/电脑端。

2. 经典后台管理布局

使用 grid-template-areas 区域布局,结构清晰、维护简单。

3. 不规则图文混排

通过 span 跨列/跨行实现大图、小图、文字组合的复杂布局,比 Flex 简单10倍。

九、Grid vs Flex 最终选型口诀

  • 一行/一列、线性排列 → 用 Flex

  • 多行多列、规整网格、页面整体架构 → 用 Grid

  • 复杂跨格、不规则布局、自适应网格 → 必用 Grid

  • 实战最优解:外层Grid搭框架,内层Flex排内容

十、极简核心属性速查表

/* 容器核心属性 */
display: grid;                          // 开启网格
grid-template-columns: 列尺寸;          // 定义列
grid-template-rows: 行尺寸;              // 定义行
gap: 间距;                               // 格子间距
justify-items: center;                  // 水平居中
align-items: center;                    // 垂直居中
grid-template-areas: 区域布局;          // 可视化布局

/* 子项核心属性 */
grid-column: span 2;                    // 跨2列
grid-row: span 2;                        // 跨2行
grid-area: 区域名;                       // 绑定布局区域


相关标签: css grid felx 布局

发表评论:

评论记录:

未查询到任何数据!
QQ咨询
回电话
回拨通话

我们稍后回拨您的电话

座机请加区号

微信联系
微信扫一扫
微信二维码

扫码加微信