2025 年了,只会
display: grid; grid-template-columns: repeat(3, 1fr)?
本文带你解锁 10 个真正能让设计稿落地的 Grid 高级技巧,附可直接复制的代码片段,无图也能秒懂。
1️⃣ 自适应瀑布流:一行搞定 Pinterest 布局
.wall {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
grid-auto-rows: 20px; /* 最小行高 */
gap: 16px;
}
.item:nth-child(3n) { grid-row: span 6; }
.item:nth-child(5n+1) { grid-row: span 4; }
auto-fit+minmax让列数随屏宽变化,span控制卡片高度差异,零 JS 实现瀑布流。
2️⃣ 命名区域 + 区域重叠:做海报级排版
.poster {
display: grid;
grid-template-areas:
"img img title"
"img img desc"
"meta meta desc";
grid-template-columns: 1fr 1fr 200px;
}
.img { grid-area: img; z-index: 1; }
.title { grid-area: title; }
.desc { grid-area: desc; }
通过
grid-area把元素“钉”进随意命名的网格区域,再用z-index做叠层,杂志风封面轻松搞定。
3️⃣ 稠密填充消灭空白
.gallery {
display: grid;
grid-template-columns: repeat(4, 1fr);
grid-auto-flow: dense; /* 关键:回头填空 */
gap: 8px;
}
.gallery > .big {
grid-column: span 2;
grid-row: span 2;
}
dense算法会把小卡片塞进前面留下的空隙,不会出现“大坑”。
4️⃣ 隐式网格自动补行
.table {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-auto-rows: minmax(40px, auto); /* 超出行数自动补 */
}
数据条数未知?让浏览器自动建隐式行,动态列表必备。
5️⃣ 网格线命名:告别 nth-child
.layout {
display: grid;
grid-template-columns: [sidebar-start] 200px [sidebar-end main-start] 1fr [main-end];
grid-template-rows: [header-start] 60px [header-end content-start] 1fr [content-end];
}
aside { grid-column: sidebar-start / sidebar-end; }
main { grid-column: main-start / main-end; }
用
[name]给网格线起外号,语义化又不怕 DOM 顺序变化。
6️⃣ CSS 变量 + Grid 做“一键换肤”
:root {
--cols: 4;
--gap: 16px;
}
.responsive {
display: grid;
grid-template-columns: repeat(var(--cols), 1fr);
gap: var(--gap);
}
@media (max-width: 600px) {
:root { --cols: 1; --gap: 8px; }
}
JS 只需
document.documentElement.style.setProperty('--cols', 6)即可动态改列数。
7️⃣ 区域重叠实现 卡片 Hover 放大
.card {
grid-area: 1 / 1 / 2 / 2;
transition: transform .3s;
}
.card:hover {
grid-area: 1 / 1 / 3 / 3; /* 瞬间占两行两列 */
transform: scale(1.05);
}
用
grid-area坐标放大,不脱离文档流,兄弟节点自动避让。
8️⃣ repeat(auto-fit, minmax()) 响应式圣杯
.holy-grail {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 1rem;
}
一行代码搞定 移动端单栏 / 桌面端三栏,媒体查询都不用写。
9️⃣ Grid + Flex 组合拳:二维 + 一维完美协作
.page {
display: grid;
grid-template-areas:
"header header"
"sidebar main"
"footer footer";
}
.main {
display: flex; /* 在 main 区域内再用 Flex 处理局部布局 */
flex-wrap: wrap;
}
Grid 管整体骨架,Flex 管局部流式,互不抢戏。
🔟 调试神器:浏览器可视化网格线
Chrome DevTools → Layout → 勾选 Grid,
直接 拖拽网格线 调尺寸,所见即所得,设计稿秒同步。
🏁 3 秒速记口诀
- 二维大框架 → Grid
- 一维小排列 → Flex
- 自动填充空隙 →
dense - 响应式列数 →
auto-fit+ 变量 - 调试靠拖拽 → DevTools Layout
把本文收藏夹置顶,下次再写 float:left 就罚自己抄 10 遍!