React-Native 编写的应用的样式不是靠css来实现的,而是依赖javascript来为你的应用来添加样式,先不讨论这样作的好处与坏处,由于这个实现方法自己就存在着不少争议,咱们主要关注他的样式的语法和特性。javascript
var styles = StyleSheet.create({ base: { width: 38, height: 38, }, background: { backgroundColor: '#222222', }, active: { borderWidth: 2, borderColor: ‘#ff00ff', }, });
从语法来看:调用了React-Native的一个构造方法,传入一个对象生成style,若是你写过React就应该很熟悉这种写法,和React的React.createCladd()语法是同样的,传入对象的key就至关于类名(我是这么理解),每一个类也是一个对象,能够配置各类样式参数,整体来讲和CSS的写法差很少,差异上把CSS的命名又“-”连字符改为驼峰写法,而后长度不用加单位“px”,字符串好比色值须要加引号写成字符串。
其实也是和React的行内样式写法的语法同样。css
全部的核心组件都支持样式属性html
<View style={style.base} />
当你须要设置多个属性类的时候,能够传入一个数组java
<View style={[style.base,style.backgroundColor]} />
在两个样式又冲突的状况下,以右边的值优先,有些状况下能够加一些条件判断样式是否加载,好比,css3
<View style={[style.base,this.state.active&&style.active]} />
你也能够在组件中render样式,然而这种作法不推荐,其实就像通常html页面中行内样式不推荐同样,数组
<View style={[styles.base,{width:this.state.width, height:this.state.width*this.state.aspectRatio}]} />
React-Native 采用flexbox布局方式,flexbox是css3引入的布局模型--弹性盒子模型,旨在经过弹性的方式对齐和分布容器中的item,使其适应不一样的宽度和高度。布局
在 React-Native 中的flexbox 是css3中flexbox的一个子集,并不支持全部的flexbox属性。
flexbox 布局分为flexbox container 和 flexbox item :以下图
RN_img_4.png
flexbox 是一个属性的集合,有些是属于container的有些是属于item的。
能够看下面这幅图:
RN_img_5.png
对于 container 有 main axis(主轴)和cross axis(交叉轴)。main size 和 cross size 分别是container主轴方向的交叉轴方向的宽度,main start 和 main end 分别是主轴的起始和结点,其余同理,container里面包含items。
下面介绍一下属性:flex
flexDirection:‘row‘|‘column‘
主轴的方向,水平 | 垂直,默认是 column ,item会按照主轴方向排列。this
flexWrap:‘warp‘|‘nowrap’
flexbox 会默认将全部元素基于一行,这个属性表示是否折行。flexbox
alignItems:‘flex-start’|’flex-end’|’center’|‘stretch‘
表示item在 cross axis 上的对齐方式,基于cross axis的顶部|基于cross axis的底部|基于cross axis的中部|布满整个。
justifyContent:‘flex-start’|‘flex-end‘|‘center‘|‘space-between‘|’space-around’
表示item在 main axis 上的对齐方式,基于主轴开始|基于主轴结束|居中|左右两边对齐,item间隔相等|每一个item两端间隔相等。
flex: num
item 所占的比例大小。
alignSelf:‘ flex-start ’ | ’ flex-end ’ | ’ center ’ | ‘ stretch ‘
它容许项目中当个item和其余itemsyou不同的对齐方式,会覆盖alignitems的属性。
能够看个人我的blog的文章 阿城|blog