弹性布局(flex-layout)是一套css3新增的自适应布局模式,用于替代传统的div+css布局或辅助
弹性布局主要是为了让盒子里面的子元素在面对容器不同宽度时都能够很好的适应。特别适合满足不同屏幕或设备。即对移动端友好。
给盒子设置css弹性布局的相关css属性来使用弹性布局。
给容器设置css属性display:flex/inline-flex将该盒子变为一个弹性容器,它里面的子元素会以弹性布局的方式来处理。
display:flex;
会将盒子变为块级的弹性容器。对其他兄弟标签来说,就是一个普通的块级标签,对里面子元素来说,该盒子就是他们的弹性容器。
display:inline-flex;
会将盒子变为行内的弹性容器。对其他兄弟标签来说,就是一个普通的行内标签,对里面子元素来说,该盒子就是他们的弹性容器。
弹性容器只对自己的直接子元素有效
display:inline-flex和flex对自己的兄弟标签来说没有任何影响
对于弹性容器来说,高度是自适应的,无需设置高度。
通过flex-direction设置的方向为主轴,与之垂直的方向为侧轴。如果主轴是水平,侧轴就是垂直方向。
目的是为了更好理清弹性容器相关css属性
display:flex/inline-flex
flex-direction
flex-wrap
主轴居中:justify-content:center;
侧轴居中:align-item:center;
间隔均分:
align-items:
align-self
order
flex-basis
弹性项目的实际宽度(优先级):flex-basis>width>宽度由内容确定
弹性容器会按照每个弹性项目的flex-shrink(默认1)的值来确定每个弹性项目要减少的的宽度
display:flex/inline-flex
row:默认
row-reverse
column:垂直排列
column-reverse
nowrap:默认,不换行。
wrap:换行显示。
特点:设置换行之后,弹性项目的尺寸不会发生自适应变化
flex-start:默认。弹性项目跟主轴左部/顶部对齐
flex-end:弹性项目跟主轴右部/底部对齐
space-between:弹性项目之间的空间均匀分配
space-around:每个弹性项目两侧的距离是一样的
space-evenly:每个弹性项目之间的空隙完全一样,包含第一个和最后一个弹性项目
center:让弹性项目居中显示
stretch:当弹性项目没设置高度时,那么弹性项目的高度跟弹性容器一致(侧轴)
需要一个数字,默认为1
原理:弹性容器会将多余的富裕空间按照设置的弹性因子分成等量的几份分给弹性项目消化,弹性因子大的弹性项目得到的多余空间要多一些。
flex-basis:300px;
宽度优先级:flex-basis>width>宽度由内容确定
原理:当弹性容器宽度容不下当前该行的所有弹性项目,就会依照flex-shrink来收缩弹性项目已达到不换行的目的。flex-shrink会按照设定的值将需要收缩的宽度等量划分,减少弹性项目对应的尺寸。
order:数字;
数字默认为1
数字越大,显示的位置越靠后。数字越小,位置越靠前。不能为负
justify-content: 处理主轴上的富裕空间
align-items: 处理侧轴上的富裕空间
让弹性项目消化富裕空间,将富裕空间变成弹性项目的一部分。即弹性容器的尺寸变化会影响弹性项目的尺寸。
给子元素(弹性项目)设置flew-grow(俗称弹性因子)来瓜分富裕空间。
如果说弹性项目太小,我们可以给弹性项目设置min-width
概念:弹性布局兼容ie10+,ie9或8不支持,如果ie89想达到一样的效果,需使用响应式布局来实现。