css彈性盒子flex-grow观蜗、flex-shrink臊恋、flex-basis詳解

第一個(gè)參數(shù)表示: flex-grow 定義項(xiàng)目的放大比例,默認(rèn)為0墓捻,即如果存在剩余空間抖仅,也不放大
第二個(gè)參數(shù)表示: flex-shrink 定義了項(xiàng)目的縮小比例,默認(rèn)為1砖第,即如果空間不足撤卢,該項(xiàng)目將縮小
第三個(gè)參數(shù)表示: flex-basis給上面兩個(gè)屬性分配多余空間之前, 計(jì)算項(xiàng)目是否有多余空間, 默認(rèn)值為 auto, 即項(xiàng)目本身的大小
flex-grow、flex-shrink梧兼、flex-basis三個(gè)屬性的作用:

flex布局中放吩,父元素在不同寬度下,子元素是如何分配父元素空間的羽杰。

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

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

首先是 flex-basis 忽洛,basis英文意思是<主要成分>腻惠,所以他和width放在一起時(shí),肯定把width干掉,basis遇到width時(shí)就會說我才是最主要的成分欲虚,你是次要成分集灌,所以見到我的時(shí)候你要靠邊站。

其次是 flex-grow复哆,grow英文意思是<擴(kuò)大欣喧,擴(kuò)展,增加>,這就代表當(dāng)父元素的寬度大于子元素寬度之和時(shí)梯找,并且父元素有剩余唆阿,這時(shí),flex-grow就會說我要成長锈锤,我要長大驯鳖,怎么樣才能成長呢,當(dāng)然是分享父元素的空間了久免。見下面第二個(gè)屬性的內(nèi)容

最后是 flex-shrink浅辙, shrink英文意思是<收縮,>阎姥,這就代表當(dāng)父元素的寬度小于子元素寬度之和時(shí)记舆,并且超出了父元素的寬度,這時(shí)呼巴,flex-shrink就會說外面的世界太苦了泽腮,我還是回到父親的懷抱中去吧御蒲!因此,flex-shrink就會按照一定的比例進(jìn)行收縮诊赊。見下面第三個(gè)屬性的內(nèi)容

第一個(gè)屬性:flex-basis

該屬性用來設(shè)置元素的寬度厚满,其實(shí),width也可以設(shè)置寬度豪筝。如果元素上同時(shí)設(shè)置了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>

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


20180621202401102.png

第二個(gè)屬性:flex-grow

該屬性用來設(shè)置當(dāng)父元素的寬度大于所有子元素的寬度的和時(shí)(即父元素會有剩余空間)续崖,子元素如何分配父元素的剩余空間敲街。 flex-grow的默認(rèn)值為0,意思是該元素不索取父元素的剩余空間严望,如果值大于0多艇,表示索取。值越大像吻,索取的越厲害峻黍。

舉個(gè)例子: 父元素寬400px,有兩個(gè)子元素: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;
        }

見下圖:


20180621203513551.png

如果A索取剩余空間:設(shè)置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;
        }

見下圖

20180621203737948.png

如果A察署,B都設(shè)索取剩余空間,A設(shè)置flex-grow為1峻汉,B設(shè)置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;
        }

見下圖:


20180621203942117.png

第三個(gè)屬性:flex-shrink

該屬性用來設(shè)置休吠,當(dāng)父元素的寬度小于所有子元素的寬度的和時(shí)(即子元素會超出父元素)扳埂,子元素如何縮小自己的寬度的。 flex-shrink的默認(rèn)值為1蛛碌,當(dāng)父元素的寬度小于所有子元素的寬度的和時(shí),子元素的寬度會減小辖源。值越大蔚携,減小的越厲害希太。如果值為0,表示不減小酝蜒。

舉個(gè)例子: 父元素寬400px誊辉,有兩子元素:A和B。A寬為200px亡脑,B寬為300px堕澄。 則A,B總共超出父元素的寬度為(200+300)- 400 = 100px霉咨。 如果A蛙紫,B都不減小寬度,即都設(shè)置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;
 
        }

見下圖:


20180621204844467.png

如果A不減小寬度:設(shè)置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;
 
        }

見下圖:


20180621205056474.png

如果A唁毒,B都減小寬度,A設(shè)置flex-shirk為3星爪,B設(shè)置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;
 
        }

見下圖:
20180621205513272.png

2018062120552815.png

這里小編明確一點(diǎn),flex是flex-grow顽腾,flex-shrink, flex-basis (注意小編寫的順序)縮寫形式近零,大家可以記一下下面的縮寫規(guī)則:

如:flex 取值為 none,則計(jì)算值為 0 0 auto崔泵,如下是等同的:

.item {flex: none;}
.item {
    flex-grow: 0;
    flex-shrink: 0;
    flex-basis: auto;
}

當(dāng) flex取值為 auto达箍,則計(jì)算值為 1 1 auto,如下是等同的:

.item {flex: auto;}
.item {
    flex-grow: 1;
    flex-shrink: 1;
    flex-basis: auto;
}

當(dāng) flex 取值為一個(gè)非負(fù)數(shù)字仅仆,則該數(shù)字為 flex-grow 值蛔糯,flex-shrink 取 1,flex-basis 取 0%幌甘,如下是等同的:

.item {flex: 1;}

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

當(dāng) flex 取值為一個(gè)長度或百分比潮售,則視為 flex-basis 值,flex-grow 取 1锅风,flex-shrink取 1酥诽,有如下等同情況(注意 0% 是一個(gè)百分比而不是一個(gè)非負(fù)數(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;}

當(dāng) flex取值為兩個(gè)非負(fù)數(shù)字,則分別視為 flex-grow和 flex-shrink的值皱埠,flex-basis取 0%肮帐,如下是等同的:

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

當(dāng) flex取值為一個(gè)非負(fù)數(shù)字和一個(gè)長度或百分比,則分別視為 flex-grow和 flex-basis的值,flex-shrink取 1训枢,如下是等同的:

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

轉(zhuǎn)自https://blog.csdn.net/m0_37058714/article/details/80765562

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末托修,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子恒界,更是在濱河造成了極大的恐慌睦刃,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件十酣,死亡現(xiàn)場離奇詭異涩拙,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)耸采,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進(jìn)店門兴泥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人洋幻,你說我怎么就攤上這事郁轻。” “怎么了文留?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵好唯,是天一觀的道長。 經(jīng)常有香客問我燥翅,道長骑篙,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任森书,我火速辦了婚禮靶端,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘凛膏。我一直安慰自己杨名,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布猖毫。 她就那樣靜靜地躺著台谍,像睡著了一般。 火紅的嫁衣襯著肌膚如雪吁断。 梳的紋絲不亂的頭發(fā)上趁蕊,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天,我揣著相機(jī)與錄音仔役,去河邊找鬼掷伙。 笑死,一個(gè)胖子當(dāng)著我的面吹牛又兵,可吹牛的內(nèi)容都是我干的任柜。 我是一名探鬼主播,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼宙地!你這毒婦竟也來了升熊?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤绸栅,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后页屠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體粹胯,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年辰企,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了风纠。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,059評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡牢贸,死狀恐怖竹观,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情潜索,我是刑警寧澤臭增,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站竹习,受9級特大地震影響誊抛,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜整陌,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一拗窃、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧泌辫,春花似錦随夸、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至澜搅,卻和暖如春伍俘,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背勉躺。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工癌瘾, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人饵溅。 一個(gè)月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓妨退,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子咬荷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評論 2 345

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