CSS Flex布局
Flex布局是什么?
Flex是Flexible Box的缩写,意为”弹性布局”,是一种用于按行或按列布局元素的一维布局方法,可以为盒状模型提供最大的灵活性。任何一个容器都可以指定为Flex布局。
采用Flex布局的容器叫做Flex容器
他所有的子元素被称为Flex项目
flex
默认有两个轴,水平的叫做主轴main axis
,垂直的是交叉轴cross axis
单个项目占据的主轴空间叫做main size
,占据的交叉轴空间叫做cross size
1 | <style> |
容器的属性
flex-wrap
关键字 | 描述 | 图述 |
---|---|---|
nowrap | 不换行 | ![]() |
wrap | 换行 | ![]() |
wrap-reverse | 换行,且交叉轴方向反转 | ![]() |
修改上边的样式
1 | .item{ |
justify-content
justify-content
定义项目在主轴上的对齐方式
关键字 | 描述 | 图述 |
---|---|---|
flex-start | 左对齐 | ![]() |
flex-end | 右对齐 | ![]() |
center | 居中 | ![]() |
space-between | 两端对齐,项目之间的间隔都相等。 | ![]() |
space-around | 两端对齐,每个项目两侧的间隔相等。 | ![]() |
flex-direction
flex-direction
决定主轴的方向
关键字 | 描述 | 图述 |
---|---|---|
row | 水平从左向右 | ![]() |
row-reverse | 水平从右向左 | ![]() |
column | 垂直从上往下 | ![]() |
column-reverse | 垂直从下往上 | ![]() |
修改上边的样式
1 | .wrapper{ |
align-items
align-items
定义项目在交叉轴上的对齐方式 假定交叉轴方向为从上往下
关键字 | 描述 | 图述 |
---|---|---|
flex-start | 从上往下 | ![]() |
flex-end | 从下往上 | ![]() |
center | 居中 | ![]() |
baseline | 项目的第一行文字的基线对齐。 | ![]() |
stretch | 没有设置高度活着设为auto,则占满整个容器 | ![]() |
flex-flow
flex-flow
为flex-direction
和flex-wrap
的简写形式
1 | .wrapper{ |
项目的属性
order
order
定义项目的排列顺序,数值越小,排列越靠前,默认为0。
1 | .item{ |
flex-grow
flex-grow
定义项目占据剩余空间的能力
上边的代码就表示将剩余空间分为3份,one
占其中的两份two
只占其中的一份
未设置前:
1 | .one{ |
设置后:
flex-shrink
flex-shrink
属性定义了元素的收缩系数,他的计算方式就相对而言有点复杂了。
例如容器的宽度为500px
有三个项目宽度分别为:200px、300px、400px
他们的溢出空间就为:500 - (200 + 300 + 400) = -400;
三个子元素的 flex-shrink 的值分别为 2,4,6。
计算总压缩权重 2 * 200 + 4 * 300 + 6 * 400 = 4000
每个元素宽度为:
- 200 - ( 2 * 200 / 4000 ) * 400 = 160
- 300 - ( 4 * 300 / 4000 ) * 400 = 180
- 400 - ( 6 * 400 / 4000 ) * 400 = 160
计算总压缩权重sum 所有的元素宽度乘他的flex-shrink后相加;
计算剩余空间residue 父元素宽度 - 所有元素的宽度
就能得出每个元素宽度的计算公式:width - ( flex-shrink * width / sum ) * residue
flex-basis
flex-basis
定义项目占据主轴空间的大小,因为flex布局默认的主轴都是横向的所以他默认就和width
一样,他的优先级比width
高 如果flex-direction
的值修改为column
那么他就和height
一样了
1 | .wrapper{ |
1 | .wrapper{ |
flex
flex-grow
、flex-shrink
、flex-basis
的简写形式
1 | flex: flex-grow | flex-shrink | flex-basis |
默认值为:flex: 0 1 auto;
可以设置为:
- auto代表
flex: 1 1 auto;
- none代表
flex: 0 0 auto
align-self
设置单个项目覆盖align-item
的一个属性,默认为auto,代表着继承父元素其他属性值和align-item
是一样的