一、介绍
flexbox可以指定某个组件的子元素的布局。
Flexbox可以在不同屏幕尺寸上提供一致的布局结构。
一般来说,使用flexDirection
、justifyContent
和 alignItems
三个样式属性就已经能满足大多数布局需求。
注意:React Native中的Flexbox的工作原理和web上的CSS基本一致,当然也存在少许差异。首先是默认值不同:flexDirection
的默认值是column
而不是row
,而flex
也只能指定一个数字值。
在组件的style
中指定flexDirection
可以决定布局的主轴。
设置子元素是沿着水平轴(row
)方向排列,或者沿着竖直轴(column
)方向排列。
默认值是竖直轴(column
)方向。
2.Justify Content(子元素沿着主轴的排列方式)
在组件的style中指定justifyContent
可以决定其子元素沿着主轴的排列方式。
子元素是应该靠近主轴的起始端还是末尾段分布呢?亦或应该均匀分布?
对应的这些可选项有:flex-start
、center
、flex-end
、space-around
以及space-between
。
3.Align Items(子元素沿着次轴的排列方式。)
在组件的style中指定alignItems
可以决定其子元素沿着次轴的排列方式。
次轴:(与主轴垂直的轴,比如若主轴方向为row
,则次轴方向为column
)
子元素是应该靠近次轴的起始端还是末尾段分布呢?亦或应该均匀分布?
对应的这些可选项有:flex-start
、center
、flex-end
以及stretch
。
注意:要使stretch
选项生效的话,子元素在次轴方向上不能有固定的尺寸。
以下面的代码为例:只有将子元素样式中的width: 50
去掉之后,alignItems: 'stretch'
才能生效。
额外图解:
简易布局图解
二、代码举例
Flex Direction(决定布局的主轴)
Justify Content(子元素沿着主轴的排列方式)
Align Items(子元素沿着次轴的排列方式。)
为了简单,我将三种常用布局方式写在一个类里
export default class myprojectname extends Component {
render() {
return (
<View style={ {flex:1} }>
{/*flexDirection 主轴*/}
<View style={ {height:100,flexDirection: 'row'}}>
<View style={{flex: 1, backgroundColor: 'powderblue'}} />
<View style={{flex: 2, backgroundColor: 'skyblue'}} />
<View style={{flex: 3, backgroundColor: 'steelblue'}} />
</View>
<View style={ {height:50}}/>
{/*justifyContent 主轴子部件排序方式*/}
<View style={ {height:50,flexDirection: 'row',justifyContent: 'space-between',}}>
<View style={{width: 50, height: 50, backgroundColor: 'powderblue'}} />
<View style={{width: 50, height: 50, backgroundColor: 'skyblue'}} />
<View style={{width: 50, height: 50, backgroundColor: 'steelblue'}} />
</View>
<View style={ {height:50}}/>
{/*justifyContent 次轴子部件排序方式*/}
<View style={{flex: 1, flexDirection: 'column', justifyContent: 'center', alignItems: 'center',}}>
<View style={{width: 50, height: 50, backgroundColor: 'powderblue'}} />
<View style={{width: 50, height: 50, backgroundColor: 'skyblue'}} />
<View style={{width: 50, height: 50, backgroundColor: 'steelblue'}} />
</View>
</View>
);
}
};
效果:
从上到下,依次是Flex Direction,Justify Content,Align Items