grid-template-areas 是 CSS Grid 布局中通过命名区域实现语义化二维布局的核心属性,需配合 display: grid、grid-area 及行列尺寸定义使用,语法严格、大小写敏感、失效静默。

grid-template-areas 是 HTML5 中 Grid 布局实现语义化、可视化区域划分的核心方式,它不靠数字线号,而是用名字“画”出整个布局结构,适合仪表盘、多栏页面、响应式后台等复杂二维场景。
父容器上定义区域模板
必须写在 display: grid 的容器上,语法极其严格:
- 每行用一对英文双引号包裹,引号内用单个空格分隔区域名,例如:
"header header sidebar" - 用点(
.)表示空白单元格,如:"nav main ." - 所有行的单词数必须一致,否则整条规则被浏览器静默丢弃
- 区域名只能含小写字母、数字、短横线(如
user-card),不能有空格、中文或开头数字(1col❌)
子元素必须显式声明 grid-area
每个要归入区域的子元素,需单独设置 grid-area,且值必须与模板中完全一致:
- 不加引号,大小写敏感,无多余空格 ——
grid-area: header;✅,grid-area: "header";❌ - 一个区域名可跨多格,浏览器自动合并成连续矩形块
- 没被任何元素引用的区域名会留空,不影响渲染
必须搭配行列尺寸才真正生效
仅写 grid-template-areas 不会生成可见网格,还需明确定义行列:
-
grid-template-columns决定每列宽度,可用fr、px、%或minmax() -
grid-template-rows控制每行高度,auto适配内容,1fr占剩余空间 - 列数必须等于
grid-template-areas每行的区域词数,否则整套区域定义失效
常见失效原因和排查建议
如果布局没按预期显示,优先检查这些点:
- DevTools 中 computed 样式里
grid-area显示为auto?说明子元素漏写了grid-area或拼写不匹配 - computed 里根本看不到
grid-template-areas?大概率是引号不闭合、空格数错、某行单词数不齐 - 元素错位或叠在一起?确认没同时设置
grid-column/grid-row—— 它们会直接覆盖grid-area - 想做响应式?不能只改某一行,必须重写整套
grid-template-areas+ 对应行列定义


















