style
alignContent和alignItems比较
解释
在 React Native 中,alignItems 和 alignContent 是 Flexbox 布局的属性,用于在交叉轴上对齐容器内的子元素。尽管它们听起来相似,但它们在多行布局中的作用是不同的。
alignItems
- alignItems 用于在交叉轴上对齐容器内的子项。
- 对于一行(或单行)的Flex容器,alignItems 决定了这一行中子项的对齐方式。
- 默认值通常是 stretch,使得子项拉伸以填满容器在交叉轴上的额外空间。
- 其他值包括 flex-start、flex-end、center 和 baseline。
alignContent
- alignContent 用于多行Flex容器,在交叉轴上对齐整个内容。
- 只有当有额外的空间和容器有多行子项时,alignContent 才有效。
- 它决定了多行之间的空间分配和对齐方式。
- 可选值包括 flex-start、flex-end、center、stretch、space-between 和 space-around。
说明
- alignItems 和 alignContent 的默认值都是 stretch。从而多行/列盒子无法紧密连接在一起。
- alignItems 拥有 flex-start、flex-end、center、stretch 和 baseline属性
- alignContent 拥有 flex-start、flex-end、center、stretch、space-between 和 space-around属性
space-between 和 space-around说明
space-between
- 子项之间的空间是相等的。
- 第一个子项贴近容器的一端,最后一个子项贴近容器的另一端。
- 不在子项与容器边缘之间添加空间。
示意布局:
|[子项]---[子项]---[子项]|
space-around
- 子项周围的空间是相等的。
- 子项之间的空间是子项与容器边缘之间空间的两倍。
- 每个子项旁边都有等量的空间,包括与容器边缘的空间。
示意布局:
|- [子项] -- [子项] -- [子项] -|
说明
在 space-around 的情况下,因为子项与容器边缘之间的空间是子项之间空间的一半,所以子项看起来是“浮动”在空间中的,而 space-between 则是将子项均匀分布在容器内,两端的子项紧贴容器边缘。
flex
在 React Native 中,使用 flex: 1 设置的属性实际上是一个简写,它同时设置了 flex-grow, flex-shrink, 和 flex-basis。具体来说,flex: 1 相当于:
- flex-grow: 1; —— 表示组件可以伸展以占用多余的空间。
- flex-shrink: 1; —— 表示组件可以收缩以防止溢出。
- flex-basis: 0%; —— 通常默认值是 auto,但在 flex: 1 的简写中,默认设置为 0,这意味着组件的初始大小不基于它的内容或者它的宽高属性。
所以,当你在 React Native 中使用 flex: 1 时,你实际上是告诉组件:
- 它可以和兄弟组件一样,根据可用空间进行伸展。
- 在默认情况下,如果父组件的空间不足以容纳所有子组件的基础大小,它也允许这个组件收缩。
- 它的起始大小(flex-basis)是 0,这意味着它的大小完全由 flex 布局的空间分配决定。
position
在 React Native 中,position 属性用于确定组件如何在父容器中定位。它有两个值:relative 和 absolute。
relative(默认值)
- 当组件的 position 设置为 relative 时,该组件将根据其正常位置进行定位。此时,您可以使用 top、bottom、left 和 right 属性来调整其位置,这些属性会相对于组件在文档流中的初始位置移动组件。
- 即使您移动了组件,它在布局中占据的空间仍然是基于原始位置的。
absolute
- 将组件的 position 设置为 absolute 会将组件从正常的文档流中取出,这意味着它不再占据空间,而是相对于其最近的非静态定位的祖先(通常是父容器)进行定位。

- 使用 absolute 定位的组件的位置可以通过 top、bottom、left 和 right 属性来指定,这些属性是相对于其父容器的边缘进行定位的。
绝对定位说明
在 React Native 中,如果你将一个子组件设置为绝对定位,那么它会相对于最近的具有相对定位(position: 'relative')的父组件进行定位。如果没有更近的具有相对定位的父组件,它将相对于它的父容器定位,即默认情况下它会相对于根视图定位