# flex 物件的子物件的寬度,在沒設定寬的時候是多少?
事實上,flex 物件的子物件寬度,是由該物件內容寬度決定
例如下面的例子,將子項目 font-size 設定 20px
 項目 a、b、c 分別是五個字、三個字、七個字
此時呈現結果將會是
- a 的寬度為 5 x 20 = 100px
- b 的寬度為 3 x 20 = 60px
- c 的寬度為 7 x 20 = 140px
| .flex { | |
| width: 1000px; | |
| height: 300px; | |
| background-color: #ccc; | |
| display: flex; | |
| } | |
| .item { | |
| font-size: 20px; | |
| } | |
| .a { | |
| background-color: #cfa; | |
| } | |
| .b { | |
| background-color: #fac; | |
| } | |
| .c { | |
| background-color: #deb; | |
| } | 
| <div class="flex"> | |
| <div class="item a">一二三四五</div> | |
| <div class="item b">一二三</div> | |
| <div class="item c">一二三四五六七</div> | |
| </div> | 
# 子物件內容寬度超過父層 flex 寬度
這種情況下,子物件就會出現 flex-shrink 的效果,而每個子物件的 flex-shrink 值預設為 1
 這也是 flex 設定下去,子物件不管放幾個,資料不管怎麼樣都會被限制在父層容器的主要原因
有趣的來了,綜合一開始所說的,flex 物件的子物件內容寬為自身寬度
但每個子物件的寬度加起來已經超過了父層寬度,子物件又會被限制的情況下
子物件就會依照比例與公式去計算出自身的寬度
計算步驟如下
- 
收縮比 = flex-shink 的值 
- 
計算總比寬 
 假設父層寬度為 1000px,子物件 A、B、C 分別是 600px、1000px、600px總比值 = (子項目A x 收縮比A) + (子項目B x 收縮比B) + (子項目C x 收縮比C)(600 x 1) + (1000 x 1) + (600 x 1) = 2200 
- 
計算超出寬 超出寬 = 總比值 - 父層寬度2200 - 1000 = 1200 
- 
計算出每個子物件扣除寬 子物件扣除寬 = (子項目寬 x 收縮比) / (總比值 x 超出寬)(600 x 1) / (2200 x 1200) = 327.2727272727 (1000 x 1) / (2200 x 1200) = 545.4545454545 (600 x 1) / (2200 x 1200) = 327.2727272727 
- 
計算出子項目實際佔寬 子項目實際寬度 = 子項目寬度 - 子物件扣除寬600 - 327.2727272727 = 272.7272727273 1000 - 545.4545454545 = 454.5454545455 600 - 327.2727272727 = 272.7272727273 
