React-Native开发从入门到实战项目总结React-Native 开发阵营React Native开发

FlexBox布局在RN中的基本用法

2018-01-20  本文已影响357人  光强_上海

FlexBox 布局基本用法

1、什么是FlexBox

Flexbox是Flexible Box的缩写,意为'弹性布局',它为盒状模型提供了很大的灵活性,让任何一个容器都可以指定为Flex布局

任何一个容器都可以指定为Flex布局

2、基本概念和属性

使用Flex布局的元素,称为Flex容器(flex Container),简称'容器'。它的所有子元素自动成为容器的成员,称为Flex项目(flex Item)

下面主要讲解Flex的Container 属性 和 Item 属性

下面给出一张FlexBox布局的示例图:

img

从上面的示例图中可以看出,Flex容器默认存在两根轴:水平方向的主轴(main axis),与主轴垂直方向的交叉轴(cross axis)。主轴的排布方向是从左至右,交叉轴的排布方向是从上至下,Flex容器中的Item元素默认是按照主轴方向进行排序,Item占据主轴空间称为main size,Item占据交叉轴空间称为cross size

注意:

本篇FlexBox基本使用教程主要是针对web端布局进行讲解的,React Native开发中使用的FlexBox布局和web端用法基本上一致,但是还是有些差异性,主要差异大致分为如下几点,后面的属性讲解中对于React Nativeweb端的差异,主要的差异会通过小括号单独的注释说明

3、Flex容器(Container)属性

容器属性主要有下列6个:

下面我们分别来讲解这6个容器属性的使用方式和作用

3.1 flex-direction

flex-direction作用:用来决定容器的主轴方向

.box {
  flex-direction: row | row-reverse | column | column-reverse;
}
img

flex-direction属性有四个取值:

注意:React Native中,当没有设置容器的主轴方向时,默认容器主轴方向为:flex-direction: column,也就是说,当我们的容器的主轴的排布方向为竖直方向时,这时我们可以省略不写flex-direction属性

3.2 flex-wrap

默认情况下,容器中的Item元素都排列在一条轴线上,flex-wrap属性定义了如果在一条轴线上排列不下所有的Item元素,可以进行换行排列

img
.box{
  flex-wrap: nowrap | wrap | wrap-reverse;
}

flex-wrap 属性有三个取值:

img img img

3.3 flex-flow

flex-flow属性是flex-direction属性和flex-wrap属性的简写形式,默认值为row nowrap

.box {
  flex-flow: <flex-direction> || <flex-wrap>;
}

3.4 justify-content

justify-content属性定义了Item在主轴方向上的对齐方式

.box {
  justify-content: flex-start | flex-end | center | space-between | space-around;
}
img

justify-content属性有5个取值,具体对齐方式与轴的方向有关。下面假设主轴方向为从左到右

3.5 align-items

align-items属性定义Item在交叉轴上的对齐方式

.box {
  align-items: flex-start | flex-end | center | baseline | stretch;
}
img

align-items属性有5个取值,具体的对齐方式与交叉轴的方向有关,下面假设交叉轴方向从上到下

3.6 align-content

align-content属性定义了多根轴线的对齐方式,如果项目只有一根轴线,该属性不起作用

.box {
  align-content: flex-start | flex-end | center | space-between | space-around | stretch;
}
img

align-content属性有6个取值

4、项目(Item)属性

Flex容器中的Item元素有以下6个属性

4.1 order

order属性定义了Item的排列顺序,数值越小,排列越靠前,默认为0

.item {
  order: <integer>;
}
img

4.2 flex-grow

flex-grow属性定义了Item的放大比例,默认为0,即如果存在剩余空间,也不放大

.item {
  flex-grow: <number>; /* default 0 */
}
img

如果所有Item的flex-grow属性都为1,则它们将等分剩余空间(如果有的话),如果一个Item的flex-grow属性为2,其他Item都为1,则前者占据的剩余空间将比其他Item多一倍

4.3 flex-shrink

flex-shrink属性定义了Item的缩小比例,默认为1,即如果空间不足,该Item将缩小

.item {
  flex-shrink: <number>; /* default 1 */
}
img

如果所有Item的flex-shrink属性都为1,当空间不足时,都将等比例缩小,如果一个Item的flex-shrink属性为0,其他Item都为1,则空间不足时,前者不缩小。负值对该属性无效

4.4 flex-basis

flex-basis属性定义了在分配多余空间之前,Item占据的主轴空间(main size),浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为auto,即Item的本来大小

.item {
  flex-basis: <length> | auto; /* default auto */
}

它可以设为跟width或height属性一样的值(比如350px),则Item将占据固定空间

4.5 flex

flex属性是flex-growflex-shrinkflex-basis的简写,默认值为0 1 auto。后两个属性可选

.item {
  flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]
}

该属性有两个快捷值:auto (1 1 auto) 和 none (0 0 auto)

建议优先使用这个属性,而不是单独写三个分离的属性,因为浏览器会推算相关值

4. 6 align-self

align-self属性允许单个Item有与其他Item不一样的对齐方式,可覆盖align-items的属性。默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch

.item {
  align-self: auto | flex-start | flex-end | center | baseline | stretch;
}
img

align-self属性有6个取值,除了增加一个auto属性,其他都与align-items属性完全一致,具体的对齐方式与交叉轴的方向有关,下面假设交叉轴方向从上到下

FlexBox布局在React Native开发中的使用

在React Native开发中最多用到的FlexBox布局中的属性如下:

福利时间

上一篇下一篇

猜你喜欢

热点阅读