React Native 弹性布局FlexBox

React Native采用一中全新的布局方式:FlexBox(弹性布局)。可以很方便的实现各种复杂布局,是全新的针对web和移动开发布局的一种实现方式。

何为FlexBox?

完整名称为:the flexible box Module,旨在通过弹性的方式来对齐和分布容器中的组件。Flexbuju的主要思想是:让容器有能力让其子项目能够改变其宽度|高度|顺序,以最佳方式填充可用空间。

在布局中,首先得确定主轴方向(flexDirection),主轴组件的对齐方式(justifyContent),侧轴组件的对齐方式(alignItems),通过以上四点可以基本确定布局。

FlexBox属性:

flexDirection:该属性确定了主轴方向,枚举值。

    row         主轴方向为水平,起点在左端。

    row- reverse      主轴方向为水平,起点在右端

    column    主轴方向为垂直,起点在上端

    column-reverse        主轴方向为垂直,起点在下端

justlfyContent:该属性确定了组件在主轴方向上的对齐方式,枚举值。

    flex-start(默认)   组件沿着主轴方向的起始位置靠齐。如:假如主轴方向是row的话就是左对齐,是row- reverse的话就是右对齐,是column的话就是上对齐,是 column-reverse的话就是下对齐。

    fle-end            组件沿着主轴方向的结束位置靠齐,和flex-start相反。

    space-betweem  组件在主轴方向上两端对齐,其中的间隔相等。

    space-around   组件会平均分配在主轴方向上,两端保留一定的位置空间。

alignsItems:组件在侧轴方向上的对齐方式。

    flex-start         组件沿着侧轴上的起点对齐

    flex-end          组件沿着侧轴上的终点对齐

    center      组价在侧轴方向上居中对齐

    stretch(默认)  组件在侧轴方向上占满

flexWrap: 是否换行

默认情况下,项目都排列在一条线上,放不下的部分则不放置,flexWap就是定义是否换行的。

    nowrap(默认)   不换行

    wrap            换行,第一行在上方

    wrap-reverse    换行,第一行在下方

flex:有三个参数,默认参数为 0 1 auto。  第一个参数为flex-grow,第二,第三个为:flex-shrink和flex-basis。

alignSelf:定义单个组件自己的对齐方式,默认为auto。枚举值:auto|flex-start|flex-end|center|baseline|stretch

position:枚举值,absolute绝对定位,relative相对定位

margin:内边距

padding:外边距

/**
 * Sample React Native App
 * https://github.com/facebook/react-native
 * 周少停 2016-09-12
 * 弹性布局 flex-box
 */

import React, { Component } from ‘react‘;
import {
  AppRegistry,
  StyleSheet,
  Text,
  View
} from ‘react-native‘
/**-----------------------------------第一个示例程序----------------------------------------------------- **/
class Project extends Component {
  render() { //初始化
    return (
      <View style={styles.container}>
        <Text style={{backgroundColor:‘red‘,height:50}}>第一个</Text>
        <Text style={{backgroundColor:‘blue‘,height:100}}>第二个</Text>
        <Text style={{backgroundColor:‘green‘,height:160}}>第三个</Text>
        <Text style={{backgroundColor:‘yellow‘,height:200}}>第四个</Text>
      </View>
    );
  }
}
//样式
const styles = StyleSheet.create({
  container: {
//     flex:1,  //充满全屏,否则内容多少,只显示多少区域.   是‘flex-grow‘‘flex-shrink‘‘flex-basis‘三个属性的缩写,其中第二个和第三个参数都是可选,默认值是"0 1 auto" 宽度 = 弹性宽度 * (flexGrow/sum(flexGrow))
//     width:200,
    height:200,
    marginTop:20,//上边距
    backgroundColor:‘black‘,//背景色
    flexDirection:‘row‘, //React Native 布局采用FlexBox(弹性布局),该属性是设置布局的主轴方向为row:横向(默认方向是竖向:column)
    justifyContent:‘space-between‘, //定义了伸缩项目在主轴线的对齐方式 flex-start | flex-end | center | space-between | space-around
    alignItems:‘flex-start‘    //定义了伸缩项目在侧轴(交叉轴)的对齐方式 flex-start | flex-end | center | baseline | stretch(默认)
  }
});

/**-----------------------------------第二个示例程序----------------------------------------------------- **/
class Project1 extends Component {
  render() { //初始化
    return (
      <View style={styles1.container}>
        <Text style={{backgroundColor:‘red‘,width:200}}>第一个</Text>
        <Text style={{backgroundColor:‘blue‘,width:300}}>第二个</Text>
        <Text style={{backgroundColor:‘green‘,width:200}}>第三个</Text>
        <Text style={{backgroundColor:‘yellow‘,width:200}}>第四个</Text>
      </View>
    );
  }
}
const styles1 = StyleSheet.create({
   container:{
      backgroundColor:‘black‘,
      marginTop:20,
      flexDirection:‘row‘,
      justifyContent:‘flex-start‘,
      flexWrap:‘wrap‘ //定义显示不下的显示模式,默认情况下,控件都是在一条线上   wrap换行 nowarp(默认值)不换行 warp-reverse:换行,效果和wrap相反
   }
});
/**-----------------------------------第三个示例程序----------------------------------------------------- **/
 //alignSelf允许单个项目可以有自己单独的对齐方式
class Project2 extends Component{
  render(){
    return(
      <View style={styles2.container}>
        <Text style={{backgroundColor:‘red‘,flex:1,height:50,alignSelf:‘center‘}}>第一个</Text>
        <Text style={{backgroundColor:‘blue‘,flex:2,height:30,alignSelf:‘flex-start‘}}>第二个</Text>
        <Text style={{backgroundColor:‘green‘,flex:2,height:70,alignSelf:‘flex-end‘}}>第三个</Text>
        <Text style={{backgroundColor:‘yellow‘,flex:1,height:80,alignSelf:‘stretch‘}}>第四个</Text>
      </View>
    );
  }
}
const styles2 = StyleSheet.create({
   container:{
     backgroundColor:‘black‘,
     marginTop:20,
     flexDirection:‘row‘
   }
});

AppRegistry.registerComponent(‘Project‘, () => Project2);  //注册

  完整源码下载:https://github.com/pheromone/React-Native-1

时间: 2024-12-20 21:01:43

React Native 弹性布局FlexBox的相关文章

3、手把手教React Native实战之flexbox布局

flexbox是Flexible Box的缩写,弹性盒子布局  主流的浏览器都支持 flexbox布局是伸缩容器(container)和伸缩项目(item)组成 Flexbox布局的主体思想是元素可以改变大小以适应可用空间,当可用空间变大,Flex元素将伸展大小以填充可用空间,当Flex元素超出可用空间时将自动缩小.总之,Flex元素是可以让你的布局根据浏览器的大小变化进行自动伸缩. 按照伸缩流的方向布局 伸缩容器有主轴和交叉轴组成! 主轴既可以是水平轴,也可以是垂直轴 flexbox目前还处于

4、手把手教React Native实战之flexbox布局(伸缩属性)

###伸缩项目的属性 1.order 定义项目的排列顺序,数值越小,排列越靠前,默认值为0,语法为:order:整数值 2.flex-grow 定义伸缩项目的放大比例,默认值为0,即表示如果存在剩余空间,也不放大,语法为:flex-grow:整数值 3.flex-shrink 定义伸缩项目的收缩能力,默认值为1 ,其语法为:flex-shrink:整数值 4.flex-basis 用来设置伸缩项目的基准值,剩余的空间按比率进行伸缩,其语法为:flex-basis:length | auto,默认

React Native开发之FlexBox代码+图解

来自Leo的原创博客,转载请著名出处 我的stackoverflow 前言 FlexBox布局是React Native的布局核心,鉴于自己对FlexBox还有很多概念不太清楚,这篇文章就当成是总结,并且分享出来给大家. FlexBox布局能够帮助你更好的帮助你控制控件的大小和位置,Flexbox非常适合Mobile端的适配,我想这也是FaceBook为什么选择FlexBox作为React Native布局的原因吧. 本文参考文章如下 A Complete Guide to Flexbox re

3、手把手教React Native实战之flexbox布局(RN基础)

flexbox是Flexible Box的缩写,弹性盒子布局  主流的浏览器都支持 flexbox布局是伸缩容器(container)和伸缩项目(item)组成 Flexbox布局的主体思想是元素可以改变大小以适应可用空间,当可用空间变大,Flex元素将伸展大小以填充可用空间,当Flex元素超出可用空间时将自动缩小.总之,Flex元素是可以让你的布局根据浏览器的大小变化进行自动伸缩. 按照伸缩流的方向布局 伸缩容器有主轴和交叉轴组成! 主轴既可以是水平轴,也可以是垂直轴 flexbox目前还处于

React Native入门 认识Flexbox布局

Flexbox布局是由W3C在09年提出的在Web端取代CSS盒子模型的一种布局方式. ReactNative实现了Flexbox布局的大部分功能. Flexbox布局所使用的属性,基本可以分为两大类: 决定子组件排列规则的属性,例如:flexDirection , flexWrap, justifyContent, alignItems等. 决定自身的显示规则的属性,例如:alignSelf, flex等 [1] flexDirection 设置子组件的排列顺序,默认column(纵向排列),

React Native基础&amp;入门教程:初步使用Flexbox布局

在上篇中,笔者分享了部分安装并调试React Native应用过程里的一点经验,如果还没有看过的同学请点击<React Native基础&入门教程:调试React Native应用的一小步>. 在本篇里,让我们一起来了解一下,什么是Flexbox布局,以及如何使用. 一.长度的单位 在开始任何布局之前,让我们来首先需要知道,在写React Native组件样式时,长度的不带单位的,它表示“与设备像素密度无关的逻辑像素点”. 这个怎么理解呢? 我们知道,屏幕上一个发光的最小点,对应着一个

React Native布局

一款好的APP离不了一个漂亮的布局,本文章将向大家分享React Native中的布局方式FlexBox. 在React Native中布局采用的是FleBox(弹性框)进行布局. FlexBox提供了在不同尺寸设备上都能保持一致的布局方式.FlexBox是CSS3弹性框布局规范,目前还处于最终征求意见稿 (Last Call Working Draft)阶段,并不是所有的浏览器都支持Flexbox.但大家在做React Native开发时大可不必担心FlexBox的兼容性问题,因为既然Reac

React Native之FlexBox介绍与使用

前言 学习本系列内容需要具备一定 HTML 开发基础,没有基础的朋友可以先转至 HTML快速入门(一) 学习 本人接触 React Native 时间并不是特别长,所以对其中的内容和性质了解可能会有所偏差,在学习中如果有错会及时修改内容,也欢迎万能的朋友们批评指出,谢谢 文章第一版出自简书,如果出现图片或页面显示问题,烦请转至 简书 查看 也希望喜欢的朋友可以点赞,谢谢 什么是 FlexBox 布局 在 html 中,界面的搭建都是采用 CSS 的布局方式,CSS 是基于盒子模型,依赖于 dis

从web移动端布局到react native布局

在web移动端通常会有这样的需求,实现上中下三栏布局(上下导航栏位置固定,中间部分内容超出可滚动),如下图所示: 实现方法如下: HTML结构: <div class='container'> <div class='header'></div> <div class='content'></div> <div class='footer'></div> </div> 首先可以利用fixed或者absolute