React Native04 - FlexBox布局峻凫、獲取屏幕寬高、定位

前言

通過(guò)上一篇的學(xué)習(xí)担锤,我們可以了解到RN的基本開(kāi)發(fā)模式蔚晨,在你開(kāi)始這篇文章之前,建議你先將上一篇的內(nèi)容給多敲幾遍肛循,盡量能夠做到自己?jiǎn)为?dú)敲出來(lái)一個(gè)組件以及樣式表铭腕。其他廢話(huà)就不多說(shuō)了,接下來(lái)介紹我們本篇的內(nèi)容:

  • 體驗(yàn)FlexBox布局
  • FlexBox布局
  • 獲取屏幕寬度
  • 組件的定位

一多糠、體驗(yàn)FlexBox布局

  • 我們之前做的web布局都是基于盒子模型累舷,而現(xiàn)在我們有一種全新的布局方式-flex布局,它又叫做彈性盒模型夹孔,指在通過(guò)彈性的方式來(lái)對(duì)齊和分布容器中的內(nèi)容被盈,使其能使用不同屏幕,為盒模型提供最大的靈活性搭伤,目前他已經(jīng)得到了所有瀏覽器的支持只怎。

  • 上面說(shuō)的是官話(huà),說(shuō)實(shí)話(huà)我剛看到上面的解釋也是一臉懵逼怜俐,等你正在懂了什么叫彈性布局身堡,你再回來(lái)看這段話(huà),你會(huì)發(fā)現(xiàn)還是一臉懵逼拍鲤。下面我使用使用iOS的布局方式贴谎、HTML的布局方式汞扎,RN的彈性布局方式,實(shí)現(xiàn)如下效果擅这。通過(guò)對(duì)比的方式首先來(lái)讓大家體驗(yàn)一下彈性布局澈魄。

iOS的布局方式

不懂iOS開(kāi)發(fā)的可以直接跳過(guò),這里僅僅是讓iOS開(kāi)發(fā)人員做對(duì)比

iOS的布局方式.png

HTML的布局方式

這個(gè)看不懂的自行學(xué)習(xí)去


RN的布局方式

RN布局方式.png

HTML方式和RN方式的對(duì)比

  1. HTML方式首先要做的是設(shè)置html和body的寬和高是100%,然后在設(shè)置父元素的高寬為100%,RN只需設(shè)置父組件的組件的樣式屬性flex為1

  2. HTML設(shè)置水平方向的居中方式是把需要居中的子元素都設(shè)置為margin:0 atuo仲翎,RN只需父組件的樣式屬性justifyContents:"center"痹扇,便可實(shí)現(xiàn)父組件中所有的子組件都水平居中

  3. HTML設(shè)置垂直居中方式是子元素設(shè)置margin:auto;postion:absolute;top:0;left:0;bottom:0;right:0;并且該子元素要設(shè)置寬和高,RN只需父組件的樣式屬性alignItems:"center"谭确,便可實(shí)現(xiàn)所有的子組件都垂直居中

  4. 上面RN的布局方式就是我們上面提到的FlexBox布局也叫作彈性盒模型帘营。可以不僅大大減少我們布局的代碼量逐哈,而且使我們的布局邏輯更加清晰。

二问顷、FlexBox布局

flexbox布局主要思想

父組件讓子組件能夠改變他的寬高昂秃,以最佳方式來(lái)填充可用空間。

flexbox布局原理

每個(gè)組件默認(rèn)存在兩根軸

  • 主軸: 默認(rèn)是垂直方向
  • 側(cè)軸(交叉軸):跟主軸的方向始終是垂直狀態(tài)
flexbox中最基本的四個(gè)樣式屬性
  1. flexDirection - 決定該組件主軸的方向

    • row: 主軸為水平方向
    • column:主軸為垂直方向
flexDirection詳解
  1. justifyContent - 定義該組件的所有子組件在主軸線(xiàn)的對(duì)其方式

    • flex-start: 組件的子組件向主軸的起始位置靠齊
    • flex-end: 組件的子組件向主軸的結(jié)束位置靠齊
    • center: 組件的子組件向主軸的中間位置靠齊
    • space-between: 組件的子組件向主軸的兩端對(duì)齊杜窄,項(xiàng)目之間的間隔都相等
    • space-around:組件的子組件平均的分布主軸肠骆,兩端保留子組件間隔的一半。
    justifyContent詳解
  1. alignItems - 定義該組件的所有子組件在側(cè)軸線(xiàn)的對(duì)其方式

    • flex-start:交叉軸的起點(diǎn)對(duì)齊

    • flex-end:交叉軸的終點(diǎn)對(duì)齊

    • center:交叉軸的中點(diǎn)對(duì)齊

    • stretch:如果項(xiàng)目未設(shè)置高度或者auto,將占滿(mǎn)整個(gè)容器的高度

      alignItems詳解
  2. flexWrap - 讓組件的子組件都排在一條線(xiàn)

    • nowrap(默認(rèn)值):不換行
    • wrap: 換行

    注:如果設(shè)置wrap不起作用塞耕,是因?yàn)榘姹镜膯?wèn)題蚀腿,此時(shí)只需給他設(shè)置一個(gè)alignItems屬性

    flex-wrap.jpg

flexbox中其他幾個(gè)樣式屬性
  1. flex - 設(shè)置組件的寬度,高度默認(rèn)100%

    11.png

    下面我解釋一下上面圖的原理

    • 上圖紅色是父組件扫外,寬度為350莉钙,他的子組件分別是粉色、橘黃色筛谚、藍(lán)色磁玉、灰色。
    • 灰色的寬是固定50驾讲,此時(shí)紅色剩余的可用寬度為350-50=300
    • 其他三個(gè)色塊都是通過(guò)flex來(lái)設(shè)置寬度蚊伞,他們的flex分別是1,2,3,此時(shí)表明,粉色吮铭、橘黃色时迫、綠色他們要分掉紅色剩余的寬度。
- 分的方式如下:把300分成7(三個(gè)色塊的flex值相加)份谓晌,粉色占1份掠拳,橘黃色占2份,綠色占3份扎谎。      
  1. alignSelf - 設(shè)置某個(gè)子組件在側(cè)軸的對(duì)齊方式

    • 可覆蓋align-items屬性,默認(rèn)值為auto碳想,表示繼承父元素的align-items屬性烧董,如果沒(méi)有父元素,則等同于stretch胧奔。

    • auto/flex-start/flex-end/center/stretch

三逊移、獲取屏幕的寬高

  1. 首先需要獲取到系統(tǒng)的Dimensions類(lèi)庫(kù)
    var dimensions = require("Dimensions");

  2. 通過(guò)ES6的結(jié)構(gòu)賦值獲取值(不懂結(jié)構(gòu)賦值的自行百度啊)
    var {width,height} = dimensions.get("window");

  3. 或者通過(guò)ES5來(lái)獲取
    var width = dimensions.get("window").width;
    var height = dimensions.get("window").height;

四、絕對(duì)定位與相對(duì)定位

與CSS的定位基本一直龙填,下面我主要提一下不同的地方

  • RN中的決定定位不需要再讓父組件處于定位狀態(tài)了

  • 而且如果父組件設(shè)置了內(nèi)邊距胳泉,relative會(huì)做出相應(yīng)的定位改變,而absolute則不會(huì)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市岩遗,隨后出現(xiàn)的幾起案子扇商,更是在濱河造成了極大的恐慌,老刑警劉巖宿礁,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件案铺,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡梆靖,警方通過(guò)查閱死者的電腦和手機(jī)控汉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)返吻,“玉大人姑子,你說(shuō)我怎么就攤上這事〔饨” “怎么了街佑?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)捍靠。 經(jīng)常有香客問(wèn)我沐旨,道長(zhǎng),這世上最難降的妖魔是什么剂公? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任希俩,我火速辦了婚禮,結(jié)果婚禮上纲辽,老公的妹妹穿的比我還像新娘颜武。我一直安慰自己,他們只是感情好拖吼,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布鳞上。 她就那樣靜靜地躺著,像睡著了一般吊档。 火紅的嫁衣襯著肌膚如雪篙议。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,482評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音鬼贱,去河邊找鬼移怯。 笑死,一個(gè)胖子當(dāng)著我的面吹牛这难,可吹牛的內(nèi)容都是我干的舟误。 我是一名探鬼主播,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼姻乓,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼嵌溢!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起蹋岩,我...
    開(kāi)封第一講書(shū)人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤赖草,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后剪个,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體秧骑,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年禁偎,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了腿堤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡如暖,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出忌堂,到底是詐尸還是另有隱情盒至,我是刑警寧澤,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布士修,位于F島的核電站枷遂,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏棋嘲。R本人自食惡果不足惜酒唉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望沸移。 院中可真熱鬧痪伦,春花似錦、人聲如沸雹锣。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蕊爵。三九已至辉哥,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背醋旦。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工恒水, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人饲齐。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓钉凌,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親箩张。 傳聞我的和親對(duì)象是個(gè)殘疾皇子甩骏,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354

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

  • 前言 在上篇文章里面談了Weex在iOS客戶(hù)端工作的基本流程。這篇文章將會(huì)詳細(xì)的分析Weex是如何高性能的布局原生...
    一縷殤流化隱半邊冰霜閱讀 19,038評(píng)論 44 126
  • 前言 學(xué)習(xí)本系列內(nèi)容需要具備一定 HTML 開(kāi)發(fā)基礎(chǔ)先慷,沒(méi)有基礎(chǔ)的朋友可以先轉(zhuǎn)至 HTML快速入門(mén)(一) 學(xué)習(xí) 本人...
    珍此良辰閱讀 4,521評(píng)論 2 19
  • 問(wèn)答題47 /72 常見(jiàn)瀏覽器兼容性問(wèn)題與解決方案饮笛? 參考答案 (1)瀏覽器兼容問(wèn)題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 13,751評(píng)論 1 92
  • 一、簡(jiǎn)介 2009年论熙,W3C提出了一種新的方案----Flex布局福青,可以簡(jiǎn)便、完整脓诡、響應(yīng)式地實(shí)現(xiàn)各種頁(yè)面布局无午。 f...
    ITxiansheng閱讀 2,413評(píng)論 0 1
  • 山西驢友一族閱讀 155評(píng)論 0 0