首先明確一點(diǎn)是,flex是flex-grow、flex-shrink争涌、flex-basis的縮寫。故其取值可以考慮以下情況:
flex的默認(rèn)值是以上三個(gè)屬性值的組合辣恋。假設(shè)以上三個(gè)屬性同樣取默認(rèn)值亮垫,則flex的默認(rèn)值是 0 1 auto。同理伟骨,如下是等同的:
.item{flex:23333222234px;}.item{flex-grow:2333;flex-shrink:3222;flex-basis:234px;}
當(dāng)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-1{flex-grow:1;flex-shrink:1;flex-basis:24px;}
當(dāng)flex取值為兩個(gè)非負(fù)數(shù)字引颈,則分別視為flex-grow和flex-shrink的值耕皮,flex-basis取 0%,如下是等同的:
.item{flex:23;}.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:23333222px;}.item{flex-grow:2333;flex-shrink:1;flex-basis:3222px;}
flex-basis規(guī)定的是子元素的基準(zhǔn)值李丰。所以是否溢出的計(jì)算與此屬性息息相關(guān)。flex-basis規(guī)定的范圍取決于box-sizing逼泣。這里主要討論以下flex-basis的取值情況:
auto:首先檢索該子元素的主尺寸趴泌,如果主尺寸不為auto,則使用值采取主尺寸之值拉庶;如果也是auto嗜憔,則使用值為content。
content:指根據(jù)該子元素的內(nèi)容自動布局氏仗。有的用戶代理沒有實(shí)現(xiàn)取content值吉捶,等效的替代方案是flex-basis和主尺寸都取auto。
百分比:根據(jù)其包含塊(即伸縮父容器)的主尺寸計(jì)算皆尔。如果包含塊的主尺寸未定義(即父容器的主尺寸取決于子元素)呐舔,則計(jì)算結(jié)果和設(shè)為auto一樣。
舉一個(gè)不同的值之間的區(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
各項(xiàng)目最終寬度為:
- item-1 = 0% + 120px = 120px- item-2 = auto + 120px = 220px- item-3 = 200px + 60px = 260px
當(dāng) item-1 基準(zhǔn)值取 0% 的時(shí)候流炕,是把該項(xiàng)目視為零尺寸的澎现,故即便聲明其尺寸為 140px,也并沒有什么用每辟,形同虛設(shè)
而 item-2 基準(zhǔn)值取auto的時(shí)候剑辫,根據(jù)規(guī)則基準(zhǔn)值使用值是主尺寸值即 100px,故這 100px 不會納入剩余空間
更多資料可以參考: