react native布局浅谈

flexDirection决定布局的主轴,默认值是竖直轴

flexDirection可以决定布局的主轴。。子元素是应该沿着水平轴(row)方向排列,还是沿着竖直轴(column)方向排列呢?默认值是竖直轴(column)方向

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import React, { Component } from 'react';
import {
AppRegistry,
View,
StyleSheet,
} from 'react-native';

export default class FlexDirectionBasics extends Component {
render() {
return (
<View style={styles.flexDirection_style}>
<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>
);
}
};

// 尝试把`flexDirection`改为`column`看看
const styles = StyleSheet.create({
flexDirection_style: {
flex: 1,
flexDirection: 'column', //设置子元素排列的主轴是水平轴(row)还是竖直轴(column)
width: 300,
borderColor: 'black',
borderWidth: 1,
},
});

justifyContent决定其子元素沿着主轴的排列方式

在组件的style中指定justifyContent可以决定其子元素沿着主轴的排列方式。子元素是应该靠近主轴的起始端还是末尾段分布呢?亦或应该均匀分布?对应的这些可选项有:flex-startcenterflex-endspace-around以及space-between

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import React, { Component } from 'react';
import {
AppRegistry,
View,
StyleSheet,
} from 'react-native';

export default class JustifyContentBasics extends Component {
render() {
return (
<View style={styles.JustifyContent_style}>
<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>
);
}
};


// 尝试把`justifyContent`改为`center`看看
// 尝试把`flexDirection`改为`row`看看
const styles = StyleSheet.create({
JustifyContent_style: {
flex: 1,
flexDirection: 'column',
justifyContent: 'space-between', //定义子元素是应该靠近主轴的起始端还是末尾段分布,flex-start、center、flex-end、space-around以及space-between

borderColor: 'black',
borderWidth: 1,
},
});

alignItems决定其子元素沿着次轴(与主轴垂直的轴)的排列方式

在组件的style中指定alignItems可以决定其子元素沿着次轴(与主轴垂直的轴,比如若主轴方向为row,则次轴方向为column)的排列方式。子元素是应该靠近次轴的起始端还是末尾段分布呢?亦或应该均匀分布?对应的这些可选项有:flex-start、center、flex-end以及stretch。

注意:要使stretch选项生效的话,子元素在次轴方向上不能有固定的尺寸。以下面的代码为例:只有将子元素样式中的width: 50去掉之后,alignItems: ‘stretch’才能生效。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import React, { Component } from 'react';
import {
AppRegistry,
View,
StyleSheet,
} from 'react-native';

export default class AlignItemsBasics extends Component {
render() {
return (

<View style={styles.AlignItems_style}>
<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>
);
}
};

// 尝试把`alignItems`改为`flex-start`看看
// 尝试把`justifyContent`改为`flex-end`看看
// 尝试把`flexDirection`改为`row`看看
const styles = StyleSheet.create({
AlignItems_style: {
flex: 1,
flexDirection: 'column',
justifyContent: 'center',
alignItems: 'center', //决定其子元素沿着次轴(与主轴垂直的轴,比如若主轴方向为row,则次轴方向为column)的排列方式

borderColor: 'black',
borderWidth: 1,
},
});d
文章目录
  1. 1. flexDirection决定布局的主轴,默认值是竖直轴
  2. 2. justifyContent决定其子元素沿着主轴的排列方式
  3. 3. alignItems决定其子元素沿着次轴(与主轴垂直的轴)的排列方式
| 45.9k | |