Skip to content

Flex 和 Grid

一句话结论

Flex 更适合一维布局,重点处理一行或一列里的分配、对齐和换行;Grid 更适合二维布局,能同时控制行和列。选型时先看布局是“线”还是“面”。

Flex 核心

css
.row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
}

.item {
  flex: 1 1 0;
  min-width: 0;
}

flexflex-growflex-shrinkflex-basis 的缩写:

属性含义
flex-grow有剩余空间时是否放大
flex-shrink空间不足时是否缩小
flex-basis分配空间前的基础尺寸

Grid 核心

css
.grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
  gap: 16px;
}

这段代码常用于响应式卡片列表:容器宽时自动增加列数,窄时自动减少列数,每列最小 220px。

Flex 和 Grid 选型

场景推荐
导航栏、按钮组、表单行Flex
卡片列表、仪表盘、多区域页面Grid
元素数量不固定,只关心主轴排列Flex
行列都需要严格对齐Grid

常见坑

Flex 子项溢出

css
.content {
  flex: 1;
  min-width: 0;
}

Flex 子项可能因为默认最小宽度导致溢出,尤其内部有长文本、代码块或表格时,需要显式设置 min-width: 0

gap 和 margin 的区别

gap 是容器控制子项间距,不会在最外侧额外产生空白;margin 是元素自身外边距,容易叠加或影响相邻模块。现代 Flex 和 Grid 都支持 gap,组件内部间距优先用它。

Grid 的 auto-fillauto-fit

auto-fill 会尽量保留空轨道;auto-fit 会折叠空轨道,让已有元素撑满空间。卡片自适应布局多数使用 auto-fit

常见追问

justify-contentalign-items 分别控制什么?

在 Flex 中,justify-content 控制主轴对齐,align-items 控制交叉轴对齐。主轴方向由 flex-direction 决定,所以换成 column 后,两者的视觉方向也会变化。

Grid 的 fr 是什么?

fr 表示可用空间的份额。grid-template-columns: 1fr 2fr 表示剩余空间按 1:2 分配,但仍会受内容最小尺寸影响,必要时用 minmax(0, 1fr) 防止溢出。