css彈性盒子-------桃園三兄弟之:flex-grow逾礁、flex-shrink、flex-basis詳解

收藏分享


原文:https://www.cnblogs.com/chris-oil/p/5430137.html

flex-grow访惜、flex-shrink敞斋、flex-basis三個屬性的作用:

在flex布局中,父元素在不同寬度下疾牲,子元素是如何分配父元素空間的植捎。

(注意:這三個屬性都是在子元素上設置的,下面小編要講的是父元素阳柔,指以flex布局的元素(display:flex))

小編這里先教一下大家如何快速記住這三個屬性:

首先是? flex-basis? 焰枢,basis英文意思是<主要成分>,所以他和width放在一起時,肯定把width干掉舌剂,basis遇到width時就會說我才是最主要的成分济锄,你是次要成分,所以見到我的時候你要靠邊站霍转。

其次是? flex-grow荐绝,grow英文意思是<擴大,擴展避消,增加>,這就代表當父元素的寬度大于子元素寬度之和時低滩,并且父元素有剩余召夹,這時,flex-grow就會說我要成長恕沫,我要長大监憎,怎么樣才能成長呢,當然是分享父元素的空間了婶溯。見下面第二個屬性的內(nèi)容

最后是? flex-shrink鲸阔, shrink英文意思是<收縮,>迄委,這就代表當父元素的寬度小于子元素寬度之和時褐筛,并且超出了父元素的寬度,這時叙身,flex-shrink就會說外面的世界太苦了渔扎,我還是回到父親的懷抱中去吧!因此曲梗,flex-shrink就會按照一定的比例進行收縮赞警。見下面第三個屬性的內(nèi)容

第一個屬性:flex-basis

該屬性用來設置元素的寬度,其實虏两,width也可以設置寬度愧旦。如果元素上同時設置了width和flex-basis,那么width 的值就會被flex-basis覆蓋掉定罢。

? ? <style type="text/css" media="screen">

? ? ? ? ? ? .box{

? ? ? ? ? ? ? ? display: flex;

? ? ? ? ? ? ? ? margin:100px auto;

? ? ? ? ? ? ? ? width:400px;

? ? ? ? ? ? ? ? height:200px;

? ? ? ? ? ? }

? ? ? ? ? ? .inner{

? ? ? ? ? ? ? ? width:200px;

? ? ? ? ? ? ? ? height:100px;

? ? ? ? ? ? ? ? flex-basis:300px;

? ? ? ? ? ? ? ? background:pink;

? ? ? ? ? ? }

? ? ? ? </style>

? ? </head>

? ? <body>

? ? <div class="box">

? ? ? ? <div class="inner">

? ? ? ? </div>

? ? </div>

? ? </body>

見下圖:小編我把寬度設置為width:200px;? flex-basis:300px;結(jié)果顯示表明子元素.inner應用了屬性flex-basis;

第二個屬性:flex-grow

該屬性用來設置當父元素的寬度大于所有子元素的寬度的和時(即父元素會有剩余空間)笤虫,子元素如何分配父元素的剩余空間。 flex-grow的默認值為0祖凫,意思是該元素不索取父元素的剩余空間琼蚯,如果值大于0,表示索取惠况。值越大遭庶,索取的越厲害。

舉個例子: 父元素寬400px稠屠,有兩個子元素:A和B峦睡。A寬為100px,B寬為200px权埠。 則空余空間為 400-(100+200)= 100px榨了。 如果A,B都不索取剩余空間攘蔽,則有100px的空余空間龙屉。

? ? <body>

? ? <div class="box">

? ? ? ? <div class="inner">

? ? ? ? </div>

? ? ? ? <div class="inner1">

? ? ? ? </div>

? ? </div>

? ? </body>

? ? .box{

? ? ? ? ? ? ? ? display: flex;

? ? ? ? ? ? ? ? flex-direction: row;

? ? ? ? ? ? ? ? margin:100px auto;

? ? ? ? ? ? ? ? width:400px;

? ? ? ? ? ? ? ? height:200px;

? ? ? ? ? ? ? ? border:1px solid red;


? ? ? ? ? ? }

? ? ? ? ? ? .inner{

? ? ? ? ? ? ? ? flex-basis:100px;

? ? ? ? ? ? ? ? height:100px;

? ? ? ? ? ? ? ? background:pink;

? ? ? ? ? ? }

? ? ? ? ? ? .inner1{

? ? ? ? ? ? ? ? flex-basis:200px;

? ? ? ? ? ? ? ? height:100px;

? ? ? ? ? ? ? ? background:blue;

? ? ? ? ? ? }

見下圖:

如果A索取剩余空間:設置flex-grow為1,B不索取满俗。則最終A的大小為 自身寬度(100px)+ 剩余空間的寬度(100px)= 200px 转捕。

? ? .inner{

? ? ? ? ? ? ? ? flex-basis:100px;

? ? ? ? ? ? ? ? height:100px;

? ? ? ? ? ? ? ? background:pink;

? ? ? ? ? ? ? ? flex-grow:1;

? ? ? ? ? ? }

? ? ? ? ? ? .inner1{

? ? ? ? ? ? ? ? flex-basis:200px;

? ? ? ? ? ? ? ? height:100px;

? ? ? ? ? ? ? ? background:blue;

? ? ? ? ? ? }

見下圖:

如果A作岖,B都設索取剩余空間,A設置flex-grow為1瓜富,B設置flex-grow為2鳍咱。則最終A的大小為 自身寬度(100px)+ A獲得的剩余空間的寬度(100px (1/(1+2))),最終B的大小為 自身寬度(200px)+ B獲得的剩余空間的寬度(100px (2/(1+2)))(這里呢小編只給了公式降盹,小伙伴們可以自己去算一下)

? ? .inner{

? ? ? ? ? ? ? ? flex-basis:100px;

? ? ? ? ? ? ? ? height:100px;

? ? ? ? ? ? ? ? background:pink;

? ? ? ? ? ? ? ? flex-grow:1;

? ? ? ? ? ? }

? ? ? ? ? ? .inner1{

? ? ? ? ? ? ? ? flex-basis:200px;

? ? ? ? ? ? ? ? height:100px;

? ? ? ? ? ? ? ? background:blue;

? ? ? ? ? ? ? ? flex-grow:2;

? ? ? ? ? ? }

見下圖:

第三個屬性:flex-shrink

該屬性用來設置与柑,當父元素的寬度小于所有子元素的寬度的和時(即子元素會超出父元素),子元素如何縮小自己的寬度的蓄坏。 flex-shrink的默認值為1价捧,當父元素的寬度小于所有子元素的寬度的和時,子元素的寬度會減小涡戳。值越大结蟋,減小的越厲害。如果值為0渔彰,表示不減小嵌屎。

舉個例子: 父元素寬400px,有兩子元素:A和B恍涂。A寬為200px宝惰,B寬為300px。 則A再沧,B總共超出父元素的寬度為(200+300)- 400 = 100px尼夺。 如果A,B都不減小寬度炒瘸,即都設置flex-shrink為0淤堵,則會有100px的寬度超出父元素。

? ? .box{

? ? ? ? ? ? ? ? display: flex;

? ? ? ? ? ? ? ? flex-direction: row;

? ? ? ? ? ? ? ? margin:100px auto;

? ? ? ? ? ? ? ? width:400px;

? ? ? ? ? ? ? ? height:200px;

? ? ? ? ? ? ? ? border:1px solid red;


? ? ? ? ? ? }

? ? ? ? ? ? .inner{

? ? ? ? ? ? ? ? flex-basis:200px;

? ? ? ? ? ? ? ? height:100px;

? ? ? ? ? ? ? ? background:black;

? ? ? ? ? ? ? ? flex-shrink:0;

? ? ? ? ? ? }

? ? ? ? ? ? .inner1{

? ? ? ? ? ? ? ? flex-basis:300px;

? ? ? ? ? ? ? ? height:100px;

? ? ? ? ? ? ? ? background:blue;

? ? ? ? ? ? ? ? flex-shrink:0;


? ? ? ? ? ? }

見下圖:

如果A不減小寬度:設置flex-shrink為0顷扩,B減小拐邪。則最終B的大小為 自身寬度(300px)- 總共超出父元素的寬度(100px)= 200px

? ? .inner{

? ? ? ? ? ? ? ? flex-basis:200px;

? ? ? ? ? ? ? ? height:100px;

? ? ? ? ? ? ? ? background:black;

? ? ? ? ? ? ? ? flex-shrink:0;

? ? ? ? ? ? }

? ? ? ? ? ? .inner1{

? ? ? ? ? ? ? ? flex-basis:300px;

? ? ? ? ? ? ? ? height:100px;

? ? ? ? ? ? ? ? background:blue;

? ? ? ? ? ? ? ? flex-shrink:1;


? ? ? ? ? ? }

見下圖:

如果A,B都減小寬度隘截,A設置flex-shirk為3扎阶,B設置flex-shirk為2。則最終A的大小為 自身寬度(200px)- A減小的寬度(100px * (200px * 3/(200 * 3 + 300 * 2))) = 150px,最終B的大小為 自身寬度(300px)- B減小的寬度(100px * (300px * 2/(200 * 3 + 300 * 2))) = 250px

? ? .inner{

? ? ? ? ? ? ? ? flex-basis:200px;

? ? ? ? ? ? ? ? height:100px;

? ? ? ? ? ? ? ? background:black;

? ? ? ? ? ? ? ? flex-shrink:3;

? ? ? ? ? ? }

? ? ? ? ? ? .inner1{

? ? ? ? ? ? ? ? flex-basis:300px;

? ? ? ? ? ? ? ? height:100px;

? ? ? ? ? ? ? ? background:blue;

? ? ? ? ? ? ? ? flex-shrink:2;


? ? ? ? ? ? }

見下圖:

這里小編明確一點技俐,flex是flex-grow乘陪,flex-shrink,? flex-basis? (注意小編寫的順序)縮寫形式,大家可以記一下下面的縮寫規(guī)則:

如:flex 取值為 none雕擂,則計算值為 0 0 auto啡邑,如下是等同的:

? ? .item {flex: none;}

? ? .item {

? ? ? ? flex-grow: 0;

? ? ? ? flex-shrink: 0;

? ? ? ? flex-basis: auto;

? ? }

當 flex取值為 auto,則計算值為 1 1 auto井赌,如下是等同的:

? ? .item {flex: auto;}

? ? .item {

? ? ? ? flex-grow: 1;

? ? ? ? flex-shrink: 1;

? ? ? ? flex-basis: auto;

? ? }

當 flex 取值為一個非負數(shù)字谤逼,則該數(shù)字為 flex-grow 值贵扰,flex-shrink 取 1,flex-basis 取 0%流部,如下是等同的:

.item {flex: 1;}

.item {flex-grow: 1;? ? flex-shrink: 1;? ? flex-basis: 0%;}

當 flex 取值為一個長度或百分比戚绕,則視為 flex-basis 值,flex-grow 取 1枝冀,flex-shrink取 1舞丛,有如下等同情況(注意 0% 是一個百分比而不是一個非負數(shù)字):

? ? .item-1 {flex: 0%;}

? ? .item-1 { flex-grow: 1;? ? flex-shrink: 1;? ? flex-basis: 0%;}

? ? .item-2 {flex: 24px;}

? ? .item-2 { flex-grow: 1;? ? flex-shrink: 1;? ? flex-basis: 24px;}

當 flex取值為兩個非負數(shù)字,則分別視為 flex-grow和 flex-shrink的值果漾,flex-basis取 0%球切,如下是等同的:

? ? .item {flex: 2 3;}

? ? .item { flex-grow: 2;? ? flex-shrink: 3;? ? flex-basis: 0%;}

? ? 當 flex取值為一個非負數(shù)字和一個長度或百分比,則分別視為 flex-grow和 flex-basis的值绒障,flex-shrink取 1吨凑,如下是等同的:

? ? .item {flex: 2333 3222px;}

? ? .item {? ? flex-grow: 2333;? ? flex-shrink: 1;? ? flex-basis: 3222px;}

原文鏈接:https://blog.csdn.net/m0_37058714/article/details/80765562

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市户辱,隨后出現(xiàn)的幾起案子鸵钝,更是在濱河造成了極大的恐慌,老刑警劉巖庐镐,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件恩商,死亡現(xiàn)場離奇詭異,居然都是意外死亡焚鹊,警方通過查閱死者的電腦和手機痕届,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來末患,“玉大人研叫,你說我怎么就攤上這事¤嫡耄” “怎么了嚷炉?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長探橱。 經(jīng)常有香客問我申屹,道長,這世上最難降的妖魔是什么隧膏? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任哗讥,我火速辦了婚禮,結(jié)果婚禮上胞枕,老公的妹妹穿的比我還像新娘杆煞。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布决乎。 她就那樣靜靜地躺著队询,像睡著了一般。 火紅的嫁衣襯著肌膚如雪构诚。 梳的紋絲不亂的頭發(fā)上蚌斩,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天,我揣著相機與錄音范嘱,去河邊找鬼送膳。 笑死,一個胖子當著我的面吹牛彤侍,可吹牛的內(nèi)容都是我干的肠缨。 我是一名探鬼主播逆趋,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼盏阶,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了闻书?” 一聲冷哼從身側(cè)響起名斟,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎魄眉,沒想到半個月后砰盐,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡坑律,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年岩梳,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片晃择。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡冀值,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出宫屠,到底是詐尸還是另有隱情列疗,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布浪蹂,位于F島的核電站抵栈,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏坤次。R本人自食惡果不足惜古劲,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望缰猴。 院中可真熱鬧产艾,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至缚窿,卻和暖如春棘幸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背倦零。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工误续, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人扫茅。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓蹋嵌,卻偏偏與公主長得像,于是被迫代替她去往敵國和親葫隙。 傳聞我的和親對象是個殘疾皇子栽烂,可洞房花燭夜當晚...
    茶點故事閱讀 42,792評論 2 345

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

  • 首先明確一點是,flex是flex-grow恋脚、flex-shrink腺办、flex-basis的縮寫。故其取值可以考慮...
    獨行俠_ef93閱讀 2,715評論 0 1
  • 原文地址:https://segmentfault.com/q/1010000004080910/a-102000...
    小豆soybean閱讀 20,661評論 2 6
  • 首先明確一點是糟描, flex 是 flex-grow怀喉、flex-shrink、flex-basis的縮寫船响。故其取值可...
    指尖的跳動閱讀 331評論 0 0
  • 前言 FlexBox是css3的一種新的布局方式躬拢,天生為解決布局問題而存在的它,比起傳統(tǒng)的布局方式见间,我們使用Fle...
    zevei閱讀 1,410評論 23 3
  • H5移動端知識點總結(jié) 閱讀目錄 移動開發(fā)基本知識點 calc基本用法 box-sizing的理解及使用 理解dis...
    Mx勇閱讀 4,395評論 0 26