一、什么是Flexbox?
弹性盒模型(The Flexible Box Module),又叫Flexbox,意为“弹性布局”,旨在通过弹性的方式来对齐和分布容器中内容的空间,使其能适应不同的屏幕,为盒装模型提供最大的灵活性。
Flex布局的主要思想是:让容器有能力让其子项目能够改变其宽度、高度(甚至是顺序),以最佳方式填充可用空间。
二、Flex布局基于flex-flow流
容器默认存在两根轴:水平的主轴(main axis)和垂直的交叉轴(cross axis)。主轴的开始位置(与边框的交叉点)叫做main start,结束位置叫做main end;交叉轴的开始位置叫做cross start,结束位置叫做cross end。
项目默认沿主轴排列,单个项目占据的主轴空间叫做main size,占据的交叉轴空间叫做cross size。
根据伸缩项目排列方式的不同,主轴和侧轴方向也有所变化:
三、Flex常用属性
1.容器属性
react-native中容器属性有四种,分别是:flexDirction、flexWrap、justifyContent、alignItems。
1.1 flexDirection属性
该属性决定主轴的方向(即项目的排列方向)。
row:主轴为水平方向,起点在左端。
row-reverse:主轴为水平方向,起点在右端。
column(默认值 ):主轴为垂直方向,起点在上沿。
column-reverse:主轴为垂直方向,起点在下沿。
1.2 flexWrap属性
默认情况下,项目都排在一条线上(又称“轴线”)上。flex-wrap属性定义,如果一条轴线排不下,如何换行。
nowrap(默认值 ):不换行
wrap:换行,第一行在上方
wrap-reverse:换行,第一行在下方(和wrap 相反,仅在网页端可用)
1.3 justifyContent 属性
该属性定义了伸缩项目在主轴线的对齐方式
flex-start(默认值 ):伸缩项目向一行的起始位置靠齐。
flex-end:伸缩项目向一行的结束位置靠齐。
center:伸缩项目向一行的中间位置靠齐。
space-between:两端对齐,项目之间的间隔都相等。
space-around:伸缩项目会平均地分布在行里,两端保留一半的空间。
1.4 alignItems属性
定义伸缩项目在交叉轴上如何对齐,可以把其想像成侧轴(垂直于主轴)的 “对齐方式”。
flex-start :交叉轴的起点对齐。
flex-end:交叉轴的终点对齐 。
center:交叉轴的中点对齐。
baseline:项目的第一行文字的基线对齐。(仅在web端可用,react-native不可用)
stretch(默认值):如果项目未设置高度或设为 auto,将占满整个容器的高度。
2.元素属性
2.1 flex属性
通过添加flex属性, 我们明确地将他选为flexbox模式。flex只能指定一个数字值,用来决定子元素间获得相对权重的大小,都设为1则获得相等的权重大小,分别设为1、3、1则获得的权重比为1:3:1。
2.2 alignSelf属性
“auto | flex-start | flex-end | center | baseline | stretch”
align-self属性允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性。
默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch。