FlexBox布局在RN中的基本用法

FlexBox 布局基本用法

1、什么是FlexBox

Flexbox是Flexible Box的縮寫卵皂,意為'彈性布局'惯吕,它為盒狀模型提供了很大的靈活性倒庵,讓任何一個(gè)容器都可以指定為Flex布局

任何一個(gè)容器都可以指定為Flex布局

2、基本概念和屬性

使用Flex布局的元素因块,稱為Flex容器(flex Container)橘原,簡(jiǎn)稱'容器'。它的所有子元素自動(dòng)成為容器的成員涡上,稱為Flex項(xiàng)目(flex Item)

先了解下標(biāo)準(zhǔn)的盒子模型:

img

下面主要講解Flex的Container 屬性 和 Item 屬性

下面給出一張F(tuán)lexBox布局的示例圖:

img

從上面的示例圖中可以看出趾断,F(xiàn)lex容器默認(rèn)存在兩根軸:水平方向的主軸(main axis),與主軸垂直方向的交叉軸(cross axis)吩愧。主軸的排布方向是從左至右芋酌,交叉軸的排布方向是從上至下,F(xiàn)lex容器中的Item元素默認(rèn)是按照主軸方向進(jìn)行排序雁佳,Item占據(jù)主軸空間稱為main size脐帝,Item占據(jù)交叉軸空間稱為cross size

注意:

本篇FlexBox基本使用教程主要是針對(duì)web端布局進(jìn)行講解的同云,React Native開發(fā)中使用的FlexBox布局和web端用法基本上一致,但是還是有些差異性堵腹,主要差異大致分為如下幾點(diǎn)炸站,后面的屬性講解中對(duì)于React Nativeweb端的差異,主要的差異會(huì)通過小括號(hào)單獨(dú)的注釋說明

  • 屬性名不同:在web端多個(gè)單詞之間是以中劃線連接(例如:flex-direction)疚顷,在React Native中是以駝峰命名(flexDirection)
  • 默認(rèn)值不同:例如在web端默認(rèn)主軸方向?yàn)闄M向(flex-direction: column)旱易,在React Native中默認(rèn)的主軸方向?yàn)樨Q直方向(flexDirection: row)
  • 有些FlexBox的屬性在web端是生效的,但是在React Native中不生效的荡含,例如:(flex-flow )

3咒唆、Flex容器(Container)屬性

容器屬性主要有下列6個(gè):

  • flex-direction(在RN中屬性名稱為:flexDirection)
  • flex-wrap(在RN中屬性名稱為:flexWrap)
  • flex-flow(RN中暫時(shí)用不到此屬性)
  • justify-content(在RN中屬性名稱為:justifyContent)
  • align-items(在RN中屬性名稱為:alignItems)
  • align-content(在RN中暫時(shí)用不到此屬性)

下面我們分別來講解這6個(gè)容器屬性的使用方式和作用

3.1 flex-direction

flex-direction作用:用來決定容器的主軸方向

.box {
  flex-direction: row | row-reverse | column | column-reverse;
}
img

flex-direction屬性有四個(gè)取值:

  • row:主軸為水平方向,起點(diǎn)在左端
  • row-reverse:主軸為水平方向释液,起點(diǎn)在右端
  • column:主軸為豎直方向全释,起點(diǎn)在上沿
  • column-reverse:主軸為豎直方向,起點(diǎn)在下沿

注意:React Native中误债,當(dāng)沒有設(shè)置容器的主軸方向時(shí)浸船,默認(rèn)容器主軸方向?yàn)椋?code>flex-direction: column,也就是說寝蹈,當(dāng)我們的容器的主軸的排布方向?yàn)樨Q直方向時(shí)李命,這時(shí)我們可以省略不寫flex-direction屬性

3.2 flex-wrap

默認(rèn)情況下,容器中的Item元素都排列在一條軸線上箫老,flex-wrap屬性定義了如果在一條軸線上排列不下所有的Item元素封字,可以進(jìn)行換行排列

img
.box{
  flex-wrap: nowrap | wrap | wrap-reverse;
}

flex-wrap 屬性有三個(gè)取值:

  • nowrap(默認(rèn)值):不換行
img
  • wrap:換行,第一行在上方
img
  • wrap-reverse:換行耍鬓,第一行在下方
img

3.3 flex-flow

flex-flow屬性是flex-direction屬性和flex-wrap屬性的簡(jiǎn)寫形式阔籽,默認(rèn)值為row nowrap

.box {
  flex-flow: <flex-direction> || <flex-wrap>;
}

3.4 justify-content

justify-content屬性定義了Item在主軸方向上的對(duì)齊方式

.box {
  justify-content: flex-start | flex-end | center | space-between | space-around;
}
img

justify-content屬性有5個(gè)取值,具體對(duì)齊方式與軸的方向有關(guān)牲蜀。下面假設(shè)主軸方向?yàn)閺淖蟮接?/p>

  • flex-start(默認(rèn)值):左對(duì)齊
  • flex-end:右對(duì)齊
  • center:居中
  • space-between:兩端對(duì)齊笆制,Item之間的間隔都相等
  • space-around:每個(gè)Item兩側(cè)的間隔相等。Item之間的間隔比Item與邊框的間隔大一倍

3.5 align-items

align-items屬性定義Item在交叉軸上的對(duì)齊方式

.box {
  align-items: flex-start | flex-end | center | baseline | stretch;
}
img

align-items屬性有5個(gè)取值涣达,具體的對(duì)齊方式與交叉軸的方向有關(guān)在辆,下面假設(shè)交叉軸方向從上到下

  • flex-start:(默認(rèn)值)交叉軸的起點(diǎn)對(duì)齊
  • flex-end:交叉軸的終點(diǎn)對(duì)齊
  • center:交叉軸的中點(diǎn)對(duì)齊
  • baseline: 項(xiàng)目的第一行文字的基線對(duì)齊
  • stretch:如果項(xiàng)目未設(shè)置高度或設(shè)為auto,將占滿整個(gè)容器的高度

3.6 align-content

align-content屬性定義了多根軸線的對(duì)齊方式度苔,如果項(xiàng)目只有一根軸線匆篓,該屬性不起作用

.box {
  align-content: flex-start | flex-end | center | space-between | space-around | stretch;
}
img

align-content屬性有6個(gè)取值

  • flex-start:(默認(rèn)值)與交叉軸的起點(diǎn)對(duì)齊
  • flex-end:與交叉軸的終點(diǎn)對(duì)齊
  • center:與交叉軸的中點(diǎn)對(duì)齊
  • space-between:與交叉軸兩端對(duì)齊,軸線之間的間隔平均分布
  • space-around:每根軸線兩側(cè)的間隔都相等寇窑,軸線之間的間隔比軸線與邊框的間隔大一倍
  • stretch:軸線占滿整個(gè)交叉軸

4奕删、項(xiàng)目(Item)屬性

Flex容器中的Item元素有以下6個(gè)屬性

  • order(RN中不生效)
  • flex-grow(RN中不生效)
  • flex-shrink(RN中不生效)
  • flex-basis(RN中不生效)
  • flex(RN中使用flex: 1:當(dāng)只有一個(gè)元素使用flex:1 則這個(gè)元素將充滿整個(gè)屏幕,當(dāng)有多個(gè)元素使用flex: 1 則這多個(gè)元素平分屏幕空間大小)
  • align-self

4.1 order

order屬性定義了Item的排列順序疗认,數(shù)值越小完残,排列越靠前伏钠,默認(rèn)為0

.item {
  order: <integer>;
}
img

4.2 flex-grow

flex-grow屬性定義了Item的放大比例,默認(rèn)為0谨设,即如果存在剩余空間熟掂,也不放大

.item {
  flex-grow: <number>; /* default 0 */
}
img

如果所有Item的flex-grow屬性都為1,則它們將等分剩余空間(如果有的話)扎拣,如果一個(gè)Item的flex-grow屬性為2赴肚,其他Item都為1,則前者占據(jù)的剩余空間將比其他Item多一倍

4.3 flex-shrink

flex-shrink屬性定義了Item的縮小比例二蓝,默認(rèn)為1誉券,即如果空間不足,該Item將縮小

.item {
  flex-shrink: <number>; /* default 1 */
}
img

如果所有Item的flex-shrink屬性都為1刊愚,當(dāng)空間不足時(shí)踊跟,都將等比例縮小,如果一個(gè)Item的flex-shrink屬性為0鸥诽,其他Item都為1商玫,則空間不足時(shí),前者不縮小牡借。負(fù)值對(duì)該屬性無效

4.4 flex-basis

flex-basis屬性定義了在分配多余空間之前拳昌,Item占據(jù)的主軸空間(main size),瀏覽器根據(jù)這個(gè)屬性钠龙,計(jì)算主軸是否有多余空間炬藤。它的默認(rèn)值為auto,即Item的本來大小

.item {
  flex-basis: <length> | auto; /* default auto */
}

它可以設(shè)為跟width或height屬性一樣的值(比如350px)碴里,則Item將占據(jù)固定空間

4.5 flex

flex屬性是flex-grow沈矿,flex-shrinkflex-basis的簡(jiǎn)寫,默認(rèn)值為0 1 auto并闲。后兩個(gè)屬性可選

.item {
  flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]
}

該屬性有兩個(gè)快捷值:auto (1 1 auto) 和 none (0 0 auto)

建議優(yōu)先使用這個(gè)屬性,而不是單獨(dú)寫三個(gè)分離的屬性谷羞,因?yàn)闉g覽器會(huì)推算相關(guān)值

4. 6 align-self

align-self屬性允許單個(gè)Item有與其他Item不一樣的對(duì)齊方式帝火,可覆蓋align-items的屬性。默認(rèn)值為auto湃缎,表示繼承父元素的align-items屬性犀填,如果沒有父元素,則等同于stretch

.item {
  align-self: auto | flex-start | flex-end | center | baseline | stretch;
}
img

align-self屬性有6個(gè)取值嗓违,除了增加一個(gè)auto屬性九巡,其他都與align-items屬性完全一致,具體的對(duì)齊方式與交叉軸的方向有關(guān)蹂季,下面假設(shè)交叉軸方向從上到下

  • flex-start:(默認(rèn)值)交叉軸的起點(diǎn)對(duì)齊
  • flex-end:交叉軸的終點(diǎn)對(duì)齊
  • center:交叉軸的中點(diǎn)對(duì)齊
  • baseline: 項(xiàng)目的第一行文字的基線對(duì)齊
  • stretch:如果項(xiàng)目未設(shè)置高度或設(shè)為auto冕广,將占滿整個(gè)容器的高度
  • auto

FlexBox布局在React Native開發(fā)中的使用

在React Native開發(fā)中最多用到的FlexBox布局中的屬性如下:

  • flex
  • flexDirection
  • justifyContent
  • alignItems
  • alignSelf
  • flexWrap

更多文章

  • 作者React Native開源項(xiàng)目OneM【500+ star】地址(按照企業(yè)開發(fā)標(biāo)準(zhǔn)搭建框架完成開發(fā)的):https://github.com/guangqiang-liu/OneM:歡迎小伙伴們 star
  • 作者簡(jiǎn)書主頁:包含60多篇RN開發(fā)相關(guān)的技術(shù)文章http://www.reibang.com/u/023338566ca5 歡迎小伙伴們:多多關(guān)注疏日,多多點(diǎn)贊
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市撒汉,隨后出現(xiàn)的幾起案子沟优,更是在濱河造成了極大的恐慌,老刑警劉巖睬辐,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件挠阁,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡溯饵,警方通過查閱死者的電腦和手機(jī)侵俗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來丰刊,“玉大人隘谣,你說我怎么就攤上這事≡迦” “怎么了洪橘?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)棵帽。 經(jīng)常有香客問我熄求,道長(zhǎng),這世上最難降的妖魔是什么逗概? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任弟晚,我火速辦了婚禮,結(jié)果婚禮上逾苫,老公的妹妹穿的比我還像新娘卿城。我一直安慰自己,他們只是感情好铅搓,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布瑟押。 她就那樣靜靜地躺著,像睡著了一般星掰。 火紅的嫁衣襯著肌膚如雪多望。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天氢烘,我揣著相機(jī)與錄音怀偷,去河邊找鬼。 笑死播玖,一個(gè)胖子當(dāng)著我的面吹牛椎工,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼维蒙,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼掰吕!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起木西,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤畴栖,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后八千,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體吗讶,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年恋捆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了照皆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡沸停,死狀恐怖膜毁,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情愤钾,我是刑警寧澤瘟滨,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站能颁,受9級(jí)特大地震影響杂瘸,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜伙菊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一败玉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧镜硕,春花似錦运翼、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至财剖,卻和暖如春悠夯,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背峰伙。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來泰國(guó)打工疗疟, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留该默,地道東北人瞳氓。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親匣摘。 傳聞我的和親對(duì)象是個(gè)殘疾皇子店诗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

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