react-native 之布局篇
一.宽度单位和像素密度
react的宽度不支持百分比,设置宽度时不需要带单位,那么默认的单位是什么呢?
/**
* Sample React Native App
* https://github.com/facebook/react-native
*/
'use strict';
import React, {
AppRegistry,
Component,
StyleSheet,
Text,
View,
Dimensions,
PixelRatio
} from 'react-native'; class MyProject2 extends Component {
render (){
let {height,width}=Dimensions.get('window');
let pixelRatio=PixelRatio.get();
let {pheight,pwidth}={
pheight:PixelRatio.getPixelSizeForLayoutSize(200),
pwidth:PixelRatio.getPixelSizeForLayoutSize(100)
}
return(
<View>
<Text>屏幕高度:{height}</Text>
<Text>屏幕宽度:{width}</Text>
<Text>dp(密度,与160px/inch的比值):{pixelRatio}</Text>
<Text>200布局高度转化为:{pheight}px</Text>
<Text>100布局宽度转化为:{pwidth}px</Text>
</View>
);
}
}
AppRegistry.registerComponent('MyProject2', () => MyProject2);
我的模拟器分辨率是768X1280的,获取的是384X592,像素密度是2px/inch,这里可以确定单位不是px,下面将200,100布局高度转换为像素
都是x2的结果,可以知道单位是密度了.至于上面的高度为什么不符合暂时保留问题.
二.Flex布局
1.什么是Flex布局?布局的传统解决方案,是基于盒子模型,依赖display属性+position属性+float属性,这种布局方式对于特殊布局非常不方便,
比如,垂直居中就不好实现.2009年,W3c提出的Flex布局,即弹性布局,用来为盒子模型提供最大的灵活性,任何一个容器都可以指定为Flex布局.
2.容器的属性(6个)
ReatNative的flex布局和web的略有不同,下面的这些属性在RN中不用写中间"-",并且第二个单词 首字母大写
flex-direction:子项目的在主轴的排列方式
row (默认值):主轴为水平方向,起点在左端
row-reverse:主轴为水平方向,起点在右端(RN似乎不支持)
column:主轴为垂直方向,起点在上沿
column-reverse:主轴为垂直方向,起点在下沿(RN也不支持)
flex-wrap:默认,项目都排在一条线上(又称"轴线")上
nowrap 不换行 (默认)| wrap换行 |wrap-reverse 换行,第一行在下方
RN似乎也不支持
flex-flow:属性是flex-direction和flex-wrap的简写形式,默认是row nowrap,RN没试过
justify-content:定义项目在主轴上的对齐方式
flex-start(默认值) 左对齐 | flex-end (右对齐) | center(居中) | space-between (两端对齐,项目之间间隔相等)
| space-around (每个项目两侧的间隔相等,所以项目之间的间隔比项目与边框的间隔大一倍)
align-items:定义项目在交叉轴上如何对齐
flex-start (交叉轴的起点) | flex-end (终点) | center(中点对齐) | baseline(项目的第一行文字的基线对齐)
| stretch (默认值)如果项目未设置高度 或者设为auto,将占满整个容器
align-content:定义了多根轴线的对齐方式,如果项目只有一根轴线,该属性不起作用
flex-start | flex-end | center | space-between | space-around
3.项目的属性(6个)
order:定义项目的排列顺序,数值越小,排列越靠前,默认为0
flex-grow:定义项目的放大比例,默认为0,即如果存在剩余空间也不放大,如果都为1,则他们将等分剩余空间.如果一个为2,其他为1,则前者占据的剩余空间比其他
多一倍
flex-shrink:定义项目的缩小比例,默认为1,即如果空间不足,项目将缩小.如果都为1,等比缩小,如果一个为0,其他为1,则前者不缩小,负值无效
flex-basis:定义在分配多余空间之前,项目占据的主轴空间,浏览器将根据这个属性,计算主轴是否有多余空间,它的默认值为auto,即项目本来大小,也可以设置
固定空间,即width和height
flex:是flex-grow,flex-shrink,flex-basis的简写,默认为0 1 auto ,后两个属性可选,该属性有快捷值,auto (1 1 auto) 和none (0 0 auto)
align-self:允许单个项目与其他项目不一样的对齐方式,可覆盖align-items 属性,默认值为auto,表示继承父元素的align-items属性,没有父元素则等
同于stretch
auto | flex-start | flex-end | center | baseline | stretch
图片的属性:
resizeMode
cover:cover会被截断
strech:stretch模式图片被拉伸适应屏幕
contain:contain 模式容器完全容纳图片,图片自适应宽高
4.绝对定位与相对定位
不用在父容器中设置absolute或者relative,直接是相对于父容器定位
react-native 之布局篇的更多相关文章
- React Native入门——布局实践:开发京东client首页(一)
有了一些对React Native开发的简单了解,让我们从实战出发.一起来构建一个简单的京东client. 这个client是仿照之前版本号的京东client开发的Android版应用,来源于CSDN ...
- React Native 弹性布局FlexBox
React Native采用一中全新的布局方式:FlexBox(弹性布局).可以很方便的实现各种复杂布局,是全新的针对web和移动开发布局的一种实现方式. 何为FlexBox? 完整名称为:the f ...
- React Native 开发工具篇
正文 概述:开发RN的工具有很多,选择性也比较多,比如Facebook专门为React开发的IDE:Nuclide,还有做前端比较熟悉的WebStorm.Sublime Text 3.VS Code等 ...
- React Native填坑之旅--布局篇
代码在这里: https://github.com/future-challenger/petshop/tree/master/client/petshop/src/controller 回头看看RN ...
- 从web移动端布局到react native布局
在web移动端通常会有这样的需求,实现上中下三栏布局(上下导航栏位置固定,中间部分内容超出可滚动),如下图所示: 实现方法如下: HTML结构: <div class='container'&g ...
- React Native布局
一款好的APP离不了一个漂亮的布局,本文章将向大家分享React Native中的布局方式FlexBox. 在React Native中布局采用的是FleBox(弹性框)进行布局. FlexBox提供 ...
- iOS 写给iOS开发者的React Native学习路线(转)
我是一名iOS开发者,断断续续一年前开始接触React Native,最近由于工作需要,专职学习React Native也有一个多月了.网络上知识资源非常的多,但能让人豁然开朗.迅速学习的还是少数,我 ...
- 写给iOS开发者的React Native学习路线(转)
我是一名iOS开发者,断断续续一年前开始接触React Native,最近由于工作需要,专职学习React Native也有一个多月了.网络上知识资源非常的多,但能让人豁然开朗.迅速学习的还是少数,我 ...
- H5、React Native、Native应用对比分析
每日更新关注:http://weibo.com/hanjunqiang 新浪微博!iOS开发者交流QQ群: 446310206 "存在即合理".凡是存在的,都是合乎规律的.任何新 ...
- 《React Native 精解与实战》书籍连载「Android 平台与 React Native 混合开发」
此文是我的出版书籍<React Native 精解与实战>连载分享,此书由机械工业出版社出版,书中详解了 React Native 框架底层原理.React Native 组件布局.组件与 ...
随机推荐
- 亲历腾讯WEB前端开发三轮面试经历及面试题
[一面]~=110分钟 2014/09/24 11:20 星期三 进门静坐30分钟做题. 填空题+大题+问答题 >>填空题何时接触电脑 何时接触前端运算符 字符串处理 延 ...
- ThinkPHP之OAuth2.0环境搭建
几个比较好的超链接 1.http://www.tuicool.com/articles/u6beUju 2.http://leyteris.iteye.com/blog/1483403
- Linux启动新进程的几种方法汇总
有时候,我们需要在自己的程序(进程)中启动另一个程序(进程)来帮助我们完成一些工作,那么我们需要怎么才能在自己的进程中启动其他的进程呢?在Linux中提供了不少的方法来实现这一点,下面就来介绍一个这些 ...
- 【转】8G内存下MySQL的优化详细方案
对于任何一个数据库管理系统来说,内存的分配使用绝对可以算的上是其核心之一了,所以很多希望更为深入了解某数据库管理系统的人,都会希望一窥究竟,我也不例外. 这里给出方案 按照下面的设置试试看: key_ ...
- Uva 2319
理解:区域覆盖.假设该点在勘测半圆的边缘,求出与该点可在一个半圆的坐标范围l,r,然后,for 一次判断 #include<cstdio> #include<algorithm> ...
- StartUML反向(逆向)Java工程通过代码生成类图
在软件工程中,通过都是先了详细设计,然后按照详细设计来进行开发.在编写详细设计的时候,通常都会画一些类图.时序图.流程图等等UML设计,然后通过uml类图生成代码,这个属于正向工程生成代码,然而在实 ...
- python 内置&&递归
lambda 优点: 1:可以简单使用一个脚本来替代我们的函数 2:不用考虑命名的问题 3:简化代码的可读性,不用跳转到def了,省去这样的步骤 内置函数:bif filter:过滤器 map:映射 ...
- oracle查询以当前年份为准的近些年数据
今天在工作中遇到了一个查询近几年数据的问题,oracle学的比较渣渣,学习了一下. 举个例子: 比如说员工入职,我想看这个公司的员工入职情况,然后做一个趋势统计表. 以当前年份为准,查看近5年的情况趋 ...
- Ubuntu 16.04 安装 Apache, MySQL, PHP7
1.安装之前先更新系统 1 sudo apt update 2.安装Apache2 1 sudo apt install apache2 3.安装PHP 1 sudo apt install php ...
- poj 并查集
http://poj.org/problem?id=1611 水题 题意:就是找一共有多少个人感染了,0是感染学生的编号. #include <stdio.h> #include < ...