弹性盒模型的作用:用来辅助div+css布局,解决传统布局的繁琐不便之处并且达到自适应布局模式(也称之为弹性布局)。
display属性 + position属性 + float属性进行页面布局。css3给我们提出了一套自适应的布局模式——弹性布局(弹性盒模型),它用来辅助div+css布局。

弹性盒子是由弹性容器和弹性项目构成。
display:flex:将盒子变为块级的弹性容器,对其他兄弟元素来说,它依然是一个普通的块级标签,对里面的子元素(弹性项目)来说,这个盒子是它们的弹性容器。display:inline-flex:将盒子变为行内块级弹性容器,对其他兄弟标签来说,它是一个普通的行内块级元素,对里面的子元素来说,它是弹性容器。flex-wrap 控制弹性项目是否换行
flex-direction
控制弹性项目的排列方式,同时确定弹性容器的主轴。
默认是水平方向为主轴,侧轴是与主轴垂直的轴为侧轴
row:默认值,沿着水平主轴让元素从左到右的排列row-reverse:沿着水平主轴让元素反向排列column:设置垂直方向为主轴,元素从上到下排列(改变主轴)column-reverse:设置垂直方向为主轴,元素反向排列order(给子元素设置)
取值也为数字,默认为0,数字越大越靠后
相同数字按照代码结构排列
语法:
order:数字;
应用场景:
flex-grow去消化富裕空间justify-content
flex-start:默认值,将主轴方向的富裕空间分配在弹性项目的最后(左对齐)flex-end:将富裕空间分配在主轴的弹性项目最前面(右对齐)center:弹性项目居中space-between:首尾紧靠弹性容器,中间弹性项目均分space-around:每个弹性项目两边的距离是一样的。space-evenly:每个弹性项目之间的距离相同,包含第一个和最后一个和弹性容器的距离。align-items
flex-strat:默认值,弹性项目在侧轴的顶部对齐flex-end:弹性项目在侧轴的底部对齐center:弹性项目在侧轴上居中对齐strech:拉伸,如果弹性项目没有设置高度,弹性项目会将弹性容器撑满align-self(给子元素设置)
flex-grow(给子元素设置)
语法:
flex-grow :数字;(弹性因子)
同一行弹性项目宽度相加之后,超出弹性容器的空间。
原理:让弹性项目通过flex-shrink去压缩分配给弹性项目
设置当前弹性容器宽度不够时,弹性项目的压缩因子(收缩因子)
取值:数字,默认为1
数字越大,压缩空间越大,盒子反而越小
原理:当弹性容器宽度容不下当前这行弹性项目时,就会按照flex-shrink来收缩弹性项目以达到不换行的目的。这个属性会按照设置的值将要收缩的宽度等量划分,减少弹性项目的的尺寸。
前提:弹性容器宽度不够时,并且不换行,而且弹性项目的总宽度要大于弹性容器的宽度,才能有效
压缩空间的分配公式:
每个弹性项目最终压缩后的宽度=自己弹性项目的初始宽度-(压缩空间/ 压缩因子的总数)
压缩空间=每个弹性项目的宽度的总和
练习:如果容器为500px,项目为120px,共有5个项目?
如果第一个项目设置flex-shrink为2,第二个设置为3, 第四个设置为3,请计算每个弹性项目最终压缩后的宽度?
压缩因子总数:2+3+1+3+1=10
压缩空间=120*5-500=100
每一份的取值宽度:100/10= 10px
box1:10*2=20px 120-20=100px
box2:10*3=30px 120-30=90px
box3、box5:10*1=10px 120-10=110px
box4:10*3=30px 120-30=90px
flex-basis(给子元素设置)
设置弹性项目的 默认宽度,其优先级大于width
语法:
flex-basis:300px;
width:400px;
优先级:flex-basis > width > 由内容撑开的宽度
4:10*3=30px 120-30=90px
flex-basis(给子元素设置)
设置弹性项目的 默认宽度,其优先级大于width
语法:
flex-basis:300px;
width:400px;
优先级:flex-basis > width > 由内容撑开的宽度