【CSS3】flex产捞、flex-grow、flex-shrink哼御、flex-basis屬性

flex 可以說是一次性解決了前端布局的所有的問題(當(dāng)然坯临,并沒有完全解決,要不然也不會(huì)有 grid layout 了)恋昼,以前很難實(shí)現(xiàn)的布局效果在 flex 下簡直不能更簡單看靠,以至于一些其它平臺也開始吸納 flex 的布局思想,也有些開源項(xiàng)目把 flex 的布局方式移植到其它平臺液肌。

本文的示例布局如下:

<div class="container">
    <div class="left"></div>
    <div class="right"></div>
</div>

flex-grow的計(jì)算方式

當(dāng)子元素寬度的總和 < 父元素寬度挟炬,那么此時(shí)就會(huì)按照flex-grow進(jìn)行伸縮布局。樣式如下:

.container {
    width: 600px;
    height: 300px;
    display: flex;
}

.left {
    width: 300px;
    flex-grow: 1;
    background-color: orange;
}

.right {
    width: 200px;
    flex-grow: 2;
    background-color: pink;
}

可以看到嗦哆,子元素left寬度+right寬度 = 500px辟宗。寬度總和是沒有父元素container的寬度大的,剩余的100px將會(huì)根據(jù)flex-grow平分分配給left和right元素吝秕。left的flex-grow = 1泊脐,right的flex-grow = 2,所以烁峭,剩余空間被分配為3份容客,1份分給left,2份分給right约郁,所以left缩挑、right寬度的計(jì)算公式如下:

left: 300 + ( 600 - ( 300 + 200 ) ) * 1 / 3 = 333.33
right: 200 + ( 600 - ( 300 + 200 ) ) * 2 / 3 = 266.67

flex-shrink的計(jì)算方式

當(dāng)子元素寬度的總和 > 父元素寬度,那么此時(shí)就會(huì)按照flex-shrink進(jìn)行壓縮布局鬓梅。樣式如下:

.container {
    width: 600px;
    height: 300px;
    display: flex;
}

.left {
    width: 500px;
    flex-grow: 1;
    flex-shrink: 2;
    background-color: orange;
}

.right {
    width: 400px;
    flex-grow: 2;
    flex-shrink: 1;
    background-color: pink;
}

可以看到供置,left和right的寬度總和(900)明顯大于父元素的寬度600,所以需要按照shrink進(jìn)行壓縮绽快。計(jì)算方法是寬度 - 超出寬度 x (權(quán)重寬度 / 總權(quán)重寬度)

// 超出寬度
const overWidth = Math.abs(600 - (500 + 400)) = 300
// 總權(quán)重寬度
const totalWeightWidth = 500 x 2 + 400 x 1 = 1400
// 計(jì)算left寬度 right寬度
const left = 500 - 300 * ((2 * 500 ) / 1400) = 285.71
const right = 400 - 300 * ((1 * 400 ) / 1400) = 314.29

flex-basis

flex-basis的默認(rèn)值為auto芥丧,他指定了 flex 元素在主軸方向上的初始大小。

  • flex-basis為0時(shí)坊罢,那么元素初始大小盡可能的小
  • flex-basis為auto時(shí)续担,那么元素寬度會(huì)交給flex布局進(jìn)行自適應(yīng)
  • flex-basis為指定大小時(shí),那么元素會(huì)按照這個(gè)初始大小上在flex布局中進(jìn)行改變

flex

flex屬性是flex-grow flex-shrink flex-basic的簡寫活孩,其中后兩個(gè)屬性值可以省略物遇。其默認(rèn)值flex: 0 1 auto

參考

https://zhuanlan.zhihu.com/p/24372279

面試題目
https://github.com/Advanced-Frontend/Daily-Interview-Question/issues/381
https://github.com/Advanced-Frontend/Daily-Interview-Question/issues/382

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子询兴,更是在濱河造成了極大的恐慌乃沙,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件诗舰,死亡現(xiàn)場離奇詭異崔涂,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)始衅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來缭保,“玉大人汛闸,你說我怎么就攤上這事∫章睿” “怎么了诸老?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長钳恕。 經(jīng)常有香客問我别伏,道長,這世上最難降的妖魔是什么忧额? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任厘肮,我火速辦了婚禮,結(jié)果婚禮上睦番,老公的妹妹穿的比我還像新娘类茂。我一直安慰自己,他們只是感情好托嚣,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布巩检。 她就那樣靜靜地躺著,像睡著了一般示启。 火紅的嫁衣襯著肌膚如雪兢哭。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天夫嗓,我揣著相機(jī)與錄音迟螺,去河邊找鬼。 笑死舍咖,一個(gè)胖子當(dāng)著我的面吹牛煮仇,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播谎仲,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼浙垫,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起夹姥,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤杉武,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后辙售,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體轻抱,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年旦部,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了祈搜。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,096評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡士八,死狀恐怖容燕,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情婚度,我是刑警寧澤蘸秘,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站蝗茁,受9級特大地震影響醋虏,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜哮翘,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一颈嚼、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧饭寺,春花似錦粘舟、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至旬薯,卻和暖如春晰骑,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背绊序。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工硕舆, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人骤公。 一個(gè)月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓抚官,卻偏偏與公主長得像,于是被迫代替她去往敵國和親阶捆。 傳聞我的和親對象是個(gè)殘疾皇子凌节,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評論 2 355

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