flex学习笔记
认识flex
flex布局现在已经是最常见的布局方式,最近碰到一些类似flex:0 1 auto的代码,决定升入学习一下
felx
flex布局的属性,一般分为两大类:容器的属性,项目的属性
容器的属性
- flex-direction
- flex-wrap
- flex-flow
- justify-content
- align-items
- align-content
flex-direction
是决定主轴的方向,它有四个值对应四个方向,row是默认值,使主轴是水平的,而且是自西向东的,而row-reverse刚好相反,它设定的主轴是自东向西,column是从北到南,column-reverse是从南到北
flex-wrap
是否换行
有三个值nowrap是默认值,不换行,wrap换行第一行在上面,wrap-reverse换行,第一行在下面
flex-flow
注意:
flex-flow其实就是flex-direction和flex-wrap的简写形式,默认值为:row nowrap
justify-content
定义了主轴上的对齐方式,有五个值
- flex-start 是左对齐
- flex-end 右对齐
- space-between是两端对齐,项目之间的间隔都相等
- space-around 每个项目两边的距离是相等的,所以项目之间的距离是项目和边框距离的两倍。
align-items
定义项目在交叉轴上如何对齐的,有五个值
- flex-start 是交叉轴的起点对齐
- flex-end 交叉轴的终点对齐
- center 交叉轴中点对齐
- baseline 项目的第一行文字的基线对齐
- stretch 如果项目未设置高度,或者设置的为auto,将填满整个容器的高度
align-content
定义了多根轴线的对齐方式
- flex-start 与交叉轴的起点对齐
- flex-end 与交叉轴的终点对齐
- center 与交叉轴的中点对齐
- space-btween 与交叉轴的两端对齐,轴线之间的间隔平均分配
- space-around 每根轴线两边的间隔都是相等的,所以轴线之间的间隔是轴线和边框的间隔的两倍
stretch 轴线占满整个交叉轴
项目的属性
- order
- flex-grow
- flex-shrink
- flex-basis
- flex
- align-self
order
定义项目排列顺序 数值越小,排列越靠前 默认为零
flex-gorw
定义项目的放大比例,默认值为0,即就算存在剩余空间也不放大,如果所有项目数值为1的话就是所有项目等分剩余空间,如果有一个项目的flex-grow属性为2,其余项目都为1时,则前者占据的剩余空间是后者的两倍。
flex-shrink
定义了项目的缩小比例,默认值为1,即如果空间不足的话,所有项目等比例缩小,如果有一个项目的flex-shrink的属性为0,其他项目的为1,则空间不足时,前者不缩小,后者等比例缩小。
flex-basis
定义了在分配多余空间之前,项目占据的主轴空间(main size),浏览器根据这个属性计算出主轴是否有剩余空间,它的默认值为auto即项目本身的大小,它可以设为跟width或height属性一样的值(比如350px),则项目将占据固定空间。
注意:
flex属性是flex-grow,flex-shrink和flex-basis的简写,默认值为0 1 auto,该属性有两个快捷值auto(1 1 auto)和none(0 0 auto)
align-self
允许单个项目与其他项目不一样的对齐方式,可覆盖align-items的属性,默认值为auto,表示继承父元素的属性,如果没有父元素,则等同于stretch,该属性可能取6个值,除了auto,其他都与align-items属性完全一致。
完全指南:https://css-tricks.com/snippets/css/a-guide-to-flexbox/#examples