美文网首页React Native
React-Native之Flex布局

React-Native之Flex布局

作者: Coder_Answer | 来源:发表于2017-11-01 16:14 被阅读0次
  • 在React-Native中使用flexbox规则来指定某个组件的子元素的布局。Flexbox可以在不同屏幕尺寸上提供一致的布局结构。一般来说,使用flexDirectionalignItemsjustifyContent三个样式属性就已经能够满足大多数布局需求。
  • React-Native中的Flexbox的工作原理和web上的CSS基本一致,但是也有一些差异: flexDirection的默认值是column,而不是rowflex也只能指定一个数字值。
1. Flex Direction
  • 在这里需要引入一个主轴的概念,我们可以理解为子组件排列的方向。
    row                // 主轴为水平方向,从左向右
    row-reverse        // 主轴为水平方向,从右向左
    column             // 主轴为竖直方向,从上到下,默认值
    column-reverse     // 主轴为竖直方向,从下到上
    
    export default class Layout_Flex extends Component {
      render() {
        return (
          <View style={{flex: 1, backgroundColor: 'white'}}>
            // flexDirection: 'row',  水平排列
            <View style={{flex:1, flexDirection: 'row', backgroundColor: '#d400ff', paddingTop: 20}}>
              <View style={{width: 100, height: 100, backgroundColor: 'powderblue'}}> </View>
              <View style={{width: 100, height: 100, backgroundColor: 'skyblue'}}> </View>
              <View style={{width: 100, height: 100, backgroundColor: 'steelblue'}}> </View>
            </View>
    
            // flexDirection: 'column',  竖直排列
            <View style={{flex:1, flexDirection: 'column', backgroundColor: '#ffc700', paddingTop: 20}}>
              <View style={{width: 100, height: 100, backgroundColor: 'powderblue'}}> </View>
              <View style={{width: 100, height: 100, backgroundColor: 'skyblue'}}> </View> <View style={{width: 100, height: 100, backgroundColor: 'steelblue'}}> </View>
            </View>
          </View>
        );
      }
    }
    
flexDirection.png
2. Justify Content
  • 决定子组件沿着主轴的排列方式,有以下可选项:
    flex-start      //沿主轴方向,从始端向末端排列
    center:        //沿主轴方向,从中心位置向两头排列
    flex-end:      //沿主轴方向,从末端向始端排列
    space-around:   //沿主轴方向,等间距排列,首末子组件与父组件相距1/2个间距
    space-between:  //沿主轴方向,等间距排列,首末子组件与父组件相距0
    
    export default class Layout_Flex extends Component {
     render() {
      return (
        <View style={{flex: 1, backgroundColor: 'white', marginTop: 20}}>
          <View style={{flexDirection: 'column', justifyContent: 'flex-start', backgroundColor: '#ffc700', height: 100}}>
            <View style={{width: 20, height: 20, backgroundColor: 'powderblue'}}></View>
            <View style={{width: 20, height: 20, backgroundColor: 'skyblue'}}></View>
            <View style={{width: 20, height: 20, backgroundColor: 'steelblue'}}></View>
          </View>
          <View style={{flexDirection: 'column', justifyContent: 'center', backgroundColor : '#ff7a00', height: 100}}>
            <View style={{width: 20, height: 20, backgroundColor: 'powderblue'}}></View>
            <View style={{width: 20, height: 20, backgroundColor: 'skyblue'}}></View>
            <View style={{width: 20, height: 20, backgroundColor: 'steelblue'}}></View>
          </View>
          <View style={{flexDirection: 'column', justifyContent: 'flex-end', backgroundColor : '#c4ff00', height: 100}}>
            <View style={{width: 20, height: 20, backgroundColor: 'powderblue'}}></View>
            <View style={{width: 20, height: 20, backgroundColor: 'skyblue'}}></View>
            <View style={{width: 20, height: 20, backgroundColor: 'steelblue'}}></View>
          </View>
          <View style={{flexDirection: 'column', justifyContent: 'space-around', backgroundColor : '#00ffd9', height: 100}}>
            <View style={{width: 20, height: 20, backgroundColor: 'powderblue'}}></View>
            <View style={{width: 20, height: 20, backgroundColor: 'skyblue'}}></View>
            <View style={{width: 20, height: 20, backgroundColor: 'steelblue'}}></View>
          </View>
          <View style={{flexDirection: 'column', justifyContent: 'space-between', backgroundColor : '#008cff', height: 100}}>
            <View style={{width: 20, height: 20, backgroundColor: 'powderblue'}}></View>
            <View style={{width: 20, height: 20, backgroundColor: 'skyblue'}}></View>
            <View style={{width: 20, height: 20, backgroundColor: 'steelblue'}}></View>
          </View>
        </View>
      );
     }
    }
    
  • 主轴方向为竖直方向
justifyContent_column.png
  • 主轴方向为水平方向
justifyContent_row.png
Align Items
  • 决定子组件沿着次轴(与主轴垂直的轴)的排列方式。
    flex-start    // 沿次轴方向,从始端向末端排列
    center        // 沿次轴方向,重中心位置向两头排列
    flex-end      // 沿伺候方向,从末端向始端排列
    stretch       // 沿次轴反向,拉伸到与父组件相同高度或宽度
    
  • 设置stretch时,子组件在次轴方向上不能有固定尺寸。即主轴为竖直方向时,不能设置子组件的width;主轴为水平方向时,不能设置子组件的height。否则不会生效
    export default class Layout_Flex extends Component {
     render() {
      return (
        <View style={{flex: 1, backgroundColor: 'white', marginTop: 20}}>
          <View style={{flexDirection: 'column', alignItems: 'flex-start', backgroundColor: '#ffc700', height: 100}}>
            <View style={{width: 20, height: 20, backgroundColor: 'powderblue'}}></View>
            <View style={{width: 20, height: 20, backgroundColor: 'skyblue'}}></View>
            <View style={{width: 20, height: 20, backgroundColor: 'steelblue'}}></View>
          </View>
          <View style={{flexDirection: 'column', alignItems: 'center', backgroundColor : '#ff7a00', height: 100}}>
            <View style={{width: 20, height: 20, backgroundColor: 'powderblue'}}></View>
            <View style={{width: 20, height: 20, backgroundColor: 'skyblue'}}></View>
            <View style={{width: 20, height: 20, backgroundColor: 'steelblue'}}></View>
          </View>
          <View style={{flexDirection: 'column', alignItems: 'flex-end', backgroundColor : '#c4ff00', height: 100}}>
            <View style={{width: 20, height: 20, backgroundColor: 'powderblue'}}></View>
            <View style={{width: 20, height: 20, backgroundColor: 'skyblue'}}></View>
            <View style={{width: 20, height: 20, backgroundColor: 'steelblue'}}></View>
          </View>
          <View style={{flexDirection: 'column', alignItems: 'stretch', backgroundColor : '#00ffd9', height: 100}}>
            <View style={{height: 20, backgroundColor: 'powderblue'}}></View>
            <View style={{height: 20, backgroundColor: 'skyblue'}}></View>
            <View style={{height: 20, backgroundColor: 'steelblue'}}></View>
          </View>
        </View>
      );
     }
    }
    
  • 主轴为竖直方向
alignItems_column.png
  • 主轴为水平方向
alignItems_row.png
4.Flex Wrap
  • 决定子组件在父组件内是否允许多行排列
    nowrap     // 子组件只允许排列在一行上,可能会溢出
    wrap        // 子组件在一行排列溢出时,就多行排列
    
    export default class Layout_Flex extends Component {
     render() {
      return (
        <View style={{flex: 1, backgroundColor: 'white', marginTop: 20}}>
          <View style={{flexDirection: 'row', flexWrap: 'nowrap', backgroundColor: '#ffc700', height: 200}}>
            <View style={{width: 100, height: 50, backgroundColor: 'powderblue', margin: 30}}></View>
            <View style={{width: 100, height: 50, backgroundColor: 'skyblue', margin: 30}}></View>
            <View style={{width: 100, height: 50, backgroundColor: 'steelblue', margin: 30}}></View>
          </View>
          <View style={{flexDirection: 'row', flexWrap: 'wrap', backgroundColor : '#ff7a00', height: 200}}>
            <View style={{width: 100, height: 50, backgroundColor: 'powderblue', margin: 30}}></View>
            <View style={{width: 100, height: 50, backgroundColor: 'skyblue', margin: 30}}></View>
            <View style={{width: 100, height: 50, backgroundColor: 'steelblue', margin: 30}}></View>
          </View>
        </View>
      );
     }
    }
    
flexWrap.png

相关文章

  • 03-Flexible Box

    概念 React-Native 中所有的布局均采用 Flex 布局。采用 Flex 布局的元素,称为 Flex 容...

  • react-native 样式总结

    布局 React-Native的布局是完全是用flex来实现。 flex的用法就不多说了,具体可参考阮一峰老师的这...

  • [React Native 入门]

    react-native code之路 使用Flexbox布局 容器的属性 1、Flex Direction 在组...

  • React-Native中的Flexbox布局简述

    本文只是简单地介绍下在React-Native中,使用CSS的Flex布局方式,完成RN中的控件布局,掌握这个布局...

  • ReactNative flex 布局

    react-native 就下面四种 flex 属性控制布局 GitHub: https://github.com...

  • ReactNative UI布局之flex

    ReactNative UI布局之flex flexDirection:决定flex的布局方向 justifyCo...

  • 网络编程(八)移动端布局(2)

    今天主要介绍一下移动端布局之flex布局。 一、 flex 布局体验 1.1 传统布局与flex布局的 1.2 初...

  • React-Native之Flex布局

    在React-Native中使用flexbox规则来指定某个组件的子元素的布局。Flexbox可以在不同屏幕尺寸上...

  • React-Native之Flex布局

    Flex是Flexible Box的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性。Flex布局主要思想是...

  • react-native 布局篇

    react-native 布局篇之单位换算(px转dp) react-native 布局篇之flexbox rea...

网友评论

    本文标题:React-Native之Flex布局

    本文链接:https://www.haomeiwen.com/subject/taewpxtx.html