前端基础——6、6、深入理解CSS Flexbox布局
- 深入理解CSS Flexbox布局
- 前言
- 一、Flexbox基础概念
-
- 二、核心布局机制
-
- 三、Flex容器属性详解
- 3.1 复合属性flex-flow
- 3.2 对齐控制
- 3.3justify-content 属性值详解表
-
- 3.4justify-content各个属性值实践
- 四、Flex项目属性
-
- 五、实战布局技巧
-
- 六、最佳实践建议
- 结语
深入理解CSS Flexbox布局
前言
在现代Web开发中,响应式布局已成为必备技能。Flexbox(弹性盒子布局)作为CSS3的重要特性,为开发者提供了强大的布局控制能力。本文将系统解析Flexbox的核心概念和应用技巧。
一、Flexbox基础概念
1.1 什么是Flexbox?
- 一维布局模型:专注于处理单行或单列布局
- 核心优势:灵活的空间分配和元素对齐能力
- 适用场景:导航栏、卡片布局、表单排列等线性布局需求
1.2 核心术语
术语 | 说明 |
---|
Flex容器 | 设置display: flex 的元素 |
Flex项目 | 容器的直接子元素 |
主轴(Main Axis) | 元素排列的主要方向 |
交叉轴(Cross Axis) | 垂直于主轴的方向 |
二、核心布局机制
2.1 轴线系统
<div class="container"><div class="item">1</div><div class="item">2</div><div class="item">3</div>
</div>
.container {display: flex;flex-direction: row;
}
主轴方向控制
row
(默认):水平方向,从左到右row-reverse
:水平方向,从右到左column
:垂直方向,从上到下column-reverse
:垂直方向,从下到上

2.2 多行布局
.container {flex-wrap: wrap;
}
属性值 | 效果 |
---|
nowrap | 单行显示(默认) |
wrap | 多行排列 |
wrap-reverse | 反向换行 |
三、Flex容器属性详解
3.1 复合属性flex-flow
.container {flex-flow: row wrap;
}
3.2 对齐控制
属性 | 作用轴 | 常用值 |
---|
justify-content | 主轴 | stretch,flex-start,flex-end,center,space-around,space-between |
align-items | 交叉轴 | stretch, center, flex-start |
align-content | 多行对齐 | stretch, center, space-around |
3.3justify-content 属性值详解表
属性值 | 兼容性说明 | 布局类型 | 详细描述 |
---|
start | 需注意浏览器兼容性差异 | 通用布局 | 从行首开始排列,首元素对齐行首,后续元素依次紧跟前一个元素 |
end | 需注意浏览器兼容性差异 | 通用布局 | 从行尾开始排列,末元素对齐行尾,前序元素依次紧接后一个元素 |
flex-start | 默认值,支持所有主流浏览器 | 弹性布局专属 | 元素紧密排列在主轴起始侧,非弹性容器视为start |
flex-end | 支持所有主流浏览器 | 弹性布局专属 | 元素紧密排列在主轴结束侧,非弹性容器视为end[4,6] |
center | 全平台兼容 | 弹性/通用布局 | 元素居中排列,首尾元素距容器边缘等距 |
left | 需注意主轴方向影响 | 弹性布局 | 元素靠左边缘排列,主轴与内联轴不平行时表现同start |
right | 需注意主轴方向影响 | 弹性布局 | 元素靠右边缘排列,主轴与内联轴不平行时表现同end |
space-between | 主流浏览器支持良好 | 弹性布局 | 首尾元素贴边,中间元素等距分布 |
space-around | 主流浏览器支持良好 | 弹性布局 | 元素两侧等距,首尾间距为中间间距的一半 |
space-evenly | HarmonyOS 4.61+支持 | 弹性布局 | 所有间距(包括首尾)完全相等 |
stretch | 需配合auto 尺寸使用 | 弹性布局 | 自动拉伸元素填满容器,受max-width/height限制(注意:虽然弹性盒子支持 stretch 属性,但将其应用于弹性盒子时,由于拉伸是由 flex 属性控制的,所以 stretch 的行为与 start 相同) |
关键特性对比:
- 主轴方向影响:left/right在主轴非水平时表现与start/end相同
- 间距计算差异:
- space-between:首尾无外边距
- space-around:首尾外边距=中间间距/2
- space-evenly:所有外边距相等
- 布局限制:
- flex-start/flex-end仅在弹性容器生效
- stretch需要元素尺寸设为auto
注:部分属性值在不同布局容器中表现不同,建议在弹性布局中使用flex-
前缀属性值
3.4justify-content各个属性值实践

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>.jc_fs{justify-content: flex-start;}.jc_ce{justify-content: center;}.jc_fe{justify-content: flex-end;}.jc_sb{justify-content: space-between;}.jc_sa{justify-content: space-around;} .jc_se{justify-content: space-evenly;}.jc_st{justify-content: stretch;}.d_flex{display: flex;}.f_wrap{flex-wrap: wrap;}.alit_cen{align-items: center;}.alit_fs{align-items: flex-start;}.alit_fe{align-items: flex-end;}.alit_st{align-items: stretch;}.alcon_cen{align-content: center;}.alcon_st{align-content: stretch;}.alcon_fe{align-content: flex-end;}.alcon_fs{align-content: flex-start;}.alcon_sa{align-content: space-around;}.alcon_sb{align-content: space-between;}.div_out{width: 100%;height: 100%;}.div_auto{width: auto;height: 150px;}.div_in0{width: 100px;height: 150px;}.div_in1{width: 30%;height: 150px;}.bg-black{background-color: black;}.bg-red{background-color: red;}.bg-blue{background-color: blue;}.bg-green{background-color: green;}.bg-yellow{background-color: yellow;}</style>
</head>
<body>justify-content: flex-start; <div class="div_out d_flex jc_fs "><div class="div_in0 bg-black"></div><div class="div_in0 bg-red"></div><div class="div_in0 bg-blue"></div><div class="div_in0 bg-green"></div><div class="div_in0 bg-yellow"></div></div>justify-content: space-between; <div class="div_out d_flex jc_sb "><div class="div_in0 bg-black"></div><div class="div_in0 bg-red"></div><div class="div_in0 bg-blue"></div><div class="div_in0 bg-green"></div><div class="div_in0 bg-yellow"></div></div>justify-content: space-around; <div class="div_out d_flex jc_sa "><div class="div_in0 bg-black"></div><div class="div_in0 bg-red"></div><div class="div_in0 bg-blue"></div><div class="div_in0 bg-green"></div><div class="div_in0 bg-yellow"></div></div>justify-content: space-evenly; <div class="div_out d_flex jc_se "><div class="div_in0 bg-black"></div><div class="div_in0 bg-red"></div><div class="div_in0 bg-blue"></div><div class="div_in0 bg-green"></div><div class="div_in0 bg-yellow"></div></div>justify-content: flex-end; <div class="div_out d_flex jc_fe "><div class="div_in0 bg-black"></div><div class="div_in0 bg-red"></div><div class="div_in0 bg-blue"></div><div class="div_in0 bg-green"></div><div class="div_in0 bg-yellow"></div></div>justify-content: center; <div class="div_out d_flex jc_ce "><div class="div_in0 bg-black"></div><div class="div_in0 bg-red"></div><div class="div_in0 bg-blue"></div><div class="div_in0 bg-green"></div><div class="div_in0 bg-yellow"></div></div>justify-content:stretch;<div class="div_out d_flex jc_st "><div class="div_in0 bg-black"></div><div class="div_in0 bg-red"></div><div class="div_in0 bg-blue"></div><div class="div_in0 bg-green"></div><div class="div_in0 bg-yellow"></div></div>justify-content: space-between; flex-wrap: wrap;width:30%;<div class="div_out d_flex jc_sa f_wrap alcon_st"><div class="div_in1 bg-black"></div><div class="div_in1 bg-red"></div><div class="div_in1 bg-blue"></div><div class="div_in1 bg-green"></div><div class="div_in1 bg-yellow"></div></div>
</body>
</html>
四、Flex项目属性
4.1 弹性伸缩控制
.item {flex: 1 1 200px;
}
三剑客属性:
- flex-grow:分配剩余空间的比例
- flex-shrink:空间不足时的收缩比例
- flex-basis:项目的基础尺寸
4.2 常用简写值
简写形式 | 等效值 | 特性说明 |
---|
flex: initial | 0 1 auto | 默认不扩展 |
flex: auto | 1 1 auto | 等比例伸缩 |
flex: none | 0 0 auto | 禁止伸缩 |
flex: 1 | 1 1 0% | 均分容器空间 |
五、实战布局技巧
5.1 经典布局实现
.container {display: flex;
}
.sidebar {flex: 0 0 200px;
}
.main {flex: 1;
}
5.2 垂直居中妙招
.center-box {display: flex;justify-content: center;align-items: center;
}
六、最佳实践建议
- 优先使用简写属性
flex
- 合理设置
flex-basis
替代固定宽度 - 善用
min-width/max-width
防止过度伸缩 - 结合媒体查询实现响应式布局
结语
Flexbox彻底改变了传统CSS布局方式,通过本文的系统讲解,相信您已经掌握了这一强大布局工具的核心要点。建议在实际项目中多实践,结合Chrome DevTools的Flex调试功能,逐步提升布局功力。