grid-template-areas 是 CSS Grid 中最直观、最易维护的结构定义方式,需确保每行单词数一致、子元素 grid-area 名称严格匹配,并配合 grid-template-rows 和 grid-template-columns 设置尺寸。

grid-template-areas 不是用来“辅助”布局的可选技巧,它是 CSS Grid 中最直观、最易维护的**结构定义方式**——只要模板字符串写对、grid-area 匹配准、行列尺寸给到位,布局就稳了。
grid-template-areas 字符串必须每行单词数一致
这是最容易被忽略、但一错就整个布局失效的硬性规则。浏览器会直接忽略整条 grid-template-areas 声明,且不报错。
- ✅ 正确:
"header header" "sidebar main" "footer footer"(每行 2 个词) - ❌ 错误:
"header header" "sidebar main aside" "footer footer"(第二行 3 个词,其他行 2 个)→ 整个声明失效,退化为无网格布局 - 点号
.算作一个“词”,用于留空单元格,比如"header . header" "sidebar main aside"是合法的(每行 3 个词)
子元素必须用 grid-area 显式命名,且名称严格匹配
grid-template-areas 只是画格子,真正把元素塞进去靠的是每个子元素的 grid-area 值。名称大小写、空格、拼写都必须完全一致。
- HTML 中的
<header>对应 CSS 中的header { grid-area: header; }——不是Header,也不是"header"(引号不能加) - 如果某个区域名在模板里写了两次(如
"header header"),它只对应一个元素;多个同名元素不会自动拆分,而是都挤进第一个匹配区域 - 没设置
grid-area的子元素会被丢到默认网格流里,可能覆盖或错位,别指望它自动归位
必须配合 grid-template-rows 和 grid-template-columns 才能有尺寸
grid-template-areas 本身不定义任何宽高,它只规定“谁在哪格”。没有 grid-template-rows 和 grid-template-columns,所有区域都会塌成 0 高宽。
- 列数由每行单词数决定:模板有 3 列 →
grid-template-columns必须提供 3 个值,比如200px 1fr 200px - 行数由字符串行数决定:3 行模板 →
grid-template-rows至少要 3 个值,比如80px 1fr 60px - 用
auto或minmax()也可以,但不能省略;漏写某一行/列会导致对应区域不可见或挤压变形
响应式切换布局只需改 template 字符串,不用动 HTML
这是 grid-template-areas 最实用的价值:结构变更完全在 CSS 层完成,HTML 保持干净。
立即学习“前端免费学习笔记(深入)”;
- 桌面端:
grid-template-areas: "header header" "sidebar main" "footer footer" - 移动端(侧边栏下移):
@media (max-width: 768px) { .container { grid-template-areas: "header header" "main main" "sidebar sidebar" "footer footer"; } } - 注意:不同断点下的模板仍需各自满足“每行词数一致”规则,否则该断点布局直接失效
grid-area 名和行列尺寸数量——这三步卡住,基本就不会出视觉错乱了。


















