首先明確一點是,flex是flex-grow、flex-shrink、flex-basis的縮寫。故其取值可以考慮以下情況:
flex的默認值是以上三個屬性值的組合。假設(shè)以上三個屬性同樣取默認值,則flex的默認值是 0 1 auto。同理,如下是等同的:
.item{flex:23333222234px;}.item{flex-grow:2333;flex-shrink:3222;flex-basis:234px;}
當(dāng)flex取值為none,則計算值為 0 0 auto,如下是等同的:
.item{flex:none;}.item{flex-grow:0;flex-shrink:0;flex-basis:auto;}
當(dāng)flex取值為auto,則計算值為 1 1 auto,如下是等同的:
.item{flex:auto;}.item{flex-grow:1;flex-shrink:1;flex-basis:auto;}
當(dāng)flex取值為一個非負數(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取值為一個長度或百分比,則視為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-1{flex-grow:1;flex-shrink:1;flex-basis:24px;}
當(dāng)flex取值為兩個非負數(shù)字,則分別視為flex-grow和flex-shrink的值,flex-basis取 0%,如下是等同的:
.item{flex:23;}.item{flex-grow:2;flex-shrink:3;flex-basis:0%;}
當(dāng)flex取值為一個非負數(shù)字和一個長度或百分比,則分別視為flex-grow和flex-basis的值,flex-shrink取 1,如下是等同的:
.item{flex:23333222px;}.item{flex-grow:2333;flex-shrink:1;flex-basis:3222px;}
flex-basis規(guī)定的是子元素的基準(zhǔn)值。所以是否溢出的計算與此屬性息息相關(guān)。flex-basis規(guī)定的范圍取決于box-sizing。這里主要討論以下flex-basis的取值情況:
auto:首先檢索該子元素的主尺寸,如果主尺寸不為auto,則使用值采取主尺寸之值;如果也是auto,則使用值為content。
content:指根據(jù)該子元素的內(nèi)容自動布局。有的用戶代理沒有實現(xiàn)取content值,等效的替代方案是flex-basis和主尺寸都取auto。
百分比:根據(jù)其包含塊(即伸縮父容器)的主尺寸計算。如果包含塊的主尺寸未定義(即父容器的主尺寸取決于子元素),則計算結(jié)果和設(shè)為auto一樣。
舉一個不同的值之間的區(qū)別:
.parent{display:flex;width:600px;}.parent >div{height:100px;}.item-1{width:140px;flex:210%;background:blue;}.item-2{width:100px;flex:21 auto;background:darkblue;}.item-3{flex:11200px;background:lightblue;}
主軸上父容器總尺寸為 600px
子元素的總基準(zhǔn)值是:0% + auto + 200px = 300px,其中
- 0% 即 0 寬度- auto 對應(yīng)取主尺寸即 100px
故剩余空間為 600px - 300px = 300px
伸縮放大系數(shù)之和為: 2 + 2 + 1 = 5
剩余空間分配如下:
- item-1 和 item-2 各分配 2/5,各得 120px- item-3 分配 1/5,得 60px
各項目最終寬度為:
- item-1 = 0% + 120px = 120px- item-2 = auto + 120px = 220px- item-3 = 200px + 60px = 260px
當(dāng) item-1 基準(zhǔn)值取 0% 的時候,是把該項目視為零尺寸的,故即便聲明其尺寸為 140px,也并沒有什么用,形同虛設(shè)
而 item-2 基準(zhǔn)值取auto的時候,根據(jù)規(guī)則基準(zhǔn)值使用值是主尺寸值即 100px,故這 100px 不會納入剩余空間
更多資料可以參考: