grid-template-areas基础概念
grid-template-areas是CSS Grid布局中用于定义网格区域名称的属性,它允许开发者用字符串的形式描述网格的结构,每个字符串代表一行,字符串中的名称对应网格中的区域。使用该属性前需要先通过grid-template-columns和grid-template-rows定义网格的列和行的大小,再通过grid-area为子元素指定对应的区域名称,就可以将元素放置到对应的网格位置。

核心关联属性
- grid-template-columns:定义网格的列宽,可搭配fr单位实现弹性分配
- grid-template-rows:定义网格的行高,支持固定值、百分比和fr单位
- grid-area:为网格子元素指定区域名称,需要和grid-template-areas中定义的名称对应
- grid-gap:定义网格行列之间的间距,可选属性,提升布局美观度
基础使用示例
我们先实现一个简单的三行三列布局,包含头部、侧边栏、主内容区和底部,首先定义网格容器的基础样式:
/* 网格容器基础样式 */
.container {
display: grid;
/* 定义3列,左侧侧边栏占1份,主内容区占3份,右侧边栏占1份 */
grid-template-columns: 1fr 3fr 1fr;
/* 定义3行,头部和底部固定高度,主内容区自适应 */
grid-template-rows: 80px 1fr 60px;
/* 定义区域布局,每一行对应一个字符串,.表示空区域 */
grid-template-areas:
"header header header"
"sidebar-left main sidebar-right"
"footer footer footer";
/* 网格间距 */
grid-gap: 10px;
height: 100vh;
padding: 10px;
box-sizing: border-box;
}
接下来为各个子元素指定对应的区域名称,将元素放置到对应位置:
/* 头部区域 */
.header {
grid-area: header;
background-color: #4a90e2;
display: flex;
align-items: center;
justify-content: center;
color: white;
font-size: 20px;
}
/* 左侧边栏 */
.sidebar-left {
grid-area: sidebar-left;
background-color: #f5f5f5;
padding: 15px;
}
/* 主内容区 */
.main {
grid-area: main;
background-color: #ffffff;
padding: 20px;
overflow-y: auto;
}
/* 右侧边栏 */
.sidebar-right {
grid-area: sidebar-right;
background-color: #f5f5f5;
padding: 15px;
}
/* 底部区域 */
.footer {
grid-area: footer;
background-color: #333333;
display: flex;
align-items: center;
justify-content: center;
color: white;
}
对应的HTML结构如下,只需要将子元素放入网格容器即可,不需要额外的定位代码:
<div class="container">
<div class="header">页面头部</div>
<div class="sidebar-left">左侧边栏</div>
<div class="main">主内容区域</div>
<div class="sidebar-right">右侧边栏</div>
<div class="footer">页面底部</div>
</div>
实现响应式复杂布局
要实现响应式效果,只需要在不同屏幕尺寸的媒体查询中重新定义grid-template-areas、grid-template-columns和grid-template-rows即可,不需要修改子元素的代码,这也是grid-template-areas的优势所在。
平板端适配(屏幕宽度小于1024px)
平板端可以隐藏右侧边栏,将主内容区宽度扩大,调整布局为两行三列变为两行两列:
@media screen and (max-width: 1024px) {
.container {
/* 改为两列,侧边栏1份,主内容区3份 */
grid-template-columns: 1fr 3fr;
/* 重新定义区域,右侧边栏不显示 */
grid-template-areas:
"header header"
"sidebar-left main"
"footer footer";
}
/* 隐藏右侧边栏 */
.sidebar-right {
display: none;
}
}
移动端适配(屏幕宽度小于768px)
移动端屏幕较窄,通常将侧边栏和主内容区改为垂直排列,所有区域占满整行:
@media screen and (max-width: 768px) {
.container {
/* 改为单列布局 */
grid-template-columns: 1fr;
/* 重新定义区域,所有元素垂直排列 */
grid-template-areas:
"header"
"sidebar-left"
"main"
"sidebar-right"
"footer";
/* 调整行高,适配移动端内容展示 */
grid-template-rows: 60px auto auto auto 50px;
}
/* 移动端重新显示右侧边栏 */
.sidebar-right {
display: block;
}
}
注意事项
- grid-template-areas中每一行的字符串长度必须一致,即每一行的区域数量要和grid-template-columns定义的列数相同,否则布局会失效
- 区域名称只能包含字母、数字、下划线,不能以数字开头,且不能和CSS的保留字冲突
- 用.表示的空区域不会被任何元素占据,可以用来实现留白效果
- 如果同一个区域名称在grid-template-areas中多次出现,这些区域会合并为一个大的网格区域,对应元素会占据所有合并的格子
- grid-template-areas需要和display: grid同时使用,否则属性不会生效
总结
通过grid-template-areas实现响应式复杂布局的核心是提前规划好不同屏幕尺寸下的区域划分,用字符串直观描述布局结构,再结合媒体查询动态调整网格定义。相比传统布局方式,这种方式代码更简洁、逻辑更清晰,后续维护时只需要修改区域定义即可,不需要调整每个元素的位置属性。在实际开发中,可以根据页面模块的优先级,合理规划区域命名,让布局代码更易读易维护。
css_gridgrid-template-areas响应式布局复杂布局修改时间:2026-07-11 20:54:15