利用postcss進行css代碼的向後兼容時,display:flex兼容後的代碼常會帶有display:-webkit-box。
部分移動端內核較低,只支持老版本的box佈局,不支持flex佈局。
box佈局是flex佈局的前身,與float不一樣,float超出邊界時會自動換行,box和flex不會。css
注:四、5中是相對於主軸和側軸,並不是固定是X軸仍是y軸 web
基本概念可參考一勞永逸的搞定 flex 佈局,大部分屬性規則都不復雜,參考下圖使用便可。須要注意的屬性是flex-grow和flex-shrink。
佈局
flex-grow的做用: 當主軸方向存在富餘空間時,將富餘空間賦予對應item
flex-grow默認值: 0
flex-grow觸發條件: 主軸方向存在富餘空間
flex-grow對於富餘空間計算: 富餘空間根據flex-grow數值進行分配
例:
假設content寬度爲600px,flex佈局,其內部有4個item,item初始寬度分別爲50px、100px、150px、200px。
第1個item的flex-grow:4;
第4個item的flex-grow:1;
Q:求4個item的寬度分別爲多少?
解:post
富餘 = 600px - (50+100+150+200)px = 100px
單位flex-grow寬度 = 富餘/(flex-grow總和) = 100px/(4+1) =20px
第1個item寬度 = 初始寬度 + 單位flex-grow寬度*flex值 = 50px + 20px*4 = 130px
第4個item寬度 = 初始寬度 + 單位flex-grow寬度*flex值 = 200px + 20px*1 = 220px
所以,4個item寬度分別爲130px、100px、150px、220px。可查看實例flex
flex-shrink的做用: 當容器flex-wrap爲nowrap,且item初始寬度之和大於容器寬度時,容器會對其中的item進行壓縮,flex-shrink決定壓縮時的規則。
flex-shrink默認值: 1
flex-shrink觸發條件:容器寬度不夠,須要壓縮內容顯示
flex-shrink計算方式:spa
注:當item中有內容時,item被壓縮的最小寬度爲內容寬度3d
例:假設content寬度爲300px,flex佈局,其內部有4個item,item初始寬度分別爲50px、100px、150px、200px。
Q1:4個item實際顯示的寬度爲多少?
item1的flex-shrink設爲10;
item4的flex-shrink設爲5;
Q2: 4個item的寬度分別爲多少?
解:
Q1:code
壓縮 = (50+100+150+200)px - 300px = 200px
4個item寬度比爲1:2:3:4,初始flex-shrink爲1
單位權重寬度 = 200px/(1*1+2*1+3*1+4*1) = 20px
第1個item寬度 = 初始寬度 - 單位權重寬度*權重 = 50px - 20px*1*1 = 30px
第2個item寬度 = 初始寬度 - 單位權重寬度*權重 = 100px - 20px*2*1 = 60px
第3個item寬度 = 初始寬度 - 單位權重寬度*權重 = 150px - 20px*3*1 = 90px
第4個item寬度 = 初始寬度 - 單位權重寬度*權重 = 200px - 20px*4*1 = 120px
因爲步驟2計算的item寬度都大於等於0,所以不須要從新計算
所以,4個item寬度分別爲 30px、60px、90px、120px。orm
Q2:blog
壓縮 = (50+100+150+200)px - 300px = 200px
4個item寬度比爲1:2:3:4,item一、item4的flex-shrink分別爲十、5,其他flex-shrink爲1
單位權重寬度 = 200px/(1*10+2*1+3*1+4*5) = 40/7px
第1個item寬度 = 初始寬度 - 單位權重寬度*權重 = 50px - 40/7px*1*10 = -7.14px
因爲第1個item計算後的寬度爲-7.14px<0,所以須要從新分配壓縮空間
因爲上一步中item1寬度小於0,將item1寬度看成0,從新計算壓縮空間寬度
壓縮 = (100+150+200)px - 300px = 150px
單位權重寬度 = 150px/(2*1+3*1+4*5) = 6px
第1個item寬度 = 0
第2個item寬度 = 初始寬度 - 單位權重寬度*權重 = 100px - 6px*2*1 = 88px
第3個item寬度 = 初始寬度 - 單位權重寬度*權重 = 150px - 6px*3*1 = 132px
第4個item寬度 = 初始寬度 - 單位權重寬度*權重 = 200px - 6px*4*5 = 80px
因爲步驟5計算的寬度都大於等於0,所以不須要從新計算
所以,4個item寬度分別爲 0、88px、132px、80px。可查看實例注意:給item添加文字後,寬度沒法壓縮爲0,壓縮空間計算將更爲複雜。