React Native - Flex布局讲解

React Native - Flex布局讲解_第1张图片
rn

RN的布局采用的是Flex,弹性盒模型。

有四个主要属性:flex、flexDirection、justifyContent、alignItems。
将对依次讲解。

目录

  1. flex的使用。
  2. flexDirection的取值和使用。
  3. justifyContent的取值和使用。
  4. alignItems的取值和使用。
  5. 他们的结合使用。

1. flex的使用

我们可以经常看到在代码中使用 flex:1 ,那么这是什么意思呢?
可以理解为比重

· 如果同级组件上只有一个,并且设置了 flex:1,那么这个组件相当于分配了全部空间。
· 如果同级组件上只有两个,并且这两个都设置了 flex:1,那么相当于这两个组件平均分配了全部空间。
· 如果同级组件上只有两个,并且第一个组件设置了 flex:1,第二个组件设置了 flex:2,那么相当于第一个组件占据全部空间的三分之一,第二个组件占据全部空间的三分之二。
· 如果没有设置 flex 属性,那么这个组件按需分配空间。

以此类推。

下面给出三个例子:

1.最外层同级只有一个组件,并且设置了flex:1,那么它(粉色)占据全部空间。

export default class demo extends Component {
  render() {
    return (
      
      
    );
  }
}
React Native - Flex布局讲解_第2张图片
flex-one

2.最外层同级只有一个组件,并且设置了flex:1,width设置了一个固定宽度,那么它(粉色)的高度占据全部空间。
(但如果height设置一个固定高度的话,则height失效不起效果,因为组件是竖向排列,此时flex的优先级大于height。)

export default class demo extends Component {
  render() {
    return (
      
      
    );
  }
}
React Native - Flex布局讲解_第3张图片
flex-second

3.最外层同级只有两个组件,并且width设置了一个固定宽度,第一个组件设置了flex:2,第二个组件设置了flex:1,那么
第一个组件(粉色)的高度占据全部空间三分之二。
第二个组件(蓝色)的高度占据全部空间三分之一。

export default class demo extends Component {
  render() {
    return (
      
        //第一个组件
        
        //第二个组件
        
      
    );
  }
}
React Native - Flex布局讲解_第4张图片
flex-third.png

2. flexDirection 的取值和使用

取值:
column 竖向排列
column-reverse 竖向、反向排列
row 横向排列
row-reverse 横向、反向排列
(不设置flexDirection时,默认是column)

当flexDirection = column

export default class demo extends Component {
  render() {
    return (
      
        
        
        
      
    );
  }
}
React Native - Flex布局讲解_第5张图片
flexDirection = column

当flexDirection = column-reverse

export default class demo extends Component {
  render() {
    return (
      
        
        
        
      
    );
  }
}
React Native - Flex布局讲解_第6张图片
flexDirection column-reverse

当flexDirection = row

export default class demo extends Component {
  render() {
    return (
      
        
        
        
      
    );
  }
}
React Native - Flex布局讲解_第7张图片
flexDirection = row

当flexDirection = row-reverse

export default class demo extends Component {
  render() {
    return (
      
        
        
        
      
    );
  }
}
React Native - Flex布局讲解_第8张图片
flexDirection row-reverse

3. justifyContent 的取值和使用

决定其子元素沿着主轴的排列方式

假如是垂直排列(由flexDirection决定),那么:

取值:
flex-start 集中在最上方
center 整体竖向居中
flex-end 集中在最下方
space-around 均匀分布
space-between 均匀铺满
(不设置justifyContent时,默认是flex-start)

注意外层容器要加上flex:1,让组件有足够的空间。

当justifyContent = flex-start

export default class demo extends Component {
  render() {
    return (
      
          
          
          
      
    );
  }
}
React Native - Flex布局讲解_第9张图片
justifyContent flex-start

当justifyContent = center

export default class demo extends Component {
  render() {
    return (
      
          
          
          
      
    );
  }
}
React Native - Flex布局讲解_第10张图片
justifyContent center

当justifyContent = flex-end

export default class demo extends Component {
  render() {
    return (
      
          
          
          
      
    );
  }
}
React Native - Flex布局讲解_第11张图片
justifyContent flex-end

当justifyContent = space-around

export default class demo extends Component {
  render() {
    return (
      
          
          
          
      
    );
  }
}
React Native - Flex布局讲解_第12张图片
justifyContent space-around

当justifyContent = space-between

export default class demo extends Component {
  render() {
    return (
      
          
          
          
      
    );
  }
}
React Native - Flex布局讲解_第13张图片
justifyContent space-between

4. alignItems的取值和使用

决定其子元素沿着次轴的排列方式,次轴与主轴垂直,意味着当flexDirection为column时,主轴是竖向,次轴是横向,flexDirection为row时,主轴是横向,次轴是竖向。

假如是竖向排列(由flexDirection决定),那么:

取值:

  1. flex-start 集中在最左边
  2. center 整体横向居中
  3. flex-end 集中在最右边
  4. stretch 水平撑满,子组件不能设置固定的width。
    (不设置alignItems时,默认是flex-start)

注意外层容器要加上flex:1,让组件有足够的空间。

当alignItems = flex-start

export default class demo extends Component {
  render() {
    return (
      
          
          
          
      
    );
  }
}
React Native - Flex布局讲解_第14张图片
alignItems flex-start

当alignItems = center

export default class demo extends Component {
  render() {
    return (
      
          
          
          
      
    );
  }
}
React Native - Flex布局讲解_第15张图片
alignItems center

当alignItems = flex-end

export default class demo extends Component {
  render() {
    return (
      
          
          
          
      
    );
  }
}
React Native - Flex布局讲解_第16张图片
alignItems flex-end

当alignItems = stretch

export default class demo extends Component {
  render() {
    return (
      
          
          
          
      
    );
  }
}
React Native - Flex布局讲解_第17张图片
alignItems stretch

5. 他们的结合使用。

看过上面的讲解后,其实知道单个是什么效果,两个属性一起用也就不难理解了。

下面给出一个。
flex 设置为 1 让组件拥有全个屏幕的空间(粉色区域)
flexDirection 设置为 row-reverse 组件横向、反向排列
justifyContent 设置为 space-around 均匀分布
alignItems 设置为 center 水平居中

这样的话,效果就是。

export default class demo extends Component {
  render() {
    return (
      
          
          
          
      
    );
  }
}
React Native - Flex布局讲解_第18张图片
flex show

以上,完毕。

你可能感兴趣的:(React Native - Flex布局讲解)