前一陣在使用flex佈局進行寬度處理時,發現了flex-grow並非按照預期的狀況進行比例處理,頓時以爲有點懵逼。css
在stackoverflow
搜索以後,終於搞明白了其中的奧祕。html
話很少說,直接上代碼:佈局
.flex-container { display: flex; width: 100%; } .flex-item { flex-grow: 1; list-style-type: none; } .big { flex-grow: 3; }
<ul class="flex-container"> <li class="flex-item big">理論應該是小的三倍長</li> <li class="flex-item">但實際並非這樣</li> </ul>
咱們參照阮一峯的flex教程就能夠看到對於這個屬性的解釋:flex
flex-grow
屬性定義項目的放大比例,默認爲0,即若是存在剩餘空間,也不放大code若是全部項目的
flex-grow
屬性都爲1,則它們將等分剩餘空間(若是有的話)。若是一個項目的flex-grow
屬性爲2,其餘項目都爲1,則前者佔據的剩餘空間將比其餘項多一倍。htm
按照正常理解咱們的代碼沒有問題啊,怎麼比例並非設置的那樣呢?blog
重點來了,這裏的剩餘空間纔是關鍵。
對於一個flex-item
來講,它的初始空間並非0,而是另外一個屬性值auto
(元素內容佔用的空間)。教程
這樣就致使了咱們設置了flex-grow
的效果並非將整個寬度進行等比例的拆分,而是對去除內容的寬度進行了比例劃分。文檔
而若是想要打到咱們實際所想的效果,咱們就須要使用flex
屬性來代替原來的。
由於根據MDN文檔的描述,咱們就知道了get
flex
規定了彈性元素如何伸長或縮短以適應flex容器中的可用空間。這是一個簡寫屬性,能夠同時設置flex-grow
,flex-shrink
與flex-basis
。
這樣咱們使用flex
時只指定一個數字(寬度值會轉化成flex-basis
)時,flex-basis
會自動轉換爲0%
,而數字正好轉換成了要設置的比例(flex-grow
值)。
因而修改css代碼以下:
.flex-item { flex: 1; } .big { flex: 3; }
這樣設置的比例就如咱們所願的顯示出來了。