DEV Community

Cover image for How to position things in React Native?
Quintin Orsmond
Quintin Orsmond

Posted on • Edited on • Originally published at bitstoliveby.com

How to position things in React Native?

You just got started with React Native and the biggest problem seems to be a very simple thing:

Positioning

“When I align items and justify content on text inputs or view components they never actually centre and go in random places”

Starting with the View

The View component is a container that enables layout using FlexBox and is the most basic component for creating our UI. The View is essentially the div of React Native.

You can easily see where your views are being laid out if you add a border to them and make them different colours.

<View style={{flex: 1, borderWidth: 10, borderColor: 'red'}}>
   <View style={{flex: 1, borderWidth: 10, borderColor: 'green'}}>
     <View style={{flex: 1, borderWidth: 10, borderColor: 'blue'}}>
     </View>
   </View>
   <View style={{flex: 1, borderWidth: 10, borderColor: 'orange'}}></View>
 </View>  

Enter fullscreen mode Exit fullscreen mode

image

Now that we know where our views are at let’s start to position things.

Positioning basics

With React Native, we have Flexbox support, which works similarly to CSS with a few differences on the defaults.

Knowing your way around Flexbox will help a lot in positioning things easily.

Some of RN’s Flexbox's important properties:

Flex

All container elements such as the View in React Native are Flex containers by default.

To define how the children of a container will fill over the available space along the main axis set the flex property.

The flex property of each element will be used to divide the space.

<View style={{ flex: 1}}>
   <View style={{ flex: 1 }}>A</View>
   <View style={{ flex: 2 }}>B</View>
   <View style={{ flex: 3 }}>C</View>
</View>

Enter fullscreen mode Exit fullscreen mode

1+2+3 = 6

When we add them up, we get six, which indicates that view A will get one-sixth of the space, view B will get two-sixths of the space, and view C will get three-sixths of the space.

Flex direction

Defaults to column where the children of the container will be stacked on top of each other (top to bottom) on the y-axis.

<View style={{ flex: 1, flexDirection: 'column'}}>
  <View style={{ flex: 1, borderWidth: 10, borderColor: 'red'}}/>
  <View style={{ flex: 2, borderWidth: 10, borderColor: 'orange' }}/>
  <View style={{ flex: 3, borderWidth: 10, borderColor: 'green' }}/>
</View>

Enter fullscreen mode Exit fullscreen mode

image

Changing the direction to row will arrange the children on the x-axis side by side (left to right).

<View style={{ flex: 1, flexDirection: 'row'}}>
  <View style={{ flex: 1, borderWidth: 10, borderColor: 'red'}}/>
  <View style={{ flex: 2, borderWidth: 10, borderColor: 'orange' }}/>
  <View style={{ flex: 3, borderWidth: 10, borderColor: 'green' }}/>
</View>

Enter fullscreen mode Exit fullscreen mode

image

Justify content

To align the children within the x-axis (main axis) in the container set the justifyContent property. The default is flex-start that will align the children to the start of the containers main axis.

Here’s a quick visual on the available options:

image

Align items

To align the children within the y-axis (cross axis) in the container set the alignItems property. The default is stretch that will match the height of the container’s cross-axis. One thing to note is that stretch will have no effect when a width is specified on the children.

Here’s a quick visual on the available options:

image

Lets position things

Now let’s see how to align that text input to the centre.

<View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
   <TextInput
     style={{height: 40, borderWidth: 1}}
     value="Text Input"
   />
</View>

Enter fullscreen mode Exit fullscreen mode

image

Theres alot more to flexbox check out https://flexboxfroggy.com/ practice by positioning the froggy using the flexbox algorithm..

I hope this quick guide helped you in positioning things easier in React Native.

Top comments (0)