---
tags: CSS, 六角筆記王
title: CSS - 跑版了嗎? 試著調整 flex-shrink / basis / grow
---
# CSS - flex-grow / shrink / basis
手刻版型或使用套件並修改 CSS 時,可能會遇到這個問題,明明已經設定了 `display: flex;`,為什麼內容被壓縮或者跑版了?
當我們將網頁元素設定成 `display: flex;`,這時會有這三個預設屬性 :
- `flex-grow`
- `flex-shrink`
- `flex-basis`
- 可以縮寫成 `flex: 1 0 200px;`,分別為上述三點由上至下
以下分別筆記它們會有怎樣的特性。
## flex-grow
> `flex-grow` 預設為 0,將剩餘空間平均分配。
範例設定容器寬為 500px,預設 box 為 100px,當元素被設定了 `flex-grow`,它會**將剩餘空間平均分配給該元素**。
- 情況一,當 box 元素加上 flex-grow-1 時
- 會將該元素設定為 `flex-grow: 1;`,意義為平均分配 1 等份
- 剩餘空間為 200px,平均分配 1 等份
- box 1 的寬度就會變成 100px + 200px = 300px
- 情況二,若在同層有多個元素都有被設定 flex-grow-1 時,範例有兩個元素被設定
- 剩餘空間為 200px,會變成平均分配 2 等份
- 被設定的元素寬度就會變成 100px + 100px = 200px
<iframe height="300" style="width: 100%;" scrolling="no" title="flex-grow" src="https://codepen.io/hsuan333/embed/KKmBRQL?default-tab=html%2Cresult" frameborder="no" loading="lazy" allowtransparency="true" allowfullscreen="true">
See the Pen <a href="https://codepen.io/hsuan333/pen/KKmBRQL">
flex-grow</a> by Vic (<a href="https://codepen.io/hsuan333">@hsuan333</a>)
on <a href="https://codepen.io">CodePen</a>.
</iframe>
---
## flex-shrink
> `flex-shrink` 預設為 1,超出範圍時,等比例壓縮
範例將 box 設定為寬度 200px,放在 500px 的容器裡,因為 `flex-shrink` 預設為 1,所以元素會被壓縮成約 166px,若都設定為 0,則會破版。
<iframe height="300" style="width: 100%;" scrolling="no" title="flex-shrink" src="https://codepen.io/hsuan333/embed/GRmBdQx?default-tab=html%2Cresult" frameborder="no" loading="lazy" allowtransparency="true" allowfullscreen="true">
See the Pen <a href="https://codepen.io/hsuan333/pen/GRmBdQx">
flex-shrink</a> by Vic (<a href="https://codepen.io/hsuan333">@hsuan333</a>)
on <a href="https://codepen.io">CodePen</a>.
</iframe>
---
會將這個 CSS 屬性寫成筆記,也是下面的例子,在有限的容器寬度中,加上 `display: flex;`,造成圖片被壓縮,所以將它設定為 0,就會恢復。
<iframe height="300" style="width: 100%;" scrolling="no" title="d-flex 被壓縮處理方式 - flex-shrink" src="https://codepen.io/hsuan333/embed/WNjyJeY?default-tab=html%2Cresult" frameborder="no" loading="lazy" allowtransparency="true" allowfullscreen="true">
See the Pen <a href="https://codepen.io/hsuan333/pen/WNjyJeY">
d-flex 被壓縮處理方式 - flex-shrink</a> by Vic (<a href="https://codepen.io/hsuan333">@hsuan333</a>)
on <a href="https://codepen.io">CodePen</a>.
</iframe>
---
## flex-basis
> flex-basis 預設為 auto,若有設定數值,則以此屬性為優先,覆蓋原有寬度。
範例容器一樣為 500px,box 2 設定為 `flex-basis: 300;`,這時 box 2 的寬度就會從原本的 100px 變為成 300px。
<iframe height="300" style="width: 100%;" scrolling="no" title="flex-grow" src="https://codepen.io/hsuan333/embed/ZEKjoxE?default-tab=html%2Cresult" frameborder="no" loading="lazy" allowtransparency="true" allowfullscreen="true">
See the Pen <a href="https://codepen.io/hsuan333/pen/ZEKjoxE">
flex-grow</a> by Vic (<a href="https://codepen.io/hsuan333">@hsuan333</a>)
on <a href="https://codepen.io">CodePen</a>.
</iframe>
## 參考來源
> 1. [Lai - Day24 Flex 空間分配 flex-grow / flex-shrink / flex-basis](https://ithelp.ithome.com.tw/articles/10208741)