[React Native]弹性布局Flexbox

作者: zhuhf | 来源:发表于2016-06-20 21:51 被阅读1711次

1. 什么是Flexbox?
简单来说Flexbox是属于web前端领域CSS的一种布局方案,是2009年W3C提出了一种新的布局方案,可以简便、完整、响应式地实现各种页面布局。你可以简单的理解为Flexbox是CSS领域类似Android中 LinearLayout的一种布局,但是要比 LinearLayout要强大的多。

2. ReactNative中的Flexbox
总所周知,移动端在使用和操作习惯与PC端有着截然的不同,这就注定了它和WEB端在布局方式以及复杂度方面有着巨大的差别。所以在ReactNative中,官方对Flexbox做了一些阉割,以用来适应移动端的布局方式。

关于完整的Flexbox布局教程,可以参考阮一峰的Flex 布局教程:语法篇

3. ReactNative中Flexbox常用的几个属性

  • 容器属性
    flexDirection、justifyContent、alignItems、flexWrap
  • 元素属性
    alignSelf、flex、position

本文只介绍重点的几个属性,其他类似marginLeft、padding等,无论你之前是做网页开发,还是做原生开发,应该都非常熟悉,所以这里不做过多说明,大家稍微尝试看一下效果就知道了。另外,更多属性支持请查看官方文档

在我们介绍这些属性之前,有一个概念,需要跟大家讲解下,那就是主轴交叉轴。上面的多数属性和这个概念有直接关系,起初学习Flexbox可能比较困惑,有可能就是没理解清楚这个概念。

主轴交叉轴是由flexDirection这个属性来决定的,让我们首先来看下flexDirection

  • flexDirection:这个属性决定了子View排列的方向,类似Android中LinearLayout的orientation属性,它有两个值:
    row:横向排列,主轴为水平方向,交叉轴为垂直方向;
    column:竖直排列,主轴为垂直方向,交叉轴为水平方向。
    其中,默认值是column
flexDirection.png
  • justifyContent:设置子布局在主轴方向位置
justifyContent.png
  • alignItems:设置子布局在交叉轴方向位置
alignItems.png
  • flexWrap:水平或垂直布局时:如果子View放不下,则自动换行, 默认为'nowrap'(不换行)
flexWrap.png
  • alignSelf:设置子布局在交叉轴方向位置
alignSelf.png
  • flex:权重,类似Android中weight
flex.png
  • position:定位模式,分为absolute和relative两种
    absolute:绝对定位,相对于原点(左上角)

    <Text style={{
      fontSize: 20,
      textAlign: 'center',
      backgroundColor: '#0000FF',
      color: '#FFFFFF',
      position: 'absolute',
      left: 100,
      top: 100
      }}>
      B
    </Text>
    
absolute.png
relative:相对定位,相对于当前位置
  <Text style={{
    fontSize: 20,
    textAlign: 'center',
    backgroundColor: '#0000FF',
    color: '#FFFFFF',
    position: 'relative',
    left: 100,
    top: 100
    }}>
    B
  </Text>
relative.png

相关文章

网友评论

    本文标题:[React Native]弹性布局Flexbox

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