grid-template-areas 字符串格式错误会导致整个布局退化为单列流。必须确保每行引号内单词数一致、仅用单空格分隔、引号不可省略、区域名大小写敏感且全小写加下划线;子元素需显式设置 grid-area 才能匹配区域;须配套定义 grid-template-columns 和 grid-template-rows,响应式时二者须同步更新。
写了 grid-template-areas 却发现页面变成单列流,不是浏览器 bug,而是字符串格式非法导致整条规则被丢弃——不报错,但完全失效。
"header header header" → "nav main aside" → "footer footer footer"
grid-template-areas: header header header 是非法语法,浏览器直接跳过aside 和 Aside 是两个不同区域;不能含中文标点、点号、括号,推荐全小写+下划线(如 main_content)grid-area 就等于没进网格grid-template-areas 只是“画地图”,不给元素指派区域名,它就不会落到对应位置——而是按 DOM 顺序默认填入左上角起始格,大概率错位甚至叠在一起。
header { grid-area: header; }、main { grid-area: main; }、aside { grid-area: aside; }
<main></main> 标签 ≠ 自动匹配 grid-area: main;Grid 不解析语义,只认你写的字符串值grid-area 显示为 auto,说明该元素未被任何区域名匹配上display: contents 包裹网格项:父容器“消失”,子元素直接受上级网格约束,此时在它身上写的 grid-area 失效grid-template-columns 和 grid-template-rows 必须配套写grid-template-areas 定义的是“语义位置”,不是尺寸。漏掉列或行定义,网格就只有骨架没血肉——要么挤成一列,要么 footer 上浮、高度塌陷。
grid-template-columns: 200px 1fr 200px(左固定、中弹性、右固定);避免混用 % 和 fr,结果不可控1fr,不是 auto:否则无法撑高容器,footer 会飘在半空;含超宽表格时可改用 minmax(0, 1fr) 防挤压auto 更健壮;要 footer 始终贴底,配合 grid-template-rows: auto 1fr auto 或 min-height: 100vh
grid-template-columns 和 grid-template-areas 必须同步更新——只改一个,另一个就会“对不上号”想在小屏隐藏侧边栏?别用 display: none 或删 HTML 元素——这会破坏区域映射逻辑,导致网格项错位或消失。
立即学习“前端免费学习笔记(深入)”;
grid-template-areas,把不需要的区域名整行移除:@media (max-width: 768px) { .container { grid-template-areas: "header" "main" "footer"; } }
grid-area 属性建议保留(如 aside { grid-area: aside; }),但确保该名称不再出现在当前断点的 grid-template-areas 字符串中"header" "nav" "main" "footer",并配 grid-template-columns: 1fr
aside,平板改用 sidebar,但 CSS 还在匹配 aside,必然失配grid-template-areas 字符串和 grid-template-columns 列数之间的严格对齐——差一个空格、少一个词、多一行换行,整个布局就静默退化为普通文档流,而控制台不会给你任何提示。