最近有個面試,面試官問到,在一個橫向佈局上,假設有三個div,每一個寬度爲定寬apx,若是想使兩側寬度爲x,中間div間間隔爲2x。x能夠自適應。以下圖:css
怎麼作很簡單,兩行代碼就搞定:css3
space-around:彈性盒子元素會平均地分佈在行裏,兩端保留子元素與子元素之間間距大小的一半。若是最左邊的剩餘空間是負數,或該行只有一個伸縮盒項目,則該值等效於'center'。在其它狀況下,伸縮盒項目則平均分佈,並確保兩兩之間的空白空間相等,同時第一個元素前的空間以及最後一個元素後的空間爲其餘空白空間的一半。如一圖。面試
說到這其實都是廢話,這些都是flex佈局初始學習就會接觸到的。主要是這個面試官又問,若是中間不是2x,是x呢,也就是每一個間隙與兩側的間隔相同。也就是這樣:佈局
這個問題我一開始想的是兩側設置padding,中間用justify-content: space-between;但是這樣在不一樣的屏幕上看到的兩側padding值確定是不一樣的,因此中間的間隙與兩側就不想等了。。。因此最後我也沒想出來。回來以後發現justify-content竟然還有space-evenly這麼個屬性!這個屬性幹嗎用的不言而喻。均勻排列每一個元素,每一個元素之間的間隔相等。上題就解決了。可是space-evenly的兼容性比起經常使用的justify-content值來講仍是要差很多。學習
咱們不能只知足與解決一道面試題,再實際狀況下可能會有不少奇葩的狀況,好比說上圖4個x改爲3個x,一個2x(雖然我是歷來沒見過這種奇葩的設計。。)那又該怎麼辦呢?flex
這裏我想到了css3的cacl(),這玩意兒百分比,px值混搭都能計算,強的一批。好比實現上面的要求:spa
也同樣能夠達到效果。(假設a的值爲100px)並且無論是什麼狀況均可以計算出你想要的大小,簡直不要太爽。設計
但是,cacl()雖然兼容性比起space-evenly要好一點。以下圖:blog
咱們仍是看到Android Browser仍是隻有部分支持。因此cacl()在移動端仍是要慎用。兼容性
最後還請大佬有什麼便可以達到目的又有很好兼容性的辦法還望不吝賜教。嘿嘿。