CSS 的网格布局

作者:hubenchang0515日期:2025/11/2

#CSS 的网格布局

CSS 网格布局(Grid Layout)是一个强大的 2D 布局系统,可精确地控制页面的行和列布局,比 Flex 更适合结构化排布。

通过将一个元素样式的 display 属性设为 grid,可以将该元素设为网格布局的 容器

通过容器的 grid-template-columns 属性可以配置网格的列宽度,通过 grid-template-rows 属性可以配置网络的行高度。

下面这个示例将网格设为二行四列,两行的高度分别为 40px 和 80px,四列的宽度分别为 40px,80px,120px 和 160px。

1<!-- 网格有四列,宽度依次为 40px 80px 120px 160px --> 2<!-- 网格有两行,高度依次为 40px 80px--> 3<div style="display:grid; grid-template-columns:40px 80px 120px 160px; grid-template-rows:40px 80px;"> 4 <div style="background-color:red;"></div> 5 <div style="background-color:yellow;"></div> 6 <div style="background-color:blue;"></div> 7 <div style="background-color:orange;"></div> 8 <div style="background-color:green;"></div> 9 <div style="background-color:purple;"></div> 10 <div style="background-color:cyan;"></div> 11 <div style="background-color:pink;"></div> 12</div> 13

display:grid

#单位 fr

可以使用特殊的单位 fr 按比例分配列的宽度(或行的高度)。

下面这个示例将网格设为二行四列,两行的高度分均 40px,四列的宽度为 。

1<!-- 网格有四列,宽度为 1:2:2:1 --> 2<!-- 网格有两行,高度依次为 40px 40px--> 3<div style="display:grid; grid-template-columns:1fr 2fr 2fr 1fr;grid-template-rows:40px 40px;"> 4 <div style="background-color:red;"></div> 5 <div style="background-color:yellow;"></div> 6 <div style="background-color:blue;"></div> 7 <div style="background-color:orange;"></div> 8 <div style="background-color:green;"></div> 9 <div style="background-color:purple;"></div> 10 <div style="background-color:cyan;"></div> 11 <div style="background-color:pink;"></div> 12</div> 13

grid-template-columns:1fr 2fr 2fr 1fr

#repeat

可以使用 repeat 函数简化代码。

1repeat(重复次数, 被重复的值) 2

下面这个示例将网格设为二行四列,两行的高度分均 40px,四列的宽度为 。

1<!-- 网格有四列,宽度相同 --> 2<!-- 网格有两行,高度均为 40px --> 3<div style="display:grid; grid-template-columns:repeat(4, 1fr);grid-template-rows:repeat(2, 40px);"> 4 <div style="background-color:red;"></div> 5 <div style="background-color:yellow;"></div> 6 <div style="background-color:blue;"></div> 7 <div style="background-color:orange;"></div> 8 <div style="background-color:green;"></div> 9 <div style="background-color:purple;"></div> 10 <div style="background-color:cyan;"></div> 11 <div style="background-color:pink;"></div> 12</div> 13

grid-template-columns:repeat(4, 1fr)

#minmax

可以使用 minmax 函数设置单元格宽度的最小值和最大值,通常与 repeat 搭配,适用于响应式设计。

1repeat(重复次数, minmax(最小宽度, 最大宽度)) 2

重复次数通常使用 auto-fillauto-fit

  • auto-fill 满足宽度的前提下,单元格数量尽可能多
  • auto-fit 满足宽度的前提下,填满行

下面的示例中,容器的宽度在不断变化。网格将自动适应容器的宽度,列宽最小不小于 100px

可以看到 auto-fit 模式下,当容器宽度不小于 500px 时,由于只包含了 4 个单元,因此最多只被划分为 4 列;单元格的宽度被拉伸。

auto-fill 模式下,当容器宽度不小于 500px 时,尽管只包含了 4 个单元,网格仍被划分为了更多列;单元格仅占据相应的列。

1<!-- 单元格宽度最小 100px,最大 1fr(无限),自动填满行宽度 --> 2<!-- 单元格高度为 40px --> 3<div style="display:grid; grid-template-columns:repeat(auto-fit, minmax(100px, 1fr));grid-template-rows:repeat(auto-fit, 40px);"> 4 <div style="background-color:red;"></div> 5 <div style="background-color:yellow;"></div> 6 <div style="background-color:blue;"></div> 7 <div style="background-color:orange;"></div> 8</div> 9 10<!-- 单元格宽度最小 100px,最大 1fr(无限),自动填满行宽度 --> 11<!-- 单元格高度为 40px --> 12<div style="display:grid; grid-template-columns:repeat(auto-fill, minmax(100px, 1fr));grid-template-rows:repeat(auto-fit, 40px);"> 13 <div style="background-color:red;"></div> 14 <div style="background-color:yellow;"></div> 15 <div style="background-color:blue;"></div> 16 <div style="background-color:orange;"></div> 17</div> 18

响应式网格布局 auto-fit

响应式网格布局 auto-fill

上例中,单元格的最小宽度是 100px,最大宽度是无限。当网格容器的宽度为 500px 时, 若 ,则单元格宽度小于 100px 不满足宽度要求。因此 。

  • auto-fill 倾向于单元格更多,因此列数为 5,单元格宽度为 100px,四个元素占前四列。
  • auto-fit 倾向填满行,由于子元素数量只有四个,因此列数为4,单元格宽度为 125px。

CSS 的网格布局》 是转载文章,点击查看原文


相关推荐


Lua 的 Math 模块
hubenchang05152025/11/13

#Lua 的 Math 模块 请查看 Lua 标准库模块列表 了解更多相关 API。 常量说明math.huge数值的最大值,通常对应 C 语言中的 HUGE_VALmath.maxinteger整数的最大值,通常对应 C 语言中的 LONG_MAXmath.mininteger整数的最小值,通常对应 C 语言中的 LONG_MINmath.pi圆周率 函数说明math.max取最大值math.min取最小值math.ceil向上取整math.floor向下取整math.modf分解整数部


Lua 的 Coroutine 模块
hubenchang05152025/11/13

#Lua 的 Coroutine 模块 请查看 Lua 标准库模块列表 了解更多相关 API。 函数说明coroutine.create创建协程对象coroutine.close 关闭协程对象coroutine.resume恢复协程coroutine.yield让出协程coroutine.wrap创建协程对象,返回一个恢复函数coroutine.isyieldable检查协程能否让出coroutine.running获取正在运行的协程对象coroutine.status获取协程状态 Lua


HTML 的 <svg> 标签
hubenchang05152025/11/11

#HTML 的 <svg> 标签 请查看 HTML 元素帮助手册 了解更多 HTML 元素。 如果 svg 不是根元素,svg 元素可以用于在当前文档(比如说,一个 HTML 文档)内嵌套一个独立的 svg 片段。这个独立片段拥有独立的视口和坐标系统。 #属性 请查看 HTML 元素的全局属性 了解 HTML 元素的全局属性。 #示例 <svg width="300" height="300" viewBox="0 0 300 300" xmlns="http://www.w3.org/


HTML 的 <canvas> 标签
hubenchang05152025/11/11

#HTML 的 <canvas> 标签 请查看 HTML 元素帮助手册 了解更多 HTML 元素。 <canvas> 元素可被用来通过 JavaScript(Canvas API 或 WebGL API)绘制图形及图形动画。 #属性 请查看 HTML 元素的全局属性 了解 HTML 元素的全局属性。 height: 该元素占用空间的高度,以 CSS 像素(px)表示,默认为 150。 moz-opaque(废弃): 通过设置这个属性,来控制 canvas 元素是否半透明。如果你不想 c


Bash 的 while 循环语句
hubenchang05152025/11/7

#Bash 的 while 循环语句 Bash 的 while 循环语句的语法为: while 条件命令 do 命令 ... done 只要条件为真,就执行循环。 其中,条件命令返回成功(0)时为真(true),返回失败(非 0)时为假(false)。 如果省略(部分)换行,则需要使用分号(;)区分: while 条件命令; do 命令; 命令; done 示例: number=0 while [ "$number" -lt 10 ] # 只要 "$number" 小于 1


Bash 的 if 条件语句
hubenchang05152025/11/7

#Bash 的 if 条件语句 Bash 的 if 条件语句的语法为: if 条件命令 then 命令 ... elif 条件命令 then 命令 ... else 命令 ... fi 其中,条件命令返回成功(0)时为真(true),返回失败(非 0)时为假(false)。 如果省略(部分)换行,则需要使用分号(;)区分: if 条件命令; then 命令; 命令; elif 条件命令; then 命令; 命令; else 命令; 命令; fi


Bash 的 md5sum 命令
hubenchang05152025/11/6

#Bash 的 md5sum 命令 md5sum [OPTION]... [FILE]... 功能 计算或校验 MD5 值。 类型 可执行文件(/usr/bin/md5sum),属于 coreutils。 参数 OPTION 选项: -b, --binary - 以二进制模式读取文件;类 UNIX 系统下始终是二进制模式 -c, --check - 从文件中读取 MD5 值进行校验 --tag- 生成 BSD 风格的输出 -t, --text - 以文本模式读取文件;类 UNIX 系统下不


Bash 的 cd 命令
hubenchang05152025/11/6

#Bash 的 cd 命令 cd [-L|-P] [DIRECTORY] 功能 切换工作目录。 类型 Bash 内置命令。 参数 OPTION 选项: -L - 逻辑路径;在跟踪符号链接之前解析 ..(默认) -P - 物理路径;在跟踪符号链接之后解析 .. DIRECTORY - 要切换到的目录路径;省略表示切换到用户目录,- 表示切换到上次的工作目录 #示例 基本示例 $ pwd # 查看当前路径 /home/user/primer


CSS 的弹性布局
hubenchang05152025/11/2

#CSS 的弹性布局 在此之前,我们写的页面上元素是按照先后顺序排列的,块元素总是占据一行,不受我们控制。 例如之前 语义化 章节中的示例代码中, aside 块作为侧边栏,却并没有显示在侧边,而是单独占据一行。 本节将学习 CSS 中最常用的布局方式——弹性布局,它可以方便地控制容器内项目的排列、对齐和分布方式。 通过将一个元素样式的 display 属性设为 flex,可以将该元素设为弹性布局的 容器, 容器的直接子元素将不再占据一行。 示例: <div style="display:fle


Bash 的变量
hubenchang05152025/10/25

#Bash 的变量 Bash 中的变量定义语法如下: 变量名=值 注意,等号(=)两边不能有空格。 变量名的命名应当遵循如下规则: 只能包含字母,数字和下划线(_),并且不能以数字开头。 不能使用 Bash 保留的关键字,如:if then else fi for while do done 等 环境变量和常量使用全大写字母,单词间使用下划线分隔 普通变量使用全小写字母,单词间使用下划线分隔 函数内的局部变量使用 local 关键字声明 例如: PI=3.1415925 URL="htt