React Native布局之FlexBox
概述
FlexBox(彈性框布局):英文全稱the flexible box Module,FlexBox旨在提供了在不同尺寸設備上都能保持一致的布局方式。
其主要思想是:讓容器有能力讓其子項目能夠改變其寬度|高度|順序,以最佳方式填充可用空間。在布局中,首先得確定主軸方向(flexDirection),主軸組件的對齊方式(justifyContent),側軸組件的對齊方式(alignItems),通過以上四點可以基本確定布局。
注:FlexBox是CSS3彈性框布局規範,目前還處於最終征求意見稿 (Last Call Working Draft)階段,並不是所有的瀏覽器都支持Flexbox。
在學習FlexBox之前首先要清楚一個概念“寬和高”。一個組件的高度和寬度決定了它在屏幕上的尺寸,顯示的效果。
FlexBox屬性
為了更好的理解與應用FlexBox,我們先看一下FlexBox所具有的屬性。
主軸和側軸(橫軸和豎軸)
如圖:主軸即水平方向的軸線,可以理解成橫軸,側軸垂直於主軸,可以理解為豎軸。
flexDirection
該屬性確定了主軸方向。
屬性名 | 說明 |
---|---|
row(默認) | 主軸方向為水平,起點在左端 |
row- reverse | 主軸方向為水平,起點在右端 |
column | 主軸方向為垂直,起點在上端 |
column-reverse | 主軸方向為垂直,起點在下端 |
justifyContent
該屬性確定了組件在主軸方向上的對齊方式。
屬性名 | 說明 |
---|---|
flex-start(默認) | 組件沿著主軸方向的起始位置靠齊 |
flex-end | 組件沿著主軸方向的結束位置靠齊,和flex-start相反 |
space-between | 組件在主軸方向上兩端對齊,其中的間隔相等 |
space-around | 組件會平均分配在主軸方向上,兩端保留一定的位置空間 |
alignItems
該屬性確定了組件在側軸方向上的對齊方式。
屬性名 | 說明 |
---|---|
flex-start | 組件沿著側軸上的起點對齊 |
flex-end | 組件沿著側軸上的終點對齊 |
center | 組價在側軸方向上居中對齊 |
stretch(默認) | 組件在側軸方向上占滿 |
flexWrap
該屬性主要用作換行,默認情況下,項目都排列在一條線上,放不下的部分則不放置,flexWap就是定義是否換行的。。
屬性名 | 說明 |
---|---|
nowrap(默認) | 不換行 |
wrap | 換行,第一行在上方 |
wrap-reverse | 換行,第一行在下方 |
代碼示例
<View style={ {flexDirection:'row-reverse',backgroundColor:"darkgray",marginTop:20}}>
<View style={ {width:40,height:40,backgroundColor:"darkcyan",margin:5}}>
<Text style={ {fontSize:16}}>1</Text>
</View>
<View style={ {width:40,height:40,backgroundColor:"darkcyan",margin:5}}>
<Text style={ {fontSize:16}}>2</Text>
</View>
<View style={ {width:40,height:40,backgroundColor:"darkcyan",margin:5}}>
<Text style={ {fontSize:16}}>3</Text>
</View>
<View style={ {width:40,height:40,backgroundColor:"darkcyan",margin:5}}>
<Text style={ {fontSize:16}}>4</Text>
</View>
</View>
寬和高
在React Native中尺寸是沒有單位的,它代表了設備獨立像素。有點類似於Android的設備像素。
如:
<View style={ {width:100,height:100,margin:40,backgroundColor:'gray'}}>
<Text style={ {fontSize:16,margin:20}}>尺寸</Text>
</View>
上訴代碼:運行在Android上時,View的長和寬被解釋成:100dp 100dp單位是dp,字體被解釋成16sp 單位是sp,運行在iOS上時尺寸單位被解釋稱了pt,這些單位確保了布局在任何不同dpi的手機屏幕上顯示不會發生改變。
RN的FlexBox和css的FlexBox的異同
雖然React Native中的FlexBox 和Web CSSS上FlexBox工作方式是一樣的。但是在某些方麵還是有細微區別的:
- flexDirection: React Native中默認為flexDirection:'column',在Web CSS中默認為flex-direction:'row'
- alignItems: React Native中默認為alignItems:'stretch',在Web CSS中默認align-items:'flex-start'
- flex: React Native中flex隻接受一個參數,而Web Css的flex可以接受多參數,如:flex: 2 2 10%
- RN不支持屬性:align-content,flex-basis,order,flex-basis,flex-flow,flex-grow,flex-shrink
React Native
React Native布局屬性
以下屬性是React Native所支持的Flex屬性。
父視圖屬性(容器屬性):
- flexDirection enum('row', 'column','row-reverse','column-reverse')
- flexWrap enum('wrap', 'nowrap')
- justifyContent enum('flex-start', 'flex-end', 'center', 'space-between', 'space-around')
- alignItems enum('flex-start', 'flex-end', 'center', 'stretch')
justifyContent
該屬性定義了瀏覽器如何分配順著父容器主軸的彈性(flex)元素之間及其周圍的空間,默認為flex-start。
屬性名 | 說明 |
---|---|
flex-start(默認) | 從行首開始排列。每行第一個彈性元素與行首對齊,同時所有後續的彈性元素與前一個對齊 |
flex-end | 從行尾開始排列。每行最後一個彈性元素與行尾對齊,其他元素將與後一個對齊。 |
center | 伸縮元素向每行中點排列。每行第一個元素到行首的距離將與每行最後一個元素到行尾的距離相同。 |
space-between | 在每行上均勻分配彈性元素。相鄰元素間距離相同。每行第一個元素與行首對齊,每行最後一個元素與行尾對齊。 |
space-around | 在每行上均勻分配彈性元素。相鄰元素間距離相同。每行第一個元素到行首的距離和每行最後一個元素到行尾的距離將會是相鄰元素之間距離的一半。 |
代碼示例:
<View style={ {justifyContent:'center',flexDirection:'row',backgroundColor:"darkgray",marginTop:20}}>
···
</View>
alignItems
屬性以與justify-content相同的方式在側軸方向上將當前行上的彈性元素對齊,默認為stretch。
屬性請參照本文開頭的講解。
代碼示例:
<View style={ {justifyContent:'center',flexDirection:'row',backgroundColor:"darkgray",marginTop:20}}>
···
</View>
子視圖屬性
alignSelf
該屬性以屬性定義了flex容器內被選中項目的對齊方式。注意:alignSelf 屬性可重寫靈活容器的 alignItems 屬性。
屬性名 | 說明 |
---|---|
auto(默認) | 元素繼承了它的父容器的 align-items 屬性。如果沒有父容器則為 "stretch" |
stretch | 元素被拉伸以適應容器 |
center | 元素位於容器的中心 |
flex-start | 元素位於容器的開頭 |
flex-end | 元素位於容器的結尾 |
代碼示例:
<View style={ {alignSelf:'baseline',width:60,height: 20,backgroundColor:"darkcyan",margin:5}}>
<Text style={ {fontSize:16}}>1</Text>
</View>
flex
該屬性定義了一個可伸縮元素的能力,默認為0。類似於比重這麼一個概念(因其位於父視圖下麵,所以比重相當於所占的百分比)。
代碼示例:
<View style={ {flexDirection:'row',height:40, backgroundColor:"darkgray",marginTop:20}}>
<View style={ {flex:1,backgroundColor:"darkcyan",margin:5}}>
<Text style={ {fontSize:16}}>flex:1</Text>
</View>
<View style={ {flex:2,backgroundColor:"darkcyan",margin:5}}>
<Text style={ {fontSize:16}}>flex:2</Text>
</View>
<View style={ {flex:3,backgroundColor:"darkcyan",margin:5}}>
<Text style={ {fontSize:16}}>flex:3</Text>
</View>
</View>
其他屬性
視圖邊框
屬性名 | 說明 |
---|---|
borderBottomWidth | 底部邊框寬度 |
borderLeftWidth | 左邊框寬度 |
borderRightWidth | 右邊框寬度 |
borderTopWidth | 頂部邊框寬度 |
borderWidth | 邊框寬度 |
border(Bottom|Left|Right|Top)Color | 邊框顏色 |
外邊框
屬性名 | 說明 |
---|---|
margin | 外邊距 |
marginBottom | 下外邊距 |
marginHorizontal | 左右外邊距 |
marginLeft | 左外邊距 |
marginRight | 右外邊距 |
marginTop | 上外邊距 |
marginVertical | 上下外邊距 |
內邊框
屬性名 | 說明 |
---|---|
padding | 內邊距 |
paddingBottom | 下內邊距 |
paddingHorizontal | 左右內邊距 |
paddingLeft | 左內邊距 |
paddingRight | 右內邊距 |
paddingTop | 上內邊距 |
paddingVertical | 上下內邊距 |
邊緣
屬性名 | 說明 |
---|---|
left | 元素的左邊緣 |
right | 元素的右邊緣 |
top | 元素的上邊緣 |
bottom | 元素的下邊緣 |
元素定位
屬性名 | 說明 |
---|---|
absolute | 生成絕對定位的元素,元素的位置通過 "left", "top", "right" 以及 "bottom" 屬性進行規定 |
relative | 生成相對定位的元素,相對於其正常位置進行定位 |
最後更新:2017-04-08 23:00:13
上一篇:
DockerCon2017前瞻 - Docker企業版體驗
下一篇:
Spring注解(Annotations)書目錄
解決Conversion to Dalvik format failed with error 1
采雲間DPC遷移方案實施計劃
響應式自助建站係統有什麼好處
JAVA 十六進製與字符串的轉換
CCAI 2017 | 北京航空航天大學計算機學院副院長王蘊紅:人工智能技術與藝術的鑒賞創作
JAVA基礎教程書目錄
Kubernetes集群上基於Jenkins的CI/CD流程實踐
Real Time Clock (RTC) Drivers for Linux
c/c++ 變量生存期
編譯mysql提示錯誤:configure: error: No curses/termcap library found 解決方法