圣杯布局的网格区域本质是主内容优先渲染与侧边栏固定位置的结合,通过grid-template-areas声明语义区域,按字符串顺序解析行,实现DOM顺序与视觉顺序分离,确保SEO和无障碍可访问性。
什么是圣杯布局的网格区域本质
圣杯布局的核心不是浮动或 flex 模拟,而是「主内容优先渲染 + 侧边栏固定位置」。CSS Grid 用
直接声明语义区域,
浏览器
按字符串顺序解析行,天然支持 DOM 顺序与视觉顺序分离。
关键点在于:左侧栏、主内容、右侧栏必须在 HTML 中按「左-中-右」物理顺序书写,但通过
重新映射到网格行内位置,才能保证 SEO 和无障碍可访问性。
三栏区域定义与
写法
用三行字符串定义区域布局,每行对应一个网格轨道(row),每个单词对应一个列轨道(column)上的单元格:
注意:
中重复的单词(如
)会自动横跨多列,无需额外设置
;单词之间用空格分隔,换行即换行,引号不能省略。
如果左右栏要自适应(比如左侧菜单宽度随文字撑开),把
换成
或
主内容用
保证占满剩余空间,不是
—— 否则它不会撑高容器,导致 footer 上浮
区域名区分大小写,
和
是不同区域
如何让中间栏在 DOM 中写在最前面(真正“圣杯”语义)
Grid 允许用
把任意元素扔进指定区域,不受 HTML 顺序限制:
然后为它们分别指定区域:
这样 HTML 里
在最前,对
爬虫
和阅读器更友好,而视觉上仍是左-中-右
排列
。
Comet AI 浏览器
下载 Comet AI 浏览器,体验由 Perplexity AI 驱动的革命性上网方式。内置 AI 助手可实时总结网页、跨标签页对比信息、自动执行任务。告别繁琐操作,让 AI 成为你的浏览副驾,大幅提升研究与工作效率。支持 Windows、macOS、Android 和 iOS。
下载
立即学习
“
前端免费学习笔记(深入)
”;
必须给每个元素显式设置
,否则它们会按源顺序依次填入网格,破坏布局
区域名可以是任意合法标识符,但需和
字符串中完全一致
不推荐用数字命名区域(如
),容易和
数值混淆
响应式下如何收缩侧边栏并重排区域
用媒体查询修改
字符串即可切换整体结构:
此时左右栏变成上下堆叠在主内容之后,不需要 JS 或额外 wrapper。
所有区域名仍保持不变,只是排列方式变化,CSS 类名无需改动
若想隐藏某栏(如移动端不要右侧栏),直接删掉对应单词,例如
避免在小屏下还保留
列宽,应同步改
实际最难的不是写对区域名,而是忘记给容器设
—— 那整个
完全不生效,页面退化成普通流式布局,还查不出错。
grid-template-areasgrid-template-areasgrid-template-areasdisplay: grid;
grid-template-areas:
"header header header"
"left main right"
"footer footer footer";
grid-template-columns: 200px 1fr 200px;
grid-template-rows: auto 1fr auto;grid-template-areasheadercolspan200pxmax-contentfit-content(200px)1frautoMainmaingrid-area...
.main { grid-area: main; }
.left { grid-area: left; }
.right { grid-area: right; }grid-areagrid-template-areas"1 2 3"grid-columngrid-template-areas@media (max-width: 768px) {
.container {
grid-template-areas:
"header"
"main"
"left"
"right"
"footer";
grid-template-columns: 1fr;
}
}"header main left footer"200pxgrid-template-columns: 1frdisplay: gridgrid-template-areas