Grid原生支持二维布局,Flex需嵌套模拟;Grid用grid-template-columns/rows定义行列坐标系,支持跨行跨列;Flex无行列索引,响应式重排更复杂;Grid容器内Flex对齐属性失效,需用justify-items等替代。

Grid天生支持行列并存,Flex只能靠嵌套模拟
Flex 没有“行+列同时定义”的能力,flex-direction 一设就锁死主轴方向,交叉轴只能被动适应。想让三个区域呈 2×2 排列?得套一层 display: flex; flex-direction: column 包住两行,每行再套一层 display: flex —— 这不是二维,是“用一维拼凑二维”。而 Grid 只需两行声明:grid-template-columns: 1fr 1fr 和 grid-template-rows: auto 1fr,立刻生成坐标系,每个子项可独立指定 grid-column 和 grid-row。
跨行跨列在Grid里是一行代码,在Flex里要改DOM结构
仪表盘里一个统计卡片要横跨两列、纵跨三行,Grid 写 grid-column: 1 / span 2; grid-row: 2 / span 3; 就完事;Flex 根本没有 span 概念,你得额外加 wrapper、设 height、调 flex-basis,还容易因内容高度不均导致错位。更关键的是:Flex 的 order 只能调顺序,不能指定“第2行第1列”,它无法建立行列索引关系。
响应式重排时,Grid改一行,Flex要动三层
桌面端是 "header sidebar main",手机端要变成 "header" "main" "footer",Grid 在媒体查询里只改 grid-template-areas 就行;Flex 得组合 flex-direction: column + order + display: none + 多层 wrapper 显隐控制,稍有遗漏就会留白或重叠。常见错误是侧边栏设了 order: -1 却忘了在小屏下给它加 width: 0 或 flex-basis: 0,结果它还在占空间。
PigX UI Pro 前端开发指南 - Vue 3 + TypeScript + Element Plus。当用户提到 PigX UI、PigX 前端、lgb-mgui 项目、Vue 3 企业级后台开发、Element Plus 后台开发时使用此技能。
Grid容器内,Flex属性直接失效,这点极易忽略
很多人习惯性在 Grid 容器上写 justify-content: center,但浏览器会静默忽略——Grid 的对齐体系是 justify-items、align-items、place-items。如果你真需要居中某个网格项,得在该项上设 justify-self: center; align-self: center。反过来,Grid 项自己可以设 display: flex 处理内部排列,这是合法且推荐的,但别把 flex 属性堆到 Grid 容器上。
立即学习“前端免费学习笔记(深入)”;
真正难处理的不是语法,而是思维切换:Flex 关注“内容怎么流”,Grid 关注“空间怎么分”。一旦你发现自己在 Flex 里反复算 calc(100% / 3 - 8px)、加 min-width、为换行写三段 @media,说明布局已超出一维范畴,该切 Grid 了。

















