一次真正“搞懂”的 Flex 布局笔记(移动端布局必会)

7 阅读4分钟

在学习移动端 Web 布局之前,我一直被各种布局方式折磨:
浮动要清除、定位要对子绝父相、行内块还有莫名其妙的空白缝隙。

直到真正开始用 Flex 布局,才意识到:
它不是“新语法”,而是一套全新的布局思维。

这篇文章是我系统学习 Flex 布局后的完整笔记,适合:

  • 正在学移动端布局的同学
  • 会用 flex,但不清楚原理和细节的人
  • 想把 flex 用“对”、而不是“凑效果”的人

一、为什么移动端更适合 Flex 布局?

在 PC 端,我们习惯用:

  • 标准流控制上下结构
  • 浮动做左右布局
  • 定位做局部叠加

这些方案在 移动端 会遇到明显问题:

  • 屏幕尺寸变化大
  • 元素比例需要自适应
  • 多列布局难以维护

Flex 的出现,正是为了解决这些问题。

传统布局 vs Flex 布局

传统布局的特点:

  • 兼容性好
  • 布局步骤多、代码冗长
  • 不适合复杂的自适应排列

Flex 布局的特点:

  • 布局思路清晰
  • 对齐、分配空间非常方便
  • 在移动端几乎是“标配方案”

结论很明确:

  • PC 端复杂页面:传统布局仍然常见
  • 移动端页面:Flex 是首选

二、Flex 布局到底在“控制”什么?

Flex 并不是直接控制子元素的宽高,而是:

由父容器统一管理子元素的排列方式和空间分配。

两个核心角色

  • Flex 容器(父元素)
  • Flex 项目(子元素)

只要给父元素加一句:

display: flex;

它的直接子元素就全部进入 Flex 布局体系。

注意一点非常重要:

一旦进入 Flex 布局,
子元素的 float、clear、vertical-align 全部失效。


三、主轴和侧轴:Flex 的灵魂概念

Flex 布局中没有“上下左右”的固定概念,只有:

  • 主轴(main axis)
  • 侧轴(cross axis)

默认情况:

  • 主轴:水平方向(从左到右)
  • 侧轴:垂直方向(从上到下)

但这两个轴是可以被修改的


四、父容器常用属性详解(重点)

Flex 布局的大部分控制权在父元素手里

1. flex-direction:主轴方向

决定子元素沿哪个方向排列。

常用值:

  • row:从左到右(默认)
  • row-reverse:从右到左
  • column:从上到下
  • column-reverse:从下到上

一旦主轴改变,侧轴会自动切换。


2. justify-content:主轴上的排列方式

用于控制子元素在主轴方向上的对齐和分布。

常见取值:

  • flex-start:从起点开始
  • flex-end:从终点开始
  • center:居中
  • space-between:两端贴边,中间均分
  • space-around:每个元素左右留等距空间

在移动端导航栏、按钮组中非常常用。


3. flex-wrap:是否换行

默认情况下,Flex 项目不换行

flex-wrap: nowrap;

如果希望内容超出后换行:

flex-wrap: wrap;

这个属性通常和 align-content 搭配使用。


4. align-items:侧轴对齐(单行)

控制子元素在侧轴上的对齐方式,适用于单行情况

常见取值:

  • flex-start
  • flex-end
  • center
  • stretch(默认,拉伸)

这是实现“垂直居中”的常用方式之一。


5. align-content:侧轴对齐(多行)

只有在 子元素换行之后 才会生效。

它控制的是:多行整体如何在侧轴上分布

这一点经常和 align-items 混淆,可以这样记:

  • 单行:看 align-items
  • 多行:看 align-content

6. flex-flow:方向 + 换行的简写

flex-flow: row wrap;

等价于:

flex-direction: row;
flex-wrap: wrap;

在实际项目中非常常见。


五、子项目常用属性

虽然 Flex 强调“父控子”,但子元素也有自己的能力。

1. flex:占用剩余空间的比例

.item {
  flex: 1;
}

表示该元素占据剩余空间的一份。

常用于:

  • 等分布局
  • 自适应宽度

2. align-self:单个元素的侧轴对齐

用于覆盖父元素的 align-items

.item {
  align-self: flex-end;
}

适合做特殊元素的单独对齐。


3. order:调整显示顺序

.item {
  order: 1;
}

数值越小,显示越靠前。

注意:
它只影响视觉顺序,不改变 DOM 结构。


六、Flex 在移动端布局中的常见思路

1. 一列布局

display: flex;
flex-direction: column;

常用于页面整体结构。


2. 顶部导航 + 内容区

  • 父容器 column
  • 导航固定高度
  • 内容区 flex: 1

3. 多列等分布局

.item {
  flex: 1;
}

移动端九宫格、功能入口常见写法。

七、Flex 使用中的几个易错点

  1. flex 作用在父元素,不是子元素
  2. 主轴一变,所有对齐逻辑都要重新判断
  3. align-items 和 align-content 的使用场景不同
  4. flex 并不是万能,复杂叠加仍然要配合定位