Grid 更适合后台界面布局,因其通过 grid-template-areas 和嵌套 grid 精确控制功能区、尺寸与响应式重排,避免 Flexbox 的 hack 堆砌。

因为 Grid 天然支持二维区域划分,而后台界面的核心需求就是「固定功能区 + 精确尺寸控制 + 响应式重排」——Flexbox 在这类场景下容易退化为 hack 堆砌,Grid 则用 grid-template-areas 和嵌套 display: grid 直接表达设计意图。
grid-template-areas 比 flex + margin 更可靠地定义功能区块
后台界面常含 header、nav、main、sidebar、footer 等语义明确的区域。用 grid-template-areas 写成:
.container {
display: grid;
grid-template-areas:
"header header header"
"nav main sidebar"
"footer footer footer";
grid-template-rows: 60px 1fr 40px;
grid-template-columns: 240px 1fr 320px;
}每个子元素只需设 grid-area: "header" 就能精准落位。错误点集中在:
- 引号不闭合或换行符被意外删除 → 区域名失效,所有项塌缩到左上角(浏览器不报错)
-
grid-area值与模板中名称大小写/空格不一致 → 对应区域空白 - 试图用
margin或padding模拟区域间距 → 破坏网格轨道计算,导致响应式错位
gap 是唯一干净的面板间距控制方式
仪表盘里十几个卡片并列?别给每个 .card 加 margin,那在小屏断点时极易因盒模型叠加出滚动条或重叠。直接用容器级 gap:
立即学习“前端免费学习笔记(深入)”;
.dashboard {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 16px; /* 所有行列间隙统一生效 */
}关键细节:
-
gap不影响容器外边距,首行前/末行后空白需靠padding单独控制 - 需要行列不同间距?改用
row-gap: 12px; column-gap: 24px; - 嵌套 Grid 中的
gap不会继承父级,各层独立设置
嵌套 Grid 解决「局部复杂布局」而不污染主结构
比如一个「数据概览」面板内部要分四宫格图表,同时右上角带 badge 标签——此时不要退化成 position: absolute 或 Flex 嵌套:
.overview-panel {
display: grid;
grid-template-areas:
"chart1 chart2"
"chart3 chart4"
"badge . ";
grid-template-rows: 1fr 1fr auto;
grid-template-columns: 1fr 1fr;
}
.badge {
grid-area: badge;
align-self: end;
justify-self: end;
}这样既保持主仪表盘的 grid-template-areas 清晰,又让局部拥有完整二维控制权。注意:
- 嵌套 Grid 的
grid-area是相对于其父项(即该面板),不是整个页面 - 若子面板需响应式调整自身结构,直接在
@media里重写它的grid-template-areas,不影响外层 - 避免在嵌套层滥用
z-index—— Grid 的绘制顺序由 DOM 顺序决定,z-index仅在定位上下文中才起作用
响应式重排必须重写 template-areas,不能只调参数
手机屏把 sidebar 和 main 变成上下排列?别指望用 grid-column: 1 / -1 临时覆盖几十个子项。正确做法是在 @media 中整套替换:
@media (max-width: 768px) {
.container {
grid-template-areas:
"header"
"nav"
"main"
"sidebar"
"footer";
grid-template-rows: auto auto 1fr auto auto;
grid-template-columns: 100%;
}
}这种写法的好处是:
- 区域名消失即隐藏(如小屏去掉广告位,对应名字不写进新模板即可)
- 无需逐个修改子项的
grid-row/grid-column,维护成本低 - 浏览器渲染时直接跳过未声明的区域,性能无额外开销
真正难的不是写 Grid,而是克制住用绝对定位微调的冲动——Grid 的力量在于用结构代替修补,一旦开始混用 position: absolute 和 transform,就等于放弃 Grid 提供的可预测性。


















