一、对 Flex 布局的理解
Flexbox(Flexible Box Layout),即 弹性盒子布局,是 CSS3 提供的一种一维布局模型,专门用于在容器和子元素之间高效地分配空间,即使子元素尺寸未知或动态变化,也能自动调整布局。
💡 核心目标:简化复杂布局的实现,实现真正的“自适应”与“对齐控制”。
✅ Flex 布局的核心概念
- 两个角色:
- 容器(Flex Container):通过
display: flex或display: inline-flex创建。 - 项目(Flex Items):容器的直接子元素,自动成为弹性项目。
- 容器(Flex Container):通过
- 主轴与交叉轴:
- 主轴(Main Axis):项目排列的方向(由
flex-direction决定)。 - 交叉轴(Cross Axis):垂直于主轴的方向。
row),从左到右。 - 主轴(Main Axis):项目排列的方向(由
- 空间分配机制:
- Flex 项目可以伸缩(flex-grow/flex-shrink),根据可用空间自动扩展或收缩。
- 支持强大的对齐方式(
justify-content,align-items,align-content)。
二、Flex 容器常用属性
| 属性 | 作用 |
|---|---|
display: flex | 创建弹性容器 |
flex-direction | 主轴方向:row | column | row-reverse | column-reverse |
flex-wrap | 是否换行:nowrap | wrap | wrap-reverse |
justify-content | 主轴对齐方式:flex-start | center | flex-end | space-between | space-around |
align-items | 交叉轴对齐方式:flex-start | center | flex-end | stretch | baseline |
align-content | 多行时的行间距对齐(需 flex-wrap: wrap) |
三、Flex 项目常用属性
| 属性 | 作用 |
|---|---|
flex-grow | 放大比例(默认 0) |
flex-shrink | 缩小比例(默认 1) |
flex-basis | 初始大小(类似 width) |
flex | 简写:flex: grow shrink basis(推荐使用) |
order | 排列顺序(可改变视觉顺序) |
align-self | 单个项目在交叉轴上的对齐方式(覆盖 align-items) |
四、Flex 布局的典型使用场景(面试重点)
✅ 1. 水平/垂直居中
传统方法复杂,Flex 一行代码搞定:
.container {
display: flex;
justify-content: center; /* 水平居中 */
align-items: center; /* 垂直居中 */
}
🎯 适用于模态框、登录页、卡片内容居中等。
✅ 2. 等高列布局
多列高度不一致时,Flex 自动拉伸项目到相同高度。
.container {
display: flex;
}
.item {
flex: 1; /* 均分空间,高度一致 */
}
🎯 适用于侧边栏+主内容、产品卡片列表等。
✅ 3. 圣杯布局 / 导航栏
左侧固定宽度,中间自适应,右侧固定。
.nav {
display: flex;
}
.left {
width: 100px;
}
.center {
flex: 1; /* 占据剩余所有空间 */
}
.right {
width: 50px;
}
🎯 适用于顶部导航、页脚、工具栏等。
✅ 4. 响应式导航菜单
结合媒体查询,轻松实现移动端折叠菜单。
.menu {
display: flex;
flex-wrap: wrap; /* 超出换行 */
}
🎯 移动端适配时自动换行,无需 JavaScript。
✅ 5. 对齐与空间分配
如按钮组、标签云、评分组件等需要精确对齐的场景。
.button-group {
display: flex;
justify-content: space-between;
}
🎯 实现均匀分布、两端对齐等效果。
✅ 6. 替代浮动布局
在 Flex 出现前,浮动常用于布局,但问题多。现在可完全替代:
- ❌ 清除浮动
- ❌ 高度塌陷
- ✅ Flex 原生支持自适应,无副作用
五、面试加分点
| 点位 | 说明 |
|---|---|
| 🌟 一维 vs 二维 | Flex 是一维布局(行或列),Grid 是二维(行+列),两者互补 |
| 🌟 移动优先友好 | 结合 flex-wrap 和媒体查询,天然支持响应式 |
🌟 flex: 1 的含义 | 等价于 flex: 1 1 0,表示可伸缩,占据剩余空间 |
| 🌟 语义化更强 | 不再依赖 float、position 实现布局,代码更清晰 |
✅ 总结
Flex 布局是一种强大、灵活的一维布局模型,通过设置容器和项目的弹性属性,能够轻松实现对齐、分布、自适应等复杂布局需求。
典型使用场景包括:居中对齐、等高列、导航栏、响应式菜单、空间分配等。
💬 一句话总结:
“Flex 布局让曾经复杂的 CSS 布局变得简单直观,是现代前端开发必备的布局工具。”
在面试中,能结合具体场景写出代码,并对比传统方法(如浮动)的劣势,会大大提升专业印象。
THE END


