Grid容器必须显式声明display: grid,否则所有网格属性无效;应优先使用fr、minmax()和auto实现响应式布局,避免固定像素值;推荐用grid-template-areas语义化命名区域并配合grid-area定位,而非手动计算行列数字。

Grid容器必须显式声明display: grid
不加这句,所有grid-template-columns、grid-gap等设置全无效——浏览器根本不会进入网格布局模式。常见错误是只写了子元素的grid-column,却忘了父容器没设display,结果盒子还是普通块级流。
实操建议:
立即学习“前端免费学习笔记(深入)”;
- 先写
display: grid,再配其他属性,顺序不能颠倒 - 用
display: inline-grid适合内联场景(比如导航项),但默认用grid更稳妥 - 别和
float或inline-block混用,它们会破坏网格上下文
用grid-template-columns控制列宽时,别硬套像素值
固定px在响应式场景下极易出问题:小屏溢出、大屏留白。真正快速布局的关键是组合使用fr、minmax()和auto。
实操建议:
立即学习“前端免费学习笔记(深入)”;
-
1fr 2fr 1fr比200px 400px 200px更灵活,自动按比例分剩余空间 - 要限制最小宽度?写
minmax(200px, 1fr),既保底又弹性 - 内容宽度不确定时,用
auto(如头像)+1fr(如文字区),避免文字换行挤压 - 别用
grid-template-columns: repeat(3, 1fr)硬写死列数,优先考虑grid-auto-flow: column+grid-auto-columns应对动态数量
子元素定位别只靠grid-column/grid-row手动填数字
手写grid-column: 2 / 4看着清楚,但改布局时每个数字都要重算,维护成本高。Grid真正的“快速”来自语义化区域命名和自动放置。
实操建议:
立即学习“前端免费学习笔记(深入)”;
- 用
grid-template-areas定义区域名(如"header header" "nav main" "footer footer"),子元素用grid-area: "header",一目了然 - 让Grid自动排布?去掉所有
grid-column,只设grid-auto-flow: dense+ 合理grid-template-columns,它会按HTML顺序填格子 - 要跨行/跨列?优先用
span 2(如grid-row: span 2),比算终点位置/ 3更安全 - 注意:
grid-column-start: 2和grid-column: 2 / 3效果一样,但后者更直观,推荐统一用斜杠语法
兼容性陷阱:IE11的grid和现代浏览器不兼容
IE11虽支持display: -ms-grid,但语法完全不同:grid-column得写成-ms-grid-column,fr单位不支持,grid-template-areas直接无效。强行兼容会让CSS膨胀一倍且难以维护。
实操建议:
立即学习“前端免费学习笔记(深入)”;
- 确认项目是否真需支持IE11——多数内部系统已可放弃
- 如果必须兼容,用
@supports (display: grid)做特性检测,现代写法包一层,IE走flex降级 - 别用PostCSS插件自动加
-ms-前缀,它无法转换语法差异,只会埋雷 - 调试时打开DevTools的Layout面板,勾选“Grid”,能实时看到线框和区域名,比猜数字靠谱得多
Grid布局快不快,取决于你愿不愿意放弃“精确定位每一格”的执念,转而信任fr、auto和grid-auto-flow的自动平衡能力——手动填数字的那一刻,就已经慢了。


















