【RN - 基礎】之FlexBox彈性佈局
前言
彈性盒模型(The Flexible Box Module),又叫FlexBox,意為“彈性佈局”,旨在通過彈性的方式來對齊和分佈容器中內容的空間,使其能適應不同的螢幕,為盒裝模型提供最大的靈活性。
FlexBox在大部分情況下都是處理Item在Container中位置和尺寸的關係。
FlexBox在佈局中能解決很多問題,如浮動佈局、螢幕適配、水平垂直居中、自動分配寬度等。
FlexBox佈局屬性
flexDirection主軸方向:
flexDirection屬性用來設定主軸的方向,即檢視中子控制元件的排列順序,有如下幾種選項:
- column(預設值):子控制元件從上向下排列;
- column-reverse:子控制元件從下向上排列;
- row:子控制元件從左向右排列;
- row-reverse:子控制元件從右向左排列。
justifyContent對齊方式:
justifyContent屬性用來設定伸縮項在主軸線的對齊方式,有如下幾種選項:
- flex-start(預設值):向主軸方向的起始端靠齊;
- flex-end:向主軸方向的結尾端靠齊;
- center:向主軸中間靠齊;
- space-between:兩段靠齊,項之間間隔相等,主軸兩段沒有空隙;
- space-around:項平均的分佈在主軸上,每個項的兩段都有空隙。
alignItems側軸對齊方式:
alignItems屬性用來設定伸縮項在側軸上的對齊方式(側軸永遠垂直於主軸),有如下幾種選項:
- stretch(預設值):如果沒有設定項的高度或設定為auto,則項將佔滿側軸;
- flex-start:向側軸方向的起始端靠齊;
- flex-end:向側軸方向的末尾端靠齊;
- center:向側軸的中間靠齊。
flexWrap流式佈局樣式:
flexWrap屬性用來設定流式佈局(當所有項不能顯示在一行中時,換行顯示)的樣式,有如下幾種選項:
- nowrap(預設值):不換行;
- wrap:換行,新行在舊行下方;
- wrap-reverse:換行,新行在舊行上方。
注意:flexWrap屬性在iOS上可以正常設定,但在Android上如果不加額外的設定,則只會顯示第一行,解決方法是新增style:alignItems: ’flex-start’
FlexBox元素屬性
flex元素比重:
flex屬性是flex-grow、flex-shrink和flex-basis三個屬性的組合體,其中後兩個屬性是可選屬性。三個屬性具體解釋如下:
- flex-grow:元素佔當前容器中的彈性寬度的比重,預設是0;
- flex-shrink:縮小元素的寬度,值越大縮的越小,預設值是1;
- flex-bisis:相當於CSS中的width屬性,預設值是auto。
元素在容器中的寬度/高度的計算公式:寬/高度 = 彈性寬度 * (flow-grow / sum(flow-grow));
alignSelf:
alignSelf屬性允許單個元素有與其他元素不一樣的對齊方式,有如下幾種選項:
- auto(預設值):整合父容器的對齊方式,如果沒有父容器,則相當於stretch;
- flex-start:當前元素向父容器的起始端靠齊;
- flex-end:當前元素向父容器的結尾端靠齊;
- center:當前元素向父容器的中間靠齊;
- stretch:當前元素拉伸鋪滿父容器。
注意:alignSelf屬性相當於將父容器的alignItems屬性進行了覆蓋。
FlexBox其他方法
獲取當前螢幕的寬度(高度、解析度使用同樣方法獲取):
let Dimensions = require('Dimensions'); let width = Dimensions.get('window').width;
獲取當前螢幕的寬度、高度、解析度:
let Dimensions = require('Dimensions'); let {width, height, scale} = Dimensions.get('window');
補充參考
原文:https://www.cnblogs.com/itgungnir/p/6441057.html
彈性盒模型(The Flexible Box Module),又叫FlexBox,意為“彈性佈局”,旨在通過彈性的方式來對齊和分佈容器中內容的空間,使其能適應不同的螢幕,為盒裝模型提供最大的靈活性。
FlexBox在大部分情況下都是處理Item在Container中位置和尺寸的關係。
FlexBox在佈局中能解決很多問題,如浮動佈局、螢幕適配、水平垂直居中、自動分配寬度等。
FlexBox佈局屬性
flexDirection主軸方向:
flexDirection屬性用來設定主軸的方向,即檢視中子控制元件的排列順序,有如下幾種選項:
- column(預設值):子控制元件從上向下排列;
- column-reverse:子控制元件從下向上排列;
- row:子控制元件從左向右排列;
- row-reverse:子控制元件從右向左排列。
justifyContent對齊方式:
justifyContent屬性用來設定伸縮項在主軸線的對齊方式,有如下幾種選項:
- flex-start(預設值):向主軸方向的起始端靠齊;
- flex-end:向主軸方向的結尾端靠齊;
- center:向主軸中間靠齊;
- space-between:兩段靠齊,項之間間隔相等,主軸兩段沒有空隙;
- space-around:項平均的分佈在主軸上,每個項的兩段都有空隙。
alignItems側軸對齊方式:
alignItems屬性用來設定伸縮項在側軸上的對齊方式(側軸永遠垂直於主軸),有如下幾種選項:
- stretch(預設值):如果沒有設定項的高度或設定為auto,則項將佔滿側軸;
- flex-start:向側軸方向的起始端靠齊;
- flex-end:向側軸方向的末尾端靠齊;
- center:向側軸的中間靠齊。
flexWrap流式佈局樣式:
flexWrap屬性用來設定流式佈局(當所有項不能顯示在一行中時,換行顯示)的樣式,有如下幾種選項:
- nowrap(預設值):不換行;
- wrap:換行,新行在舊行下方;
- wrap-reverse:換行,新行在舊行上方。
注意:flexWrap屬性在iOS上可以正常設定,但在Android上如果不加額外的設定,則只會顯示第一行,解決方法是新增style:alignItems: ’flex-start’
FlexBox元素屬性
flex元素比重:
flex屬性是flex-grow、flex-shrink和flex-basis三個屬性的組合體,其中後兩個屬性是可選屬性。三個屬性具體解釋如下:
- flex-grow:元素佔當前容器中的彈性寬度的比重,預設是0;
- flex-shrink:縮小元素的寬度,值越大縮的越小,預設值是1;
- flex-bisis:相當於CSS中的width屬性,預設值是auto。
元素在容器中的寬度/高度的計算公式:寬/高度 = 彈性寬度 * (flow-grow / sum(flow-grow));
alignSelf:
alignSelf屬性允許單個元素有與其他元素不一樣的對齊方式,有如下幾種選項:
- auto(預設值):整合父容器的對齊方式,如果沒有父容器,則相當於stretch;
- flex-start:當前元素向父容器的起始端靠齊;
- flex-end:當前元素向父容器的結尾端靠齊;
- center:當前元素向父容器的中間靠齊;
- stretch:當前元素拉伸鋪滿父容器。
注意:alignSelf屬性相當於將父容器的alignItems屬性進行了覆蓋。
FlexBox其他方法
獲取當前螢幕的寬度(高度、解析度使用同樣方法獲取):
let Dimensions = require('Dimensions'); let width = Dimensions.get('window').width;
獲取當前螢幕的寬度、高度、解析度:
let Dimensions = require('Dimensions'); let {width, height, scale} = Dimensions.get('window');
補充參考
原文:https://www.cnblogs.com/itgungnir/p/6441057.html