Розташування компонентів
В React Native можна розміщувати компоненти дітей за допомогою алгоритму Flexbox. Це зручно використовувати для адаптації верстки під різні розміри екранів.
Flex зазвичай використовують з властивостями flexDirection, alignItems та justifyContent.
Flex
На кожен screen зазвичай створюють батьківський View із flex зі значенням 1. Стиль такого компонента заведено називати container. Це означає, що він займе увесь простір екрана пристрою. Всю наступну верстку сторінок роблять всередині цього компонента.
Якщо всередині цього компонента створити три View компоненти, скажімо зі значенням flex 1, 2 і 3 відповідно, то отримаємо всередині батьківського компонента три блоки різної висоти. Розраховуються вони так. Складаємо всі значення flex: 1+2+3=6. І висота першого блоку складе 1/6, другого - 2/6 і третього - 3/6.
Flex Direction
Оскільки flexDirection за замовчанням має значення column, то смуги блоків всередині батьківського компонента будуть горизонтальні. Тобто елементи розташовуються один під одним. Якщо flexDirection зробити row, то елементи розташуються зліва направо. Також є значення column-reverse і row-reverse.
Justify Content
justifyContent описує, як вирівняти дочірні елементи вздовж головної осі. Приймає значення: flex-start, flex-end, center, space-between, space-around, space-evenly. Мабуть, найчастіше дизайнерам хочеться центрувати компоненти.
У вищенаведеному прикладі головна вісь проходить згори вниз, тому компоненти дітей розташуються по центу вздовж висоти, але за замовчанням зліва.
Align Items
alignItems описує, як вирівняти дочірні елементи вздовж поперечної осі батьківського контейнера. Приймає значення: stretch, flex-start, flex-end, center, baseline.
Flex Wrap
Властивість flexWrap встановлюють для батьківського контейнера. Вона контролює розташування (перенесення) контенту вздовж головної осі. якщо wrap, то контент переноситиметься, якщо ні то його не буде видно за межами View.
В цьому прикладі використано компонент SafeAreaView, який розмістить наші компоненти нижче StatusBar. Використано для наочності flexWrap, щоб ніщо не заважало огляду.
Row Gap, Column Gap та Gap
Параметри rowGap, columnGap та gap встановлюють для батьківського контейнера. Вони відповідно визначають відстань між сусідніми дочірніми компонентами між рядками, між стовпчиками та між стовпчиками та рядками в одному параметрі, якщо значення однакові. Причому rowGap та columnGap мають пріоритет.
Ширина і висота
Параметри width та height можуть бути задані в пікселях (просто числом без жодних одиниць, як ми це робили вище), у відсотках і auto. Якщо задано у відсотках, то дочірній елемент буде займати відповідний відсоток батьківського компонента. auto - дефолтне значення і визначається в залежності від вмісту компонента і паддінгів (за замовчанням хоче якомога вужче "огорнути" свій вміст). У прикладі батьківський контейнер займає весь екран (бо, flex: 1), а дочірній компонент займає 100 пікселів по висоті та 50% від батьківського контейнера по ширині.
Позиціонування
В React Native можна спозиціонувати компоненти використавши параметр position. Він приймає два значення: relative (за замовчанням) і absolute. relative позиціонує компонент відносно його місця в потоці (і не впливає на сусідні елементи). absolute - позиціонує компонент відносно вʼюпорту. Для позиціонування використовують параметри top, right, bottom, та left.
Результат може здатися спочатку трохи незвичним. Зелений квадрат спозиціоновано absolute. Зсунуто на 40 пікселів згори і на 40 пікселів зліва відносно вʼюпорту. Синій квадрат спозиціоновано relative. Тобто зсунуто на 40 пікселів згори і 40 пікселів зліва відносно його попереднього положення. Але треба памʼятати, що вісь іде не зліва направо, а згори вниз. Тому і такий результат.
Про Layout Direction, Align Self, Align Content, Flex Basis, Grow, Shrink та інші налаштування можна докладніше прочитати в офіційній документації.
Посилання на офіційну документацію:
Last updated