CSS Grid布局实战:5个高级网格设计技巧
1. 基础网格布局
创建响应式产品网格:
.product-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
gap: 20px;
padding: 20px;
}
.product-card {
background: white;
border-radius: 8px;
padding: 15px;
box-shadow: 0 2px 5px rgba(0,0,0,0.1);
}
.demo-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
gap: 20px;
padding: 20px;
}
.demo-card {
background: white;
border-radius: 8px;
padding: 15px;
box-shadow: 0 2px 5px rgba(0,0,0,0.1);
}
2. 命名网格区域
实现杂志式布局:
.magazine-layout {
display: grid;
grid-template-areas:
"header header header"
"sidebar main main"
"footer footer footer";
grid-template-columns: 200px 1fr 1fr;
grid-template-rows: auto 1fr auto;
min-height: 100vh;
}
header { grid-area: header; }
aside { grid-area: sidebar; }
main { grid-area: main; }
footer { grid-area: footer; }
3. 动态轨道大小
使用minmax()和auto-fit:
.responsive-gallery {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
grid-auto-rows: 200px;
gap: 10px;
grid-auto-flow: dense;
}
.gallery-item {
display: flex;
align-items: center;
justify-content: center;
}
.gallery-item.wide {
grid-column: span 2;
}
.gallery-item.tall {
grid-row: span 2;
}
4. 网格线定位
精确控制元素位置:
.dashboard {
display: grid;
grid-template-columns: [sidebar-start] 250px [sidebar-end content-start] 1fr [content-end];
grid-template-rows: [header-start] 80px [header-end main-start] 1fr [main-end footer-start] 60px [footer-end];
}
.sidebar {
grid-column: sidebar-start / sidebar-end;
grid-row: header-start / main-end;
}
.header {
grid-column: content-start / content-end;
grid-row: header-start / header-end;
}
布局方式 | Flexbox | CSS Grid |
---|---|---|
维度 | 一维 | 二维 |
对齐控制 | 项目间 | 容器级 |
适用场景 | 线性布局 | 复杂网格 |
5. 嵌套网格与子网格
创建复杂嵌套布局:
.card {
display: grid;
grid-template-rows: auto 1fr auto;
}
.card-header {
display: grid;
grid-template-columns: auto 1fr;
align-items: center;
}
.card-content {
display: grid;
grid-template-columns: subgrid;
grid-column: 1 / -1;
}
/* 子网格示例 (需浏览器支持) */
@supports (grid-template-columns: subgrid) {
.card-content {
display: grid;
grid-template-columns: subgrid;
}
}
CSS Grid为现代网页布局提供了前所未有的控制能力,特别适合构建复杂的响应式设计系统。