grid-template-areas 必须与 grid-area 配合使用且需显式定义 grid-template-rows/columns 才能生效,命名需严格匹配、无引号、大小写敏感,并仅在直接父容器内有效。

grid-template-areas 必须和 grid-area 成对出现
只写 grid-area: header 不会生效——浏览器根本不知道 “header” 指哪一块。命名区域是双向绑定:父容器得用 grid-template-areas 描述整体结构,子元素才可以用 grid-area 去“挂载”。
常见翻车点:
-
grid-template-areas写在了错误的父级(比如写在.main里,但实际网格容器是.layout) - 字符串里单词数不一致,比如
"header header" "sidebar main" "footer"—— 第三行只有 1 个词,整条声明被丢弃 - 区域名用了非法字符:
site-header合法,site header或1header直接失效 - 子元素上写了
grid-area: "header"—— 引号不能加,CSS 里名字就是字面量
grid-area 的值必须严格匹配字符串中的单词
大小写、连字符、顺序,一个都不能错。比如 grid-template-areas: "SiteHeader main",那对应元素就得写 grid-area: SiteHeader,而不是 siteheader 或 site-header。
调试时可打开 DevTools → Elements → 查看该元素的 computed 样式,如果 grid-area 显示为 auto 或 none,基本就是没匹配上。
实操建议:
- 统一用小写 + 短横线,如
main-content、user-sidebar - 命名避免和 HTML 元素名(
header、footer)或常用类名冲突 - 临时验证:把
grid-template-areas改成"test",再给某元素设grid-area: test,快速确认是否是命名问题
命名区域必须配合 grid-template-rows/columns 才能生效
只写 grid-template-areas: "header header" "nav main" 是不够的。如果没定义列宽或行高,浏览器无法生成对应轨道,区域就只是“纸上谈兵”,项目仍按文档流排列。
典型搭配:
- 列:用
grid-template-columns: 250px 1fr对应两列区域 - 行:用
grid-template-rows: 64px minmax(0, 1fr)防止主内容区塌陷 - 响应式下改
grid-template-areas时,别漏掉@media里对应的grid-template-rows/columns,否则区域可能挤成一行或消失
grid-area 不加引号、不混坐标、不跨容器复用
grid-area 是纯字符串匹配,不是变量也不是选择器。它只在当前 grid 容器内有效,不同容器可以重用同一个名字,比如两个卡片都用 grid-area: card 完全没问题。
容易踩的坑:
- 在同一个元素上既写
grid-area: header又写grid-column: 1 / 3—— 后者会被忽略,命名和坐标定位互斥 - 误以为
grid-area能像 ID 一样全局唯一,其实它只作用于直接父容器 - 在嵌套 Grid 中,子容器的
grid-area和外层无关,别试图“继承”区域名
真正卡住人的,往往不是语法记不住,而是漏掉了显式定义轨道这一步,或者字符串里多了一个空格、少了一个引号——这些细节在 DevTools 里不会报错,只会静默失效。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











