[翻譯]Flex Basis與Width的區(qū)別

最近在學(xué)習(xí)Flex Box劫窒,其中的Flex Box屬性中的Flex Basis是關(guān)于項(xiàng)目寬度屬性設(shè)置的砾医,這讓許多初學(xué)Flex Box的人困惑它與CSS盒子模型Width屬性的區(qū)別在哪?Google了一番悟泵,找到一篇解釋寫(xiě)得很是不錯(cuò)的文章踩娘,嘗試著翻譯分享一下。
原文地址:http://gedd.ski/post/the-difference-between-width-and-flex-basis/

Flex Items的應(yīng)用準(zhǔn)則

content –> width –> flex-basis (limted by max|min-width)
也就是說(shuō)钞护,

  • 如果沒(méi)有設(shè)置flex-basis屬性盖喷,那么flex-basis的大小就是項(xiàng)目的width屬性的大小
  • 如果沒(méi)有設(shè)置width屬性,那么flex-basis的大小就是項(xiàng)目?jī)?nèi)容(content)的大小

下面通過(guò)給一個(gè)1000px的flex容器來(lái)添加一些flex items來(lái)說(shuō)明一下Flex Items的應(yīng)用準(zhǔn)則:


Container
container {
    display: flex;
    width: 1000px;
}

設(shè)置寬度(Width)

添加四個(gè)200x200像素的items到flex容器中


container-items00
item {
    width: 200px;
    height: 200px;
}

因?yàn)閒lex容器有足夠多的空間难咕,所以items可以很好的填充在容器內(nèi)部:

container-items01

上面的示例就是當(dāng)flex-basis沒(méi)有被指定课梳,默認(rèn)值是flex-basis: auto,也就意味著items以寬度width(200px)為準(zhǔn)余佃。

設(shè)置一個(gè)Flex Basis值

讓我們看看當(dāng)給這些已經(jīng)設(shè)置固定寬度width的items設(shè)置一個(gè)flex-basis值會(huì)發(fā)生什么暮刃。


container-items02
item {
    width: 30px;
    flex-basis: 250px;
}

就像你說(shuō)看到的,當(dāng)指定一個(gè)flex-basis值的時(shí)候爆土,盒子的寬度屬性被忽略了椭懊,所以我們就不需要指定盒子的寬度width屬性了

item {
    flex-basis: 250px;
}

items完全填充了flex容器:


container-items03

因此items的寬度關(guān)鍵在用最終的flex-basis。最佳的方法是只使用flex-basis而不是width或height屬性步势。特別是Safari 10之前的版本的瀏覽器有一個(gè)flexbox bug氧猬,在給items應(yīng)用flex-shrink屬性的時(shí)候,瀏覽器會(huì)使用height屬性而不是flex-basis坏瘩。

使用max-width來(lái)限制flex-basis

min-width和max-width會(huì)限制flex-basis值盅抚。下面是給flex items設(shè)置max-width的結(jié)果:


container-items04
item {
    flex-basis: 250px;
    max-width: 100px;
}

可以看到即使我們將flex-basis設(shè)置為250px,item的寬度還是被限制在了100px倔矾。所以在這個(gè)示例中最終的flex-basis是100px:


container-items05

接著試試min-width來(lái)看看最終的flex-basis有什么不同:


container-items06
item {
    flex-basis: 100px;
    min-width: 250px;
}

可以看到最終item的寬度是250px而不是100px:


container-items07

Flex-basis到底是什么妄均?

現(xiàn)在我們知道了width屬性只是一個(gè)當(dāng)flex-basis沒(méi)有被設(shè)置時(shí)的回退選項(xiàng)。min-width和max-width則是flex-basis的下限和上限哪自。那么flex-basis到底是什么呢丰包?

也許你注意到了上面我們所有的示例在將flex items放入flex容器之前都直觀地列出了flex items的大小。之所以這么做是因?yàn)檫@就是flex-basis的含義:flex items 在被放進(jìn)一個(gè)flex容器之前的大小壤巷。也就是items理想或假設(shè)的大小邑彪。但是flex-basis不能保證其大小隙笆!一旦將items放入flex容器中锌蓄,flex-basis的值就無(wú)法保證了。在上面的示例中撑柔,你可以看到flex items完美地填充了容器瘸爽,那是因?yàn)槿萜鞯拇笮≌玫扔趇tems最終的flex-basis之和。但是如果容器沒(méi)有足夠的空間來(lái)容納或者有多余的空間呢铅忿?下面就分別講解一下這兩種情況:

當(dāng)沒(méi)有足夠空間的時(shí)候

比方說(shuō)我們想要放更多的flex-basis:200px的items到我們的容器:


container-items08

在items被放進(jìn)容器之前剪决,每個(gè)item會(huì)占據(jù)200px,所有的items會(huì)占據(jù)1600px。但是容器只有1000px柑潦。當(dāng)容器沒(méi)有足夠大的空間來(lái)存放所有的items的時(shí)候享言,flex items會(huì)按照壓縮率(shrink rate)被壓縮(shrink)其大小來(lái)填充容器,這個(gè)壓縮率就是flex-shrink來(lái)設(shè)置的,默認(rèn)情況下每個(gè)item的壓縮率都是一樣的:


container-items09

當(dāng)有額外的空間的時(shí)候

通常我們會(huì)有額外的空間剩余當(dāng)所有的items都添加進(jìn)容器后:


container-items10
item {
    flex-basis: 100px;
}

我們可以控制flex items的增長(zhǎng)來(lái)填充可用的空間渗鬼,這也就是flex-grow屬性的作用览露。默認(rèn)值為0,意味著item不會(huì)增長(zhǎng)譬胎。如果將每個(gè)item設(shè)置flex-grow: 1差牛,那么所有 的item都會(huì)等比例的增長(zhǎng)來(lái)填充剩余的空間:


container-items11
item {
    flex-basis: 100px;
    flex-grow: 1;
}

增長(zhǎng)和壓縮是flexbox中很重要的特性,也讓flexbox非常適合應(yīng)用于響應(yīng)式UI設(shè)計(jì)堰乔。Flexbox Zombies課程涵蓋了flex-shrink和flex-grow更多詳細(xì)的細(xì)節(jié)偏化。

Width vs flex-basis

希望現(xiàn)在你明白了width和flex-basis之間的區(qū)別,也知道了如何使用min-width和max-width來(lái)限制最終的flex-basis镐侯。以上這些設(shè)置同樣適用于height屬性侦讨,當(dāng)你將flex-direction設(shè)置為column或者column-reverse的時(shí)候。如果你想掌握所有的flexbox屬性苟翻,墻裂推薦免費(fèi)的Flexbox Zombies課程韵卤,通過(guò)玩游戲來(lái)學(xué)習(xí)flexbox!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末崇猫,一起剝皮案震驚了整個(gè)濱河市怜俐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌邓尤,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,602評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贴谎,死亡現(xiàn)場(chǎng)離奇詭異汞扎,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)擅这,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)澈魄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人仲翎,你說(shuō)我怎么就攤上這事痹扇。” “怎么了溯香?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,878評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵鲫构,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我玫坛,道長(zhǎng)结笨,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,306評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮炕吸,結(jié)果婚禮上伐憾,老公的妹妹穿的比我還像新娘。我一直安慰自己赫模,他們只是感情好树肃,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評(píng)論 5 373
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著瀑罗,像睡著了一般胸嘴。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上廓脆,一...
    開(kāi)封第一講書(shū)人閱讀 49,071評(píng)論 1 285
  • 那天筛谚,我揣著相機(jī)與錄音,去河邊找鬼停忿。 笑死驾讲,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的席赂。 我是一名探鬼主播吮铭,決...
    沈念sama閱讀 38,382評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼颅停!你這毒婦竟也來(lái)了谓晌?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,006評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤癞揉,失蹤者是張志新(化名)和其女友劉穎纸肉,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體喊熟,經(jīng)...
    沈念sama閱讀 43,512評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡柏肪,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了芥牌。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片烦味。...
    茶點(diǎn)故事閱讀 38,094評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖壁拉,靈堂內(nèi)的尸體忽然破棺而出谬俄,到底是詐尸還是另有隱情,我是刑警寧澤弃理,帶...
    沈念sama閱讀 33,732評(píng)論 4 323
  • 正文 年R本政府宣布溃论,位于F島的核電站,受9級(jí)特大地震影響案铺,放射性物質(zhì)發(fā)生泄漏蔬芥。R本人自食惡果不足惜梆靖,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望笔诵。 院中可真熱鬧返吻,春花似錦、人聲如沸乎婿。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,286評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)谢翎。三九已至捍靠,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間森逮,已是汗流浹背榨婆。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,512評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留褒侧,地道東北人良风。 一個(gè)月前我還...
    沈念sama閱讀 45,536評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像闷供,于是被迫代替她去往敵國(guó)和親烟央。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評(píng)論 2 345

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