概要:このチュートリアルでは、Flexboxモデルを使用してモバイルアプリのコンポーネントを配置する方法を学びます。
React Nativeは、Flexboxレイアウトアルゴリズムを使用してコンポーネントのレイアウトを作成します。React NativeのFlexboxは、WebのFlexboxと似ていますが、いくつかの小さな違いがあります。
機能 | React Native | Web |
---|---|---|
displayプロパティ | 暗黙的にdisplay: 'flex' が含まれる | 明示的にdisplay: flex を指定する必要がある |
デフォルトのflex方向 | デフォルトはcolumnflexDirection: 'column' | デフォルトはrowflex-direction: row |
flexプロパティ | 1つの値を受け入れるflex: flex-basis | 1~3つの値flex: flex-grow flex-shrink flex-basis |
Flexコンテナとアイテム
コンポーネントにdisplay: 'flex'
がある場合、それはflexコンテナになります。すべての直接の子がflexアイテムになります。

例:
<View style={{ display: 'flex'}}>
<Text>JS</Text>
<Text>React</Text>
<Text>React Native</Text>
</View>
Code language: HTML, XML (xml)
この例では、View
はflexコンテナであり、Text
コンポーネントはflexアイテムです。

flexコンテナの直接の子のみがflexアイテムであり、間接的な子コンポーネントはそうではないことに注意してください。例:
<View style={{ display: 'flex'}}>
<Pressable>
<Text>JS</Text>
</Pressable>
<Pressable>
<Text>React</Text>
</Pressable>
<Pressable>
<Text>React Native</Text>
</Pressable>
</View>
Code language: HTML, XML (xml)
この例では、Pressable
コンポーネントはflexアイテムですが、Text
コンポーネントはView
コンポーネントの間接的な子であるため、flexアイテムではありません。

React Nativeでは、以下のコンポーネントはデフォルトでflexboxレイアウトを使用します。つまり、display: 'flex'
を明示的に指定する必要はありません。
- View
- ScrollView
- SafeAreaView
- FlatList
- SectionList
- VirtualizedList
Flex Direction (Flexの方向)
Flexレイアウトは、主軸と交差軸の2つの暗黙的な軸を使用します。
flexDirection
が'column'
に設定されている場合、主軸は上から下になり、交差軸は左から右になります。

flexDirection
が'row'
に設定されている場合、主軸は左から右になり、交差軸は上から下になります。

Flexboxを効果的に使用するには、alignItems
プロパティとflexDirection
プロパティを組み合わせて使用することがよくあります。
alignItems
alignItems
は、flexコンテナの交差軸上で個々のflexアイテムを整列させます。alignItems
プロパティは、以下の値を受け入れます。
- stretch (デフォルト)
- flex-start
- flex-end
- center
- baseline
stretch
alignItems
stretch
は、交差軸上のすべてのflexアイテムをストレッチします。alignItems
はデフォルトでstretch
になることに注意してください。

flex-start
alignItems
がflex-start
に設定されている場合、flexアイテムはflexコンテナの交差軸の開始位置に整列されます。

flex-end
alignItems
がflex-end
に設定されている場合、flexアイテムはflexコンテナの交差軸の終了位置に整列されます。

center
alignItems
centerは、flexアイテムを交差軸の中央に配置します。

以下のプログラムは、alignItemsを示しています。
baseline
flexDirection
が'row'
に設定されている場合、alignItems
baseline
はflexアイテムを同じベースラインに沿って整列させます。

以下のプログラムは、alignItems
baseline
を示しています。
justifyContent
justifyContent
は、flexアイテムをflexコンテナの主軸に沿ってグループとして(alignItems
のように個々のアイテムではなく)整列させます。
justifyContent
は、以下のいずれかの値を受け入れます。
flex-start
flex-end
space-between
space-evenly
space-around
center
以下のアプリは、justifyContent
がどのように機能するかを示しています。
flex-start
justifyContent
flex-start
は、flexアイテムをグループとしてflexコンテナの主軸の開始位置に整列させます。

flex-end
justifyContent
flex-end
は、flexアイテムをグループとしてflexコンテナの主軸の終了位置に整列させます。

center
justifyContent
center
は、flexアイテムをグループとしてflexコンテナの主軸の中央に整列させます。

space-between
justifyContent
space-between
は、flexアイテム間のスペースをflexコンテナの主軸に沿って均等に分散させます。

space-evenly
justifyContent
space-evenly
は、flexアイテムをflexコンテナの主軸上で周囲に均等なスペースを空けて配置します。

space-around
justifyContent
space-around
は、flexコンテナの主軸全体にflexアイテムを配置し、残りのスペースをflexアイテムの周囲に分散させます。

以下の表は、space-between、space-around、およびspace-evenlyの違いを示しています。
プロパティ | 説明 | 視覚的なレイアウト(垂直) |
---|---|---|
space-between | flexアイテム間のスペースを分散します。開始位置と終了位置にはスペースがありません。 | | アイテム 1 | — スペース — | アイテム 2 | — スペース — | アイテム 3 | |
space-around | flexアイテムの周りのスペースを分散します。各flexアイテムの前、間、後のスペースが均等です。開始/終了スペースは、flexアイテム間のスペースの半分です。 | — 1/2 スペース — | アイテム 1 | — スペース — | アイテム 2 | — スペース — | アイテム 3 | — 1/2 スペース — |
space-evenly | flexアイテム間のスペースを均等に分散します。開始位置と終了位置を含め、各flexアイテム間のスペースが均等です。 | — スペース — | アイテム 1 | — スペース — | アイテム 2 | — スペース — | アイテム 3 | — スペース — |
概要
- React Nativeは、flexboxレイアウトを使用してコンポーネントを配置します。
alignItems
を使用して、flexコンテナの交差軸上のflexアイテムを整列させます。flexDirection
を使用して、flexコンテナの主軸上のflexアイテムを整列させます。