flexbox是一维布局,仅处理行或列的排列,不支持行列对齐;grid是二维布局,可同时控制行和列,支持跨格、叠放及响应式网格。二者分工明确,常嵌套使用。

Flexbox 是一维布局,只管“排成一行或一列”
它没有“行对齐行”“列对齐列”的概念。比如你写 display: flex; flex-direction: row; flex-wrap: wrap;,换行后每一行是独立计算的:justify-content: space-between 只作用于当前行,上一行和下一行之间不会对齐。常见错误是以为加了 flex-wrap 就能做出整齐网格——结果卡片高度不一时,每行底边参差不齐。
适用场景很明确:
- 导航栏里几个
<a></a>水平居中排列 - 卡片内部文字、图标、按钮的垂直居中(
align-items: center) - 表单控件与标签左右对齐(用
flex-direction: column+justify-content控制间距)
Grid 是二维布局,天生支持“行和列同时控制”
它不是靠内容“挤”出来的结构,而是先画格子再填内容。比如 grid-template-columns: repeat(3, 1fr) 和 grid-template-rows: auto 1fr auto 一起生效,就能稳稳定义出三列两行的骨架。即使某个格子里的内容为空或超长,其他格子的位置和尺寸也不会被带偏。
关键能力体现在这些地方:
如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Android友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Android应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更
- 元素可以跨行跨列:
grid-column: 1 / -1让标题横跨整行 - 同一网格单元可叠放多个元素(配合
z-index),不用脱离文档流 -
gap同时控制行列间距,比 Flexbox 里用margin模拟更干净 - 响应式只需改
grid-template-columns,比如repeat(auto-fit, minmax(250px, 1fr)))
别在 Flexbox 里硬凑二维效果
有人用多层嵌套 Flex 实现“网格”:外层 flex-direction: column,每行再套一个 display: flex。这看似可行,但问题立刻浮现:
- 不同行的相同列无法对齐(比如所有头像左边缘不齐)
- 没法让一个元素跨两行(除非绝对定位,破坏流式逻辑)
- 响应式断点要同步控制所有嵌套层,维护成本指数上升
- 浏览器渲染时需多次重排,尤其在动态增删项时性能更差
真正需要行列对齐、区域划分、跨格布局时,直接上 display: grid,别绕弯。
它们不是互斥关系,而是分工明确
现实项目里,Grid 和 Flexbox 经常嵌套使用:
- 页面整体用
display: grid划分 header / sidebar / main / footer 区域 - 每个区域内部用 Flexbox 排内容:比如
main里用 Flex 做文章标题+摘要+按钮的垂直堆叠 - 卡片组件本身用 Grid 定义图片、标题、描述的二维位置,卡片内按钮组再用 Flex 对齐
混淆根源往往在于没想清楚:你现在是在“搭房子的承重墙”(Grid),还是在“摆屋里的家具”(Flexbox)。承重墙错了,家具再怎么挪也救不了结构。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










