一、开启 Flex 布局
给容器加上 display: flex,它的直接子元素就会自动排成一行。
.box {
display: flex;
}
方向由 flex-direction 控制,默认是 row(横向),改成 column 就是纵向。
二、主轴与交叉轴
这是 Flex 最核心的两个概念:
- 主轴:由 flex-direction 决定的方向,默认水平方向;
- 交叉轴:与主轴垂直的方向。
justify-content 管主轴对齐,align-items 管交叉轴对齐。
.box {
display: flex;
justify-content: center; /* 主轴:居中 */
align-items: center; /* 交叉轴:居中 */
height: 200px;
}
常用取值:flex-start(起点)、center(居中)、flex-end(终点)、space-between(两端对齐)、space-around(环绕均匀分布)。
三、flex-grow / shrink / basis
这三个属性写在子元素上,控制它如何"伸缩":
flex-grow:剩余空间怎么分,值越大分得越多;flex-shrink:空间不够时怎么缩,默认 1;flex-basis:分配空间前的初始大小。
.item {
flex: 1 1 200px; /* 放大:1 缩小:1 基础宽度:200px */
}
简写口诀:
flex: 1 表示"平均分剩余空间",做等宽分栏时最常用。
四、常见布局案例
1. 让一个盒子水平垂直居中
.parent {
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
}
2. 导航栏:左 logo 右菜单
.nav {
display: flex;
justify-content: space-between;
align-items: center;
}
3. 卡片自适应换行
.cards {
display: flex;
flex-wrap: wrap; /* 允许换行 */
gap: 20px; /* 间距 */
}
.card {
flex: 1 1 240px; /* 最小约 240px,自动换行 */
}
五、小结
- 容器加 display:flex 开启布局;
- justify-content 管主轴,align-items 管交叉轴;
- 子元素用 flex 简写控制伸缩;
- 配合 flex-wrap 与 gap 就能做响应式卡片。