0

0

CSS如何创建网格布局_grid_template配置

星夢妙者

星夢妙者

发布时间:2025-07-16 14:38:02

|

1070人浏览过

|

来源于php中文网

原创

grid-template 是css grid布局的核心复合属性,它通过一行代码同时定义网格的行、列结构和命名区域。1. 使用时需先设置容器为 display: grid 或 inline-grid;2. 它是 grid-template-rows、grid-template-columns 和 grid-template-areas 的简写形式;3. 语法上,/ 前定义行结构与区域名称,/ 后定义列结构;4. 支持 fr 单位实现弹性空间分配,minmax() 函数设定轨道尺寸范围,从而提升响应式设计能力;5. 可结合媒体查询实现不同屏幕尺寸下的布局切换,极大增强了布局的灵活性与可维护性。

CSS如何创建网格布局_grid_template配置

grid-template 是CSS Grid布局里一个非常核心且功能强大的复合属性。它允许你在一行代码里同时定义网格的行(rows)、列(columns)结构以及命名区域(areas)。简单来说,它就像一个总设计师,一次性把整个页面的骨架和区域划分都确定下来,让布局变得异常直观和可读,远比我们以前用浮动或者flexbox来做复杂布局要省心得多。

CSS如何创建网格布局_grid_template配置

解决方案: 要创建网格布局并配置 grid-template,你首先需要将容器元素设置为 display: griddisplay: inline-grid。接着,就可以使用 grid-template 属性来定义网格的结构了。

grid-template 实际上是 grid-template-rowsgrid-template-columnsgrid-template-areas 这三个属性的简写。它的语法结构大致是这样的:

CSS如何创建网格布局_grid_template配置
.container {
  display: grid;
  grid-template:
    [row1-start] "header header header" 100px [row1-end]
    [row2-start] "nav main aside" auto [row2-end]
    [row3-start] "footer footer footer" 50px [row3-end]
    / 1fr 2fr 1fr; /* 这里的 / 后面是列定义 */
}

让我来拆解一下这个例子,我个人觉得这样写是把 grid-template 的威力展现得淋漓尽致:

立即学习前端免费学习笔记(深入)”;

  1. 行定义与区域命名:/ 符号之前的部分,每一对双引号代表一行,里面的字符串是该行中各个单元格对应的区域名称。比如 "header header header" 意味着这一行有三个单元格,它们都属于 header 区域。你可以用 . 来表示一个空的单元格。 行的高度(如 100px, auto, 50px)紧随其后。 方括号 [row1-start] 是可选的行线名称,方便后续定位。

    CSS如何创建网格布局_grid_template配置
  2. 列定义:/ 符号之后的部分定义了网格的列结构。比如 1fr 2fr 1fr 定义了三列,宽度比例为 1:2:1。这里可以使用各种长度单位(px, em, rem, %),也可以使用 fr 单位(fractional unit,表示可用空间的一份),minmax() 函数,甚至 repeat() 函数。

示例:一个经典的页面布局

<div class="grid-container">
  <header>Header</header>
  <nav>Nav</nav>
  <main>Main Content</main>
  <aside>Aside</aside>
  <footer>Footer</footer>
</div>
.grid-container {
  display: grid;
  /*
   * 定义三行:header行高100px,main行自适应,footer行高50px
   * 定义三列:左侧导航1份,中间主内容2份,右侧边栏1份
   * 并为每个区域命名
   */
  grid-template:
    "header header header" 100px
    "nav    main   aside" auto
    "footer footer footer" 50px
    / 1fr 2fr 1fr; /* 列的定义 */

  gap: 10px; /* 网格间距 */
  height: 100vh; /* 方便看效果 */
}

/* 将子元素放置到对应的命名区域 */
header { grid-area: header; background-color: #f0f0f0; padding: 10px; }
nav { grid-area: nav; background-color: #e0e0e0; padding: 10px; }
main { grid-area: main; background-color: #d0d0d0; padding: 10px; }
aside { grid-area: aside; background-color: #c0c0c0; padding: 10px; }
footer { grid-area: footer; background-color: #b0b0b0; padding: 10px; }

通过这种方式,整个页面的宏观布局一眼就能看明白,维护起来也方便很多。我个人在做响应式布局时,经常会结合媒体查询来调整 grid-template 的值,简直是神器。

grid-templatefr 单位和 minmax() 函数如何提升布局弹性?

在我看来,fr 单位和 minmax() 函数是 grid-template 乃至整个CSS Grid布局中最具革命性的特性之一,它们直接解决了传统布局中弹性与固定尺寸难以兼顾的痛点。

智简简历
智简简历

免费AI简历制作工具,智能生成、可视化编辑、多格式导出。

下载

fr (fractional unit) 代表“一份”可用空间。它的强大之处在于,它会自动计算并分配容器内剩余的空间。举个例子,如果你有三列,定义为 1fr 2fr 1fr,这意味着第一列和第三列各占一份可用空间,而第二列则占据两份。如果总共有 4 份,那么第二列就会是总宽度的 50%。这比百分比灵活得多,因为它是在扣除固定尺寸元素(比如 px 单位的侧边栏)后,再来分配剩余空间。我经常用它来做主内容区域的自适应宽度,简直是省心。

minmax(min, max) 函数则更进一步,它允许你为网格轨道(行或列)设置一个尺寸范围。这意味着你可以说:“这个列的宽度最小是 200px,最大是 1fr。” 当可用空间不足 200px 时,它会保持 200px(可能出现溢出);当空间充足时,它会按 1fr 的比例进行分配。这种弹性与限制的结合,对于创建真正健壮和响应式的布局至关重要。

想象一下,你有一个侧边栏,你希望它最小宽度是 250px,但如果屏幕足够宽,它也可以扩展到占据总宽度的 0.25fr。这时你就可以写 minmax(250px, 0.25fr)。这种能力让我觉得在处理不同屏幕尺寸时的布局策略变得异常清晰和直接,不再需要复杂的JS计算或者嵌套多层flexbox来模拟。

grid-templategrid-template-areas 有何关联?

实际上,grid-template-areasgrid-template 这个大属性里的一部分,或者说,grid-template 包含了 grid-template-areas 的功能。当我第一次接触到 grid-template 的时候,我发现它把行、列的定义和区域的命名巧妙地融合在了一起,这种做法简直是天才。

grid-template-areas 单独使用时,你需要先用 grid-template-rowsgrid-template-columns 定义好网格结构,然后才能用 grid-template-areas 来放置元素。例如:

.container {
  display: grid;
  grid-template-rows: 100px auto 50px;
  grid-template-columns: 1fr 2fr 1fr;
  grid-template-areas:
    "header header header"
    "nav main aside"
    "footer footer footer";
}

grid-template 的美妙之处在于,它把这些都整合到了一起。你可以在定义行和列的同时,直接用字符串字面量来“画”出你的布局区域。这就好像你拿着笔在纸上画草图一样,非常直观。

.container {
  display: grid;
  grid-template:
    "header header header" 100px /* 定义第一行是header区域,高100px */
    "nav main aside" auto         /* 定义第二行是nav, main, aside区域,高自适应 */
    "footer footer footer" 50px   /* 定义第三行是footer区域,高50px */
    / 1fr 2fr 1fr;                /* 最后定义三列的宽度比例 */
}

这种集成方式,在我看来,大大提升了代码的可读性和维护性。当你需要调整布局时,你只需要看 grid-template 这一行或这几行代码,就能清晰地看到整个页面的骨架是如何组织的。特别是当布局比较复杂时,这种视觉化的定义方式能有效避免出错,并且让团队成员之间更容易理解布局意图。它把布局的“意图”和“实现”融合得非常好。

在实际项目中,grid-template 还有哪些高级用法或注意事项?

在实际项目里,grid-template 的应用远不止基础布局那么简单。我发现它的一些“高级”用法或者说一些需要注意的细节,能让你的布局更加灵活和健壮。

一个很常见的场景是响应式设计。虽然前面提到了用媒体查询改变 grid-template 的值,但更进一步,你可以利用它来彻底改变不同屏幕尺寸下的布局结构。比如,在桌面端可能是三列布局,到了移动端,你可能想让它们变成单列堆叠,这时只需要在媒体查询里重写 grid-template 即可:

/* 桌面端 */
.grid-container {
  grid-template:

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

760

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

221

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1566

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

649

2023.11.24

java读取文件转成字符串的方法
java读取文件转成字符串的方法

Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

1228

2024.03.22

php中定义字符串的方式
php中定义字符串的方式

php中定义字符串的方式:单引号;双引号;heredoc语法等等。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

1184

2024.04.29

go语言字符串相关教程
go语言字符串相关教程

本专题整合了go语言字符串相关教程,阅读专题下面的文章了解更多详细内容。

192

2025.07.29

c++字符串相关教程
c++字符串相关教程

本专题整合了c++字符串相关教程,阅读专题下面的文章了解更多详细内容。

131

2025.08.07

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

76

2026.03.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Sass 教程
Sass 教程

共14课时 | 0.9万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.6万人学习

CSS教程
CSS教程

共754课时 | 42.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号