React Native Flex布局

1、flex布局基本概念

flex是Flexible Box的縮寫姑子,意為"彈性布局"乎婿,用來為盒狀模型提供最大的靈活性。采用flex布局的元素街佑,稱為flex容器(flex Container)谢翎,簡(jiǎn)稱"容器"。它的所有子元素自動(dòng)成為容器成員沐旨,稱為flex項(xiàng)目(flex item)森逮,簡(jiǎn)稱"項(xiàng)目"。如下圖所示:


enter image description here

容器默認(rèn)存在兩根軸:主軸(main axis)和交叉軸(cross axis)磁携。主軸的開始位置(與邊框的交叉點(diǎn))叫做main start褒侧,結(jié)束位置叫做main end;交叉軸的開始位置叫做cross start谊迄,結(jié)束位置叫做cross end闷供。項(xiàng)目默認(rèn)沿主軸排列。單個(gè)項(xiàng)目占據(jù)的主軸空間叫做main size统诺,占據(jù)的交叉軸空間叫做cross size歪脏。Flex布局與Android的線性布局(LinearLayout)有點(diǎn)類似,都可以設(shè)置布局方向篙议,對(duì)齊方式唾糯,以及項(xiàng)目的布局占位權(quán)重,區(qū)別是flex容器中項(xiàng)目分布的總長度超出屏幕寬度鬼贱,超出的那部分項(xiàng)目不可見移怯,項(xiàng)目不會(huì)變形,或者可以設(shè)置flexWrap屬性这难,讓容器可以分行布局舟误,所有項(xiàng)目都能顯示出來。

2 姻乓、flex基本屬性

flex屬性可以分為容器屬性和項(xiàng)目屬性 其中容器屬性包括:

flexDirection
 justifyContent
alignItems
flexWrap```
項(xiàng)目屬性包括:

flex
alignSelf

### 2.1 容器屬性
####2.1-1嵌溢、`flexDirection`:布局方向決定主軸的方向,默認(rèn)值是column蹋岩,即縱向布局

|值 |描述 |
|------|--------------------|
|`row` |橫向布局赖草,主軸為水平方向|
|`column`|縱向布局,主軸為豎直方向|
`row`:![enter image description here](http://upload-images.jianshu.io/upload_images/2041420-1035d7c3372d351e.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
`column`:![enter image description here](http://upload-images.jianshu.io/upload_images/2041420-d7ea6749c21d8f8e.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
####2.1-2剪个、`justifyContent`:主軸方向?qū)R方式
|值 | 描述 |
|-------------|-----------------------|
|`flex-start` | 主軸開端 |
|`center` | 居中 |
|`flex-end` | 主軸末端 |
|`space-between`| 項(xiàng)目與項(xiàng)目之間插入相等空隙 |
|`space-around` | 項(xiàng)目兩旁插入相等空隙 |
**`flex-start`**:主軸開端![enter image description here](http://upload-images.jianshu.io/upload_images/2041420-8fe15044a637441c.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
**`center`**:主軸的中間位置![enter image description here](http://upload-images.jianshu.io/upload_images/2041420-f782127b5a9b7183.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
**`flex-end`**:主軸的末端位置![enter image description here](http://upload-images.jianshu.io/upload_images/2041420-f3416e5ee6bc49de.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)**`space-between`**:項(xiàng)目與項(xiàng)目之間插入相同距離的空隙![enter image description here](http://upload-images.jianshu.io/upload_images/2041420-d23e1e54202521e7.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)**`space-around`**:項(xiàng)目兩旁插入相同距離的空隙![enter image description here](http://upload-images.jianshu.io/upload_images/2041420-c94edbe5db4d9946.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
####2.1-3秧骑、`alignItems`:交叉軸方向?qū)R方式

默認(rèn)值flex-start,即交叉軸開端

|值 | 描述 |
|----------|----------|
|flex-start| 交叉軸開端 |
|center | 交叉軸居中 |
|flex-end | 交叉軸末端 |
**`flex-start`**:交叉軸開端![enter image description here](http://upload-images.jianshu.io/upload_images/2041420-0c0b37d10a8f8c0c.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)**`center`**:交叉軸的中間位置![enter image description here](http://upload-images.jianshu.io/upload_images/2041420-061e9cc09cb5f63f.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)**`flex-end`**:交叉軸的末端位置![enter image description here](http://upload-images.jianshu.io/upload_images/2041420-6792e4b6e95674e5.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
####2.1-4、`flexWrap`:包含內(nèi)容
默認(rèn)值是nowrap乎折,不包裹所有內(nèi)容

|值 |描述 |
|------|--------------------------------------------------------|
|nowrap|項(xiàng)目沿主軸方向布局绒疗,超出容器長度的部分不可見 |
|wrap |項(xiàng)目沿主軸布局所需長度大于容器總長度時(shí),分行布局骂澄,所有項(xiàng)目內(nèi)容都可見|
**`nowrap`**:不包裹內(nèi)容![enter image description here](http://upload-images.jianshu.io/upload_images/2041420-ec3f2759cd939a9f.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)**`wrap`**:包裹內(nèi)容![enter image description here](http://upload-images.jianshu.io/upload_images/2041420-e6688c8d809b2ac1.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
###2.2 項(xiàng)目屬性
####2.2-1吓蘑、**`flex`**:布局權(quán)重
|值 |描述 |
|---|----------|
|>=0|項(xiàng)目占位權(quán)重|
`1:0`:flex=0的項(xiàng)目占用空間僅為內(nèi)容所需空間,flex=1的項(xiàng)目會(huì)占據(jù)其余所有空間![代碼:](http://upload-images.jianshu.io/upload_images/2041420-c0042f55b5e35aae.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)`2:1`:![enter image description here](http://upload-images.jianshu.io/upload_images/2041420-66f5d156515cb523.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)`1:1:1:1`:![enter image description here](http://upload-images.jianshu.io/upload_images/2041420-f0efab3dd8fe1186.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
總結(jié):
`flex:0` :代表著有多大就占多少空間
`flex:n` :代表著在剩余空間中占的比例為(n/總空間)
####2.2-2坟冲、alignSelf:項(xiàng)目交叉軸方向**`自身`**對(duì)齊方式

|值 |描述|
|----------|---|
|flex-start|開端|
|center |居中|
|flex-end |末端|
####3 Layout的其他屬性ayout除了flex屬性之外磨镶,當(dāng)然還有其他屬性  

width: ReactPropTypes.number,
height: ReactPropTypes.number,
top: ReactPropTypes.number,
left: ReactPropTypes.number,
right: ReactPropTypes.number,
bottom: ReactPropTypes.number,
margin: ReactPropTypes.number,
marginVertical: ReactPropTypes.number,
marginHorizontal: ReactPropTypes.number,
marginTop: ReactPropTypes.number,
marginBottom: ReactPropTypes.number,
marginLeft: ReactPropTypes.number,
marginRight: ReactPropTypes.number,
padding: ReactPropTypes.number,
paddingVertical: ReactPropTypes.number,
paddingHorizontal: ReactPropTypes.number,
paddingTop: ReactPropTypes.number,
paddingBottom: ReactPropTypes.number,
paddingLeft: ReactPropTypes.number,
paddingRight: ReactPropTypes.number,
borderWidth: ReactPropTypes.number,
borderTopWidth: ReactPropTypes.number,
borderRightWidth: ReactPropTypes.number,
borderBottomWidth: ReactPropTypes.number,
borderLeftWidth: ReactPropTypes.number,

|屬性 |類型 |描述 |
|---------------------|------|-----------------------------------|
|width |number|容器或者項(xiàng)目的寬度 |
|height |number|容器或者項(xiàng)目的高度 |
|top,bottom,left,right|number|在父容器的上下左右偏移量 |
|margin |number|留邊,留邊的空間不屬于容器或者項(xiàng)目自身空間|
|marginHorizontal |number|水平方向留邊 |
|marginVertical |number|垂直方向留邊 |
|padding |number|填充樱衷,填充的空間輸入容器或者項(xiàng)目自身空間 |
|paddingHorizontal |number|水平方向填充 |
|paddingVertical |number|垂直方向填充 |
|borderWidth |number|邊界寬度 |
|position |enum |位置方式:absolute與relative |
 `position`:默認(rèn)值為relative

|值 |描述 |
|--------|------|
|absolute|絕對(duì)布局|
|relative|相對(duì)布局|
react的默認(rèn)位置方式是relative棋嘲,項(xiàng)目是一個(gè)接一個(gè)排列下去的,absolute為絕對(duì)布局矩桂,一般會(huì)與left和top屬性一起使用沸移。有時(shí)候我們需要實(shí)現(xiàn)某些項(xiàng)目重疊起來,absolute屬性就能發(fā)揮作用了侄榴,例如下圖:react的基本組件暫時(shí)不支持以圖片作為背景雹锣,所以這里的的轉(zhuǎn)入是一個(gè)文本組件,而紅色的圓形是一個(gè)圖片組件癞蚕,在iOS里面組件也可以作為容器蕊爵,圖片可以正常顯示,但是在Android里面桦山,可能存在些問題攒射,如果使用組件作為容器都會(huì)出現(xiàn)圖片變得好奇怪,所以就可以absoulte來解決問題了恒水。代碼如下:
```<View style={{width:80,height:80,alignItems:'center',justifyContent:'center'}}> <Image style={{position:'absolute',left:0,top:0,resizeMode:'contain',width:80,height:80}} source={require('image!finance_usercenter_ic_into')}/> <Text style={{width:80,textAlign:'center',color:'white',fontSize:16}}>轉(zhuǎn)入</Text></View>

這里的View跟Android的View有點(diǎn)不一樣会放,View是可以作為容器也可以作為項(xiàng)目,View作為容器還有其他很多屬性钉凌,例如backgroundColor咧最,borderWidth,borderColor御雕,opacity等等矢沿,這里不一一介紹。

4 布局的尺寸說明

react native的寬高是不需要帶單位的酸纲,那些width捣鲸,height,padding闽坡,margin的賦值都直接是數(shù)字的摄狱,當(dāng)你設(shè)定width:10脓诡,在IOS的話就是設(shè)置了10pt寬度,而在Android上面是10dp媒役,在做項(xiàng)目時(shí),辛勤的美工會(huì)幫我們標(biāo)出所有UI控件的寬宪迟,高酣衷,邊距等等,他們用的單位也是dp次泽,所以賦值style中寬高時(shí)穿仪,直接填入數(shù)字即可。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末意荤,一起剝皮案震驚了整個(gè)濱河市啊片,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌玖像,老刑警劉巖紫谷,帶你破解...
    沈念sama閱讀 218,122評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異捐寥,居然都是意外死亡笤昨,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門握恳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瞒窒,“玉大人,你說我怎么就攤上這事乡洼〕绮茫” “怎么了?”我有些...
    開封第一講書人閱讀 164,491評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵束昵,是天一觀的道長拔稳。 經(jīng)常有香客問我,道長妻怎,這世上最難降的妖魔是什么壳炎? 我笑而不...
    開封第一講書人閱讀 58,636評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮逼侦,結(jié)果婚禮上匿辩,老公的妹妹穿的比我還像新娘。我一直安慰自己榛丢,他們只是感情好铲球,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著晰赞,像睡著了一般稼病。 火紅的嫁衣襯著肌膚如雪选侨。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,541評(píng)論 1 305
  • 那天然走,我揣著相機(jī)與錄音援制,去河邊找鬼。 笑死芍瑞,一個(gè)胖子當(dāng)著我的面吹牛晨仑,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播拆檬,決...
    沈念sama閱讀 40,292評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼洪己,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了竟贯?” 一聲冷哼從身側(cè)響起答捕,我...
    開封第一講書人閱讀 39,211評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎屑那,沒想到半個(gè)月后拱镐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,655評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡齐莲,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評(píng)論 3 336
  • 正文 我和宋清朗相戀三年痢站,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片选酗。...
    茶點(diǎn)故事閱讀 39,965評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡阵难,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出芒填,到底是詐尸還是另有隱情呜叫,我是刑警寧澤,帶...
    沈念sama閱讀 35,684評(píng)論 5 347
  • 正文 年R本政府宣布殿衰,位于F島的核電站朱庆,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏闷祥。R本人自食惡果不足惜娱颊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望凯砍。 院中可真熱鬧箱硕,春花似錦、人聲如沸悟衩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽座泳。三九已至惠昔,卻和暖如春幕与,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背镇防。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評(píng)論 1 269
  • 我被黑心中介騙來泰國打工啦鸣, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人来氧。 一個(gè)月前我還...
    沈念sama閱讀 48,126評(píng)論 3 370
  • 正文 我出身青樓赏陵,卻偏偏與公主長得像,于是被迫代替她去往敵國和親饲漾。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容