Flex布局在RN端與Web端規(guī)則對比

幾個(gè)問題

  1. 一個(gè)彈性布局可以由哪幾方面決定匀归?
  2. flex布局在web端與react-native端表現(xiàn)一樣嗎鳞疲?
  3. react-native中的flex:1樣式的含義?

1. 簡介

2009年,W3C提出了一種新的方案——Flex布局均抽,可以簡便、完整其掂、響應(yīng)式地實(shí)現(xiàn)各種頁面布局油挥。目前,它已經(jīng)得到了幾乎所有瀏覽器的支持款熬,成為未來布局的首選方案深寥。

2. 基本概念

  1. FlexFlexible Box的縮寫,意為"彈性布局"贤牛,用來為盒狀模型提供最大的靈活性惋鹅。任何一個(gè)容器都可以指定為Flex布局。設(shè)為Flex布局以后殉簸,子元素的float闰集、clearvertical-align屬性將失效。
  2. 用Flex布局的元素般卑,稱為Flex容器(flex container)武鲁,簡稱"容器"。它的所有子元素自動(dòng)成為容器成員蝠检,稱為Flex項(xiàng)目(flex item)沐鼠,簡稱"項(xiàng)目"。
  3. 容器默認(rèn)存在兩根軸:水平的主軸(main axis)和垂直的交叉軸(cross axis)。項(xiàng)目默認(rèn)沿主軸排列饲梭。

Flex布局關(guān)鍵因素: ①主軸與交叉軸方向; ②兩個(gè)方向?qū)R方式; ③兩個(gè)方向伸縮情況;④是否換行乘盖。

3. 容器屬性

3.1 7個(gè)容器屬性

  1. 容器屬性表
屬性 含義
display: flex 定義flex布局
flex-direction 定義主軸與交叉軸方向
flex-wrap 定義主軸方向是否換行
flex-flow 定義主軸與交叉軸方向、是否換行
justify-content 定義項(xiàng)目在主軸方向?qū)R方式
align-items 定義項(xiàng)目在交叉軸方向對齊方式及伸縮情況
align-content 定義多根軸線在交叉軸方向的對齊方式
  1. 常用屬性
    flex-direction排拷、justify-content侧漓、align-items

3.2 display: flex屬性

  1. 設(shè)置flex布局
    (1) Web端視圖
    Web端視圖

    (2) RN端視圖
    RN端視圖
  2. RN端與Web端差異
    (1) Web
    需要設(shè)置display: flex
    主軸方向默認(rèn)水平向右。
    (2) RN
    元素的display屬性取值為flexnone监氢,默認(rèn)為flex布蔗。
    主軸方向默認(rèn)豎直向下。

3.3 flex-direction屬性

  1. 定義主軸與交叉軸方向
    flex-direction: row | row-reverse | column | column-reverse;
    row(默認(rèn)值)主軸方向水平向右浪腐,交叉軸方向豎直向下纵揍。
    row-reverse 主軸方向水平向左,交叉軸方向豎直向下议街。
    column 主軸方向豎直向下泽谨,交叉軸方向水平向右。
    column-reverse 主軸方向豎直向上特漩,交叉軸方向水平向右吧雹。
    2.RN端與Web端差異
    RN端默認(rèn)值為column

3.4 flex-wrap屬性

  1. 定義主軸方向是否換行
    flex-wrap: nowrap | wrap | wrap-reverse;
    nowrap(默認(rèn))不換行涂身。
    wrap 換行雄卷,第一行在上方。
    wrap-reverse 換行蛤售,第一行在下方丁鹉。
  2. RN端與Web端差異
    RN端屬性取值沒有wrap-reverse

3.5 flex-flow屬性

  1. 定義主軸與交叉軸方向悴能、是否換行
    flex-flow屬性是flex-direction屬性和flex-wrap屬性的簡寫形式揣钦,默認(rèn)值為row nowrap
  2. RN端與Web端差異
    RN端不支持此屬性漠酿。

3.6 justify-content屬性

  1. 定義項(xiàng)目在主軸方向?qū)R方式
    justify-content: flex-start | flex-end | center | space-between | space-around;
    flex-start(默認(rèn)值)向主軸起點(diǎn)方向?qū)R
    flex-end 向主軸終點(diǎn)方向?qū)R
    center 向主軸中點(diǎn)方向?qū)R
    space-between 兩端對齊冯凹,間隔相等
    space-around 兩側(cè)間隔相等,項(xiàng)目間隔是項(xiàng)目與邊框間隔的2倍
  2. 此屬性RN端與Web端無差異

3.7 align-items屬性

  1. 定義項(xiàng)目在交叉軸方向?qū)R方式及伸縮情況
    align-items: flex-start | flex-end | center | baseline | stretch;
    flex-start 向交叉軸起點(diǎn)方向?qū)R
    flex-end 向交叉軸終點(diǎn)方向?qū)R
    center 向交叉軸中點(diǎn)方向?qū)R
    baseline 項(xiàng)目的第一行文字的基線對齊
    stretch(默認(rèn)值)如果項(xiàng)目未設(shè)置高度或設(shè)為auto炒嘲,將占滿整個(gè)容器的高度
    注釋: stretch為默認(rèn)屬性值谈竿,即項(xiàng)目在交叉軸方向若未設(shè)置尺寸,則占滿容器尺寸摸吠;若已設(shè)置尺寸,則等于設(shè)置尺寸嚎花,既不可被拉伸又不可被壓縮寸痢。
    當(dāng)align-items屬性為其他屬性值時(shí),無論項(xiàng)目在交叉軸方向是否設(shè)置尺寸紊选,都以自身尺寸為準(zhǔn)啼止,既不可被壓縮道逗,又不可被拉伸。
  2. RN端與Web端差異
    RNbaseline屬性值的表現(xiàn)為項(xiàng)目底邊對齊献烦。

3.8 align-content屬性

  1. 定義多根軸線在交叉軸方向的寬度及對齊方式
    align-content: flex-start | flex-end | center | space-between | space-around | stretch;
    flex-start 與交叉軸的起點(diǎn)對齊滓窍。
    flex-end 與交叉軸的終點(diǎn)對齊。
    center 與交叉軸的中點(diǎn)對齊巩那。
    space-between 與交叉軸兩端對齊吏夯,軸線之間的間隔平均分布
    space-around 每根軸線兩側(cè)的間隔都相等。所以即横,軸線之間的間隔比軸線與邊框的間隔大一倍
    stretch(默認(rèn)值)軸線占滿整個(gè)交叉軸噪生。
    注釋: 無論項(xiàng)目軸線有一根或多根時(shí),align-items屬性都生效东囚。只有當(dāng)項(xiàng)目軸線有多根時(shí)跺嗽,該屬性才生效。
  2. RN端與Web端差異
    RN端默認(rèn)屬性值為flex-start页藻。

4.項(xiàng)目屬性

4.1 6個(gè)項(xiàng)目屬性

屬性 含義
order 定義項(xiàng)目在主軸方向的排列順序
flex-grow 定義項(xiàng)目在主軸方向的放大比例
flex-shrink 定義項(xiàng)目在主軸方向的縮小比例
flex-basis 定義在分配多余空間之前桨嫁,項(xiàng)目占據(jù)的主軸空間
flex 定義項(xiàng)目在主軸方向的伸縮情況
align-self 定義單個(gè)項(xiàng)目在交叉軸方向的對齊方式及伸縮情況

4.2 order屬性

  1. 定義項(xiàng)目在主軸方向的排列順序
    order: <integer>;
    注釋:數(shù)值越小,排列越靠前份帐,默認(rèn)為0璃吧。
  2. RN端與Web端差異
    RN端不支持order屬性。

4.3 flex-grow屬性

  1. 定義項(xiàng)目在主軸方向的放大比例
    flex-grow: <number>;
    注釋:①默認(rèn)為0, 即如果存在剩余空間弥鹦,也不放大肚逸。②如果所有項(xiàng)目的flex-grow屬性都為1,則它們將等分剩余空間(如果有的話)彬坏。如果一個(gè)項(xiàng)目的flex-grow屬性為2朦促,其他項(xiàng)目都為1,則前者占據(jù)的剩余空間將比其他項(xiàng)多一倍栓始。即: 放大寬度 = 彈性寬度 * (flex-grow/sum(flex-grow))
    注意: 剩余空間的分配比例只與flex-grow的屬性值有關(guān)务冕,與各個(gè)項(xiàng)目的初始尺寸無關(guān)。
  2. 此屬性RN端與Web端無差異

4.4 flex-shrink屬性

  1. 定義項(xiàng)目在主軸方向的縮小比例
    flex-shrink: <number>;
    注釋: ①默認(rèn)為1幻赚,即如果空間不足禀忆,該項(xiàng)目將縮小。②如果所有項(xiàng)目的flex-shrink屬性都為1落恼,當(dāng)空間不足時(shí)箩退,都將等比例縮小。如果一個(gè)項(xiàng)目的flex-shrink屬性為0佳谦,其他項(xiàng)目都為1戴涝,則空間不足時(shí),前者不縮小。
    2.RN端與Web端差異
    RN端默認(rèn)屬性值為0,當(dāng)空間不足時(shí),項(xiàng)目不縮小壁榕。
    總結(jié):Web端默認(rèn)不放大但縮小棚点,RN端默認(rèn)不放大且不縮小。

4.5 flex-basis屬性

  1. 定義在分配多余空間之前,項(xiàng)目占據(jù)的主軸空間
    flex-basis: <length> | auto;
    注釋:①瀏覽器在該屬性值的基礎(chǔ)上進(jìn)行縮放。②默認(rèn)值為auto,即項(xiàng)目的本來大小蓄拣。③可以設(shè)置為與widthheight屬性一樣的值。
  2. 此屬性RN端與Web端無差異

4.6 flex屬性

  1. flex屬性是flex-grow, flex-shrinkflex-basis的簡寫申窘,默認(rèn)值為0 1 auto弯蚜。后兩個(gè)屬性可選。
    快捷值:auto (1 1 auto)剃法、none (0 0 auto)碎捺。
    注釋:①auto為常用屬性值,即項(xiàng)目在主軸方向可伸縮贷洲。②外邊距不可伸縮收厨。
    ②可設(shè)置某個(gè)項(xiàng)目的寬度為固定百分比,其余項(xiàng)目平均分配剩余空間优构。
    .item{flex:auto} .item1{flex:0 0 60%}
    ③可設(shè)置某個(gè)項(xiàng)目的寬度為固定像素诵叁,其余項(xiàng)目平均分配剩余空間。
    .item{flex:auto} .item1{flex:0 0 100px}
  2. RN端與Web端差異
    (1) flex屬性的表現(xiàn)與Web端不同钦椭,取值只能為數(shù)字拧额。
    (2) flex屬性并不簡單是flex-grow/shrink/basis的簡化
    (3) flex默認(rèn)值為0,表示項(xiàng)目保持原始尺寸彪腔,且總是不可伸縮侥锦。
    (4) 若flex取值為-1,則表示項(xiàng)目保持原始尺寸德挣,但當(dāng)容器尺寸不夠時(shí)恭垦,縮小到minWidthminHeight
    (5) 若flex取值為n(n>=1)格嗅,則按照flex值的比例分配剩余空間番挺,剩余空間指的是容器尺寸減去flex值為0-1項(xiàng)目的尺寸。

4.7 align-self屬性

  1. 定義單個(gè)項(xiàng)目在交叉軸方向的對齊方式及伸縮情況
    align-self: auto | flex-start | flex-end | center | baseline | stretch;
    注釋: ①默認(rèn)值為auto屯掖,表示繼承父元素的align-items屬性玄柏,如果沒有父元素,則等同于stretch贴铜。②該屬性可能取6個(gè)值禁荸,除了auto右蒲,其他都與align-items屬性完全一致。
    注意: 子未設(shè)置align-self屬性赶熟,則繼承父的align-items屬性。子設(shè)置align-self屬性陷嘴,可以覆蓋父的align-items屬性映砖。
  2. 此屬性RN端與Web端無差異

5. Flex常用屬性匯總(Web端)

web端flex布局常用屬性

注釋:Flex布局關(guān)鍵因素:①主軸與交叉軸方向;②兩個(gè)方向?qū)R方式;③兩個(gè)方向伸縮情況。④是否換行灾挨。

6.參考資料

Flex 布局語法篇
Flex布局實(shí)例篇
Flex布局演示
ReactNative/LayoutPropTypes

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末邑退,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子劳澄,更是在濱河造成了極大的恐慌地技,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件秒拔,死亡現(xiàn)場離奇詭異莫矗,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)砂缩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進(jìn)店門作谚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人庵芭,你說我怎么就攤上這事妹懒。” “怎么了双吆?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵眨唬,是天一觀的道長。 經(jīng)常有香客問我好乐,道長匾竿,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任曹宴,我火速辦了婚禮搂橙,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘笛坦。我一直安慰自己区转,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布版扩。 她就那樣靜靜地躺著废离,像睡著了一般。 火紅的嫁衣襯著肌膚如雪礁芦。 梳的紋絲不亂的頭發(fā)上蜻韭,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天悼尾,我揣著相機(jī)與錄音,去河邊找鬼肖方。 笑死闺魏,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的俯画。 我是一名探鬼主播析桥,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼艰垂!你這毒婦竟也來了泡仗?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤猜憎,失蹤者是張志新(化名)和其女友劉穎娩怎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體胰柑,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡截亦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了旦事。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片魁巩。...
    茶點(diǎn)故事閱讀 38,094評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖姐浮,靈堂內(nèi)的尸體忽然破棺而出谷遂,到底是詐尸還是另有隱情,我是刑警寧澤卖鲤,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布肾扰,位于F島的核電站,受9級特大地震影響蛋逾,放射性物質(zhì)發(fā)生泄漏集晚。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一区匣、第九天 我趴在偏房一處隱蔽的房頂上張望偷拔。 院中可真熱鬧,春花似錦亏钩、人聲如沸莲绰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蛤签。三九已至,卻和暖如春栅哀,著一層夾襖步出監(jiān)牢的瞬間震肮,已是汗流浹背称龙。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留戳晌,地道東北人鲫尊。 一個(gè)月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像躬厌,于是被迫代替她去往敵國和親马昨。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評論 2 345

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