设为首页 加入收藏

TOP

React-Native 之 FlexBox介绍和使用(一)
2017-10-13 10:12:12 】 浏览:1581
Tags:React-Native FlexBox 介绍 使用

# 前言

  • 学习本系列内容需要具备一定 HTML 开发基础,没有基础的朋友可以先转至 HTML快速入门(一) 学习

  • 本人接触 React Native 时间并不是特别长,所以对其中的内容和性质了解可能会有所偏差,在学习中如果有错会及时修改内容,也欢迎万能的朋友们批评指出,谢谢

  • 文章第一版出自简书,如果出现图片或页面显示问题,烦请转至 简书 查看 也希望喜欢的朋友可以点赞,谢谢

什么是 FlexBox 布局


  • 在 html 中,界面的搭建都是采用 CSS 的布局方式,CSS 是基于盒子模型,依赖于 display、position、float属性,这对于一些比如 垂直居中 的特殊布局来说非常不方便

  • Flex 是一种全新的针对 Web 和移动开发的布局方式,它可以简便、完整、响应式地实现各种页面布局,并且目前的所有浏览器已经支持这种布局方式,所以不用考虑兼容性方面的问题

  • FlexBox 从字面上可以理解成:能够很容易变化以适应外界条件变化的通用矩形容器,也就是我们常听到的 弹性布局,它的宗旨就是 通过弹性的方式来第七和分布容器中内容的空间,使其能使用不同屏幕,为盒装模型提供最大的灵活性(这类似于 iOS 开发中的AtuoLayout布局方式)

  • FlexBox 布局主要思想是:让容器有能力让其子项目改变宽度、高度甚至是顺序,从而达到最佳填充可用空间的方式

  • React Native 中的 FlexBox 是这个规范的一个子集

  • 综上所述,FlexBox 就是用来解决 父盒子 和 子盒子 之间的约束关系,如下图

父盒子和子盒子之间的约束关系

  • FlexBox 在开发中能够解决下面等问题
    • 浮动布局
    • 水平和垂直居中
    • 自动分配宽度
    • 各种机型屏幕适配
    • 动态分配子集的尺寸、位置等等
  • 如下图所示,在 CSS 中,常规的布局是基于块和内联流方向,而 Flex布局是基于 Flexflow流【容器默认存在两根轴:水平的主轴(main axis)垂直的交叉轴(cross axis),主轴的开始位置(与边框的交叉点)叫做 main start,结束的位置叫 main end;交叉轴的开始位置叫做 cross start,结束位置叫做 cross end。项目默认沿着主轴排列,单个项目占据的主轴空间叫做 main size,占据的交叉轴空间叫做 cross size】

FlexBox主轴与侧轴的关系

  • 根据伸缩项目排列方式的不同,主轴和侧轴方向也会变化,如下图所示

主轴从左向右排列

主轴从上向下排列

获取主屏幕尺寸

  • 为了后面更好的展示案例,我们先来看看如何获取主屏幕的尺寸和分辨率
    • 首先,我们需要先导入 Dimensions


        // 导入类库
        var Dimensions = require('Dimensions');
    
    • 接下来就可以在需要的地方使用 Dimensions 变量获取屏幕的高度、宽度、分辨率等等数据
        export default class TestRN extends Component {
            render() {
                return (
                <View style={styles.container}>
                    <Text>当前屏幕的宽度:{Dimensions.get('window').width}</Text>
                    <Text>当前屏幕的高度:{Dimensions.get('window').height}</Text>
                </View>
                );
            }
        }
    
    • 设置样式
        // 样式
        const styles = StyleSheet.create({
            container: {
                backgroundColor:'blue'
            },
        });
    

    效果:获取屏幕尺寸

  • 既然能拿到屏幕的尺寸,那么就能够直接将主 View 的大小设置成屏幕的尺寸,使 View 填充整个屏幕

        // 样式
        const styles = StyleSheet.create({
            container: {
                backgroundColor:'blue',
                height:Dimensions.get('window').height,
                width:Dimensions.get('window').width
            },
        });
    

    效果:
    使View尺寸等于屏幕尺寸

FlexBox 常用容器属性


  • 为了方便理解,我们先添加几个视图

        // 导入类库
        var Dimensions = require('Dimensions');
    
        // 入口
        export default class TestRN extends Component {
            render() {
                return (
                <View style={styles.container}>
                    <View style={styles.subViewStyle1}></View>
                    <View style={styles.subViewStyle2}></View>
                    <View style={styles.subViewStyle3}></View>
                </View>
            );
        }
    }
    
        // 样式
        const styles = StyleSheet.create({
            container: {
                backgroundColor:'blue',
                height:Dimensions.get('window').height,
                width:Dimensions.get('window').width
            },
            subViewStyle1: {
                backgroundColor:'red',
                height:60,
                width:60,
            },
            subViewStyle2: {
                backgroundColor:'yellow',
                height:60,
                width:60,
            },
            subViewStyle3: {
                backgroundColor:'green',
                height:60,
                width:60,
            },
        });
    

    效果:
    默认样式

  • flexDirection(该属性决定了项目排列的方向,也就是主轴的方向)
    • row:主轴为水平方向,起点在左端


        container: {
            backgroundColor:'blue',
            height:Dimensions.get('window').height,
            width:Dimensions.get('window').width,
            // 设置主轴方向
            flexDirection:'row'
        },
    
    效果:
    主轴向水平方向延伸
  • row-reverse:主轴为水平方向,起点在右端


        container: {
            backgroundColor:'blue',
            height:Dimensions.get('window').height,
            width:Dimensions.get('window').width,
            // 设置主轴方向
            flexDirection:'row-reverse'
        },
    

    效果:
    水平方向,起点在右

  • column(默认):主轴为垂直方向,起点在上


        container: {
            backgroundColor:'blue',
            height:Dimensions.get('window').height,
            width:Dimensions.get('window').width,
            // 设置主轴方向
            flexDirection:'column'
        },
    
    效果:
    主轴垂直,起点在上边
  • column-reverse:主轴为垂直方向,起点在下


        container: {
            backgroundColo
首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Android调用Web服务 下一篇Java 策略模式和状态模式

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目