简介
不管是在学习vue,还是在学习微信小程序的时候,我都接触到了flex布局。所以今天打算认真学一下。
Flex
flex
是css3的样式,意为“弹性布局”。通过display:block
使用。行内元素通过display:inline-block
使用。
使用了flex布局,子元素的float、clear和vertical-align属性将失效。
概念
为了方便学习,我们称采用了flex布局的父元素为容器。它的子元素称为项目。容器默认有两根轴,水平方向的称为主轴,垂直方向的称为交叉轴。
属性
容器属性
属于容器的属性有6个
1 | flex-direction //决定项目排列方向 |
flex-direction
flex-direction有4个值:
1 | .xxx{ |
1 | row //从左向右 |
flex-wrap
flex-wrap有3个值
1 | .xxx{ |
1 | nowrap //不换行 |
举个例子:
我的初始布局
当我还未添加flex-wrap属性时,再添加一个项目
可以看到项目不会自动换行,这也对应了第一个值nowrap
,就是说我们需要flex-wrap: nowrap
完全可以不用写。
wrap:
wrap-reverse:
flex-flow
flex-flow属性是flex-direction属性和flex-wrap属性的简写形式。
默认值row nowrap
。感觉有了这个上面两个有点多余。
例子:
1 | flex-flow: row wrap; |
justify-content
justify-content属性定义了项目在主轴上的对齐方式,它有5个值。
1 | .xxx{ |
1 | flex-start(默认值) //左对齐 |
flex-start:
flex-end:
center:
space-between:
space-around:
align-items
align-items属性定义项目在交叉轴上如何对齐,也有5个值。
1 | .xxx{ |
1 | flex-start //交叉轴的起点对齐。 |
flex-start:
flex-end:
center:
baseline:不试了,懒得写text
stretch:
align-content
align-content属性定义了多根轴线的对齐方式。如果项目只有一根轴线,该属性不起作用。
说实话,不是很理解。我觉得应该是主轴和交叉轴的综合,就像flex-flow,综合了flex-direction和flex-wrap。
1 | .xxx{ |
1 | flex-start //与交叉轴的起点对齐。 |
项目属性
属于项目的属性有6个
1 | order //排列顺序 |
order
order属性定义项目的排列顺序。数值越小,排列越靠前,默认为0。
1 | .xxxx{ |
flex-grow
flex-grow属性定义项目的放大比例,默认为0,即如果存在剩余空间,也不放大。
1 | .xxxx{ |
flex-shrink
flex-shrink属性定义了项目的缩小比例,默认为1,即如果空间不足,该项目将缩小。
1 | .xxxx{ |
flex-basis
flex-basis属性定义了在分配多余空间之前,项目占据的主轴空间(main size)。浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为auto,即项目的本来大小。
1 | .xxxx{ |
flex
flex属性是flex-grow, flex-shrink 和 flex-basis的简写,默认值为0 1 auto。后两个属性可选。
1 | .xxx{ |
align-self
align-self属性允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性。默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch
1 | .xxxx{ |
总结
项目的属性理解起来比容器难。