先为父容器设置网格划分主要区域,再在子元素中嵌套grid实现精细控制。1. 父级容器用grid-template-areas定义页头、侧边栏、主内容区和页脚布局;2. .main等区域启用嵌套grid,通过grid-column和grid-row实现跨列跨行排列;3. 多层嵌套时子grid独立计算,互不影响;4. 结合fr、minmax和auto-fit提升响应式灵活性。分层设计使布局清晰灵活,需避免过度嵌套以保持结构简洁。

使用 CSS Grid 实现复杂嵌套布局,关键在于将容器逐层划分,每一层都可以独立设置网格结构。Grid 不仅支持二维布局,还能在子元素中再次启用 grid,形成灵活的嵌套结构。
1. 父级容器定义整体网格
先为最外层容器设置 grid 布局,划分主要区域,比如页头、侧边栏、主内容区和页脚。
.container {
display: grid;
grid-template-columns: 200px 1fr;
grid-template-rows: 60px auto 1fr auto;
grid-template-areas:
"header header"
"sidebar main"
"content main"
"footer footer";
height: 100vh;
gap: 10px;
}
.header { grid-area: header; }
.sidebar { grid-area: sidebar; }
.content { grid-area: content; }
.main { grid-area: main; }
.footer { grid-area: footer; }
2. 子容器内部再次使用 grid
在某个 grid 区域内(如 .main),可以再启用 grid 布局,实现更细粒度的控制。例如将主内容区划分为多个卡片或模块。
.main {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-template-rows: 100px 1fr;
gap: 10px;
}
.card-a { grid-column: span 2; }
.card-b { grid-row: span 2; }
这样,.main 内部就形成了一个 3 列、2 行的新网格,子元素可跨行跨列排列。
立即学习“前端免费学习笔记(深入)”;
3. 多层嵌套与响应式结合
嵌套 grid 可以多层叠加。例如,在 .content 中放入另一个 grid 容器,用于排列表单或图片墙。
.content {
display: grid;
grid-template-columns: 1fr 2fr;
gap: 15px;
}
.form-section { grid-column: 1; }
.image-gallery {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(100px, 1fr));
gap: 8px;
}
注意:嵌套时,子 grid 不会影响父级布局,各自独立计算尺寸。
4. 使用 fr、minmax 和 auto-fit 提高灵活性
在嵌套布局中,合理使用 fr 单位和函数能让结构更自适应。
- fr 单位按比例分配剩余空间
- minmax(100px, 1fr) 防止列过窄
- auto-fit + minmax 实现响应式自动换行
例如:
.grid-nested {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
}
基本上就这些。通过分层设计,每层只关注自己的布局逻辑,就能用 grid 构建出结构清晰又灵活的复杂页面。关键是避免过度嵌套,保持 HTML 结构简洁。










