💡 一则也许对你有用的小广告 🏆
欢迎飞飞程序员 ,你将获得:专属的实战项目(已更新的所有会员标识的项目都能学习) / 1v1 提问 / Java 学习路线 / PHP 学习路线 / 学习打卡 / 社群讨论
- 正在进行中的项目:《FFBlog知识付费博客项目》 正在持续更新中,基于 Spring Boot 3.x + JDK 21...,[**点击查看**] ;
- 《从零开发:FFBlog知识付费博客项目(全栈开发)》 演示链接: https://ffblog.ffcxy.com/ ;
截止目前, 飞飞 正在疯狂爆肝实战项目,后续还会上新更多项目,目标是将所学知识开发成项目并且分享给大家,如知识付费系统, Ai系统, CMS系统,在线商城系统,等等 ,欢迎点击围观
以往使用tailwind布局时,直接就使用了grid布局,后来突然想到flex也可以布局,但是到底是用grid布局还是用flex布局呢?这里就稍微探讨一下。
核心区别
| 特性 | Grid 布局 | Flexbox 布局 |
| 维度 | 二维布局(行列同时控制) | 一维布局(单行或单列控制) |
| 适用场景 | 复杂网格结构(如仪表盘、卡片流) | 线性排列(导航栏、对齐项目) |
| 子项控制 | 直接通过网格线定位和跨度 | 依赖 flex-grow/shrink 和 order |
| 响应式 | 更适合定义整体结构变化 | 更适合内部项目的动态调整 |
何时选择Grid?
✅ 适合场景
- 需要精确的二维布局(同时控制行和列)。
<!-- 示例:3x3 网格 -->
<div class="grid grid-cols-3 grid-rows-3 gap-4">
<div class="col-span-2">占 2 列</div>
<div class="row-span-2">占 2 行</div>
</div>
- 不规则布局(如跨行/跨列、杂志式排版)。
<!-- 示例:跨列+跨行 -->
<div class="grid grid-cols-4">
<div class="col-span-2 row-span-2">...</div>
</div>
- 整体结构需要响应式重构(如移动端从单列变为桌面端多列)。
<!-- 移动端单列 → 桌面端多列 -->
<div class="grid grid-cols-1 md:grid-cols-3">
<div>...</div>
</div>
❌ 不适用场景
- 只需简单的一维排列(如导航菜单)。
- 子项需要动态收缩/扩展(Flexbox 的
flex-grow 更直接)。
何时选择 Flexbox?
✅ 适合场景
- 单行或单列布局(如水平导航栏、垂直列表)。
<!-- 水平居中对齐 -->
<div class="flex justify-center items-center">
<div>Item</div>
</div>
- 子项需要动态填充剩余空间。
<!-- 左侧固定,右侧填满 -->
<div class="flex">
<div class="w-20">Fixed</div>
<div class="flex-grow">Fluid</div>
</div>
- 子项需要换行(如标签组)。
<!-- 自动换行的标签 -->
<div class="flex flex-wrap gap-2">
<div class="bg-gray-100 px-2">Tag</div>
...
</div>
❌ 不适用场景
- 需要同时控制行和列的复杂布局(Grid 更高效)。
- 需要精确的跨行/跨列控制。
决策流程图

总结
- 选 Grid:
当布局需要行列同时控制、跨行/跨列或复杂响应式重构时(如仪表盘、卡片网格)。
- 选 Flexbox:
当布局是单行/单列、需要动态分配空间或对齐项目时(如导航栏、表单)。
- 混合使用:
用 Grid 搭建框架,用 Flexbox 微调内部细节。
> 也就是说当要搭建框架时使用Grid布局,当需要搭建局部布局的时候使用Flex布局。