Flexbox(弹性盒子布局)是 CSS3 中引入的一种一维布局模型,旨在提供一种更高效、灵活的方式来对容器中的子元素进行排列、对齐和分配空间。它特别适合用于响应式设计,能轻松实现各种复杂的布局结构。
🧠 什么是 Flex 布局?
Flex 是 Flexible Box 的缩写,中文译为“弹性盒子”,它的核心思想是让容器有能力改变其子元素的宽度/高度,以适应不同的显示设备或屏幕尺寸。
一旦将一个元素设置为 display: flex
,它就变成了一个 Flex 容器(flex container),其所有直接子元素自动成为 Flex 项目(flex item)。
✅ 特点:
- 子元素默认在一条轴上排列(主轴)
- 支持自动调整间距与对齐
- 简化了垂直居中、等高列、响应式布局等问题
- 不受传统文档流限制(float、clear、vertical-align 失效)
📏 Flex 容器的六大属性(作用于容器)
属性名 | 说明 |
---|---|
flex-direction | 设置主轴方向(row / row-reverse / column / column-reverse) |
flex-wrap | 控制是否换行(nowrap / wrap / wrap-reverse) |
flex-flow | flex-direction 和 flex-wrap 的简写,默认为 row nowrap |
justify-content | 主轴上的对齐方式(flex-start / center / flex-end / space-between / space-around) |
align-items | 交叉轴上的对齐方式(stretch / flex-start / center / flex-end / baseline) |
align-content | 多根轴线的对齐方式(仅当换行时有效) |
🎯 Flex 项目的六大属性(作用于子元素)
属性名 | 说明 |
---|---|
order | 定义项目的排列顺序,默认为0,数值越小越靠前 |
flex-grow | 定义项目的放大比例,默认为0(不放大) |
flex-shrink | 定义项目的缩小比例,默认为1(空间不足时可缩小) |
flex-basis | 在分配多余空间之前,项目占据的主轴空间,默认为 auto |
flex | flex-grow 、flex-shrink 、flex-basis 的简写,默认值为 0 1 auto |
align-self | 单个项目覆盖父容器的 align-items 设置,默认为 auto |
🧩 使用 Flex 布局的常见场景
1. ✅ 水平垂直居中(最常用)
.container {
display: flex;
justify-content: center;
align-items: center;
}
📌 适用于弹窗、按钮组、图标居中等场景。
2. ✅ 自动伸缩的导航栏
.navbar {
display: flex;
justify-content: space-between;
}
📌 适用于头部导航、底部工具栏等需要自动分布空间的场景。
3. ✅ 响应式卡片布局
.card-container {
display: flex;
flex-wrap: wrap;
gap: 16px;
}
📌 适用于图片墙、商品列表、信息卡片等多列布局。
4. ✅ 等宽/等高布局
.equal-boxes {
display: flex;
}
.equal-boxes > div {
flex: 1;
}
📌 适用于按钮组、选项卡、表单字段排布等。
5. ✅ 左右固定 + 中间自适应
.layout {
display: flex;
}
.left, .right {
width: 200px;
}
.center {
flex: 1;
}
📌 适用于页面整体布局,如侧边栏+内容区。
6. ✅ 动态排序(通过 order
)
.item1 { order: 2; }
.item2 { order: 1; }
📌 可根据设备类型动态调整 DOM 元素顺序,增强响应式体验。
📊 Flex vs Grid:如何选择?
特性 | Flex 布局 | Grid 布局 |
---|---|---|
维度 | 一维(主轴或交叉轴) | 二维(行列同时控制) |
适用 | 项目顺序、对齐、自动伸缩 | 复杂网格结构、精确布局 |
推荐 | 简洁的组件级布局 | 页面级复杂结构布局 |
📌 一句话总结:
Flex 布局更适合一维排列(水平或垂直),而 Grid 更适合二维网格布局。
💡 实际开发建议
- ✅ 移动端开发首选 Flex 布局;
- ✅ 配合
gap
属性可以方便地设置子元素之间的间距; - ✅ 使用
flex: 1
实现等分布局非常高效; - ✅ 注意
flex-wrap
和align-content
的组合使用; - ✅ 熟练掌握
justify-content
和align-items
的各种取值; - ✅ 结合媒体查询做响应式适配;
📌 总结
Flex 布局是现代网页布局的核心工具之一,凭借其强大的弹性能力,开发者可以快速构建出各种响应式、对齐良好的界面结构。
核心优势 | 场景举例 |
---|---|
简洁易用 | 居中、导航条、按钮组 |
弹性伸缩 | 卡片布局、响应式设计 |
排序灵活 | 移动优先布局、动态排序 |
无需浮动 | 替代 float 和 inline-block 布局 |