💡 一则也许对你有用的小广告 🏆

欢迎飞飞程序员   ,你将获得:专属的实战项目(已更新的所有会员标识的项目都能学习) / 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/shrinkorder
响应式 更适合定义整体结构变化 更适合内部项目的动态调整

何时选择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布局。

上一篇 vue3生成二维码的组件 qrcode的详细用法
已是最后一篇

全部评论(0)

头像
😃 😁 😅 😂 😍 😜 😝 🤑 🥵 🥰 😙 😎 😵 😭 😱 😖 🥳 👽 🙈 🤡 😤 💣 💯 💢 ❤️ 👍 👏 👋 👌 🤏 🙏
还没有任何评论哟~