← 返回内容列表
基础原理

Flex 和 Grid 应该怎么选

Flex 和 Grid 并不是互相替代:Flex 擅长一条轴线,Grid 擅长同时控制行和列。

先用白话理解

这篇内容在讲什么?

Flex 适合排一行或一列,Grid 适合同时管理行和列。

问题

卡片用 Flex 后每行对不齐,应该换 Grid 吗?

没有先判断布局是一维还是二维。

解决方案
  1. 单行单列优先 Flex
  2. 规则行列优先 Grid
  3. 外层 Grid 内部 Flex
  4. 使用 minmax 避免固定宽度
自适应网格与卡片内部布局示例代码
.card-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 240px), 1fr));
  gap: 16px;
}

.card {
  display: flex;
  flex-direction: column;
  min-width: 0;
  padding: 20px;
}

.card__action {
  margin-top: auto;
}

@media (max-width: 640px) {
  .card-grid { grid-template-columns: 1fr; }
}
01

线性排列优先 Flex

导航、按钮组、工具栏和单行卡片适合 Flex,可以方便处理对齐、间距和剩余空间。

02

规则网格优先 Grid

卡片列表、仪表盘和明确行列关系的页面适合 Grid,布局规则更直观。

03

允许组合使用

外层使用 Grid 定义页面区域,卡片内部使用 Flex 排列内容,是非常常见的组合方式。

  • 先判断是一维还是二维
  • 避免依赖固定宽度
  • 测试内容变长后的表现

结语

判断最终要回到真实体验

技术方案没有脱离场景的标准答案。把用户任务、业务边界、开发成本和长期维护放在一起评估,才有可能做出稳定、清晰且经得起变化的页面。

照着做的步骤

  1. 判断布局是一维还是二维
  2. 先定义容器规则
  3. 让子项保持弹性
  4. 检查长文字和窄屏

容易踩的坑

  • 大量使用固定宽度
  • 用 margin 硬凑间距
  • 忽略内容高度不同

术语不用怕

  • 主轴:Flex 排列方向
  • 交叉轴:与主轴垂直方向
  • 网格轨道:Grid 的行或列