↔️

flex-growとflex-shrinkの違い

に公開

みなさん、こんにちは🐒
Flexboxレイアウトを活用しまくっているおさるです。
この間、友人からCSSプロパティのflex-growflex-shrinkの違いについて質問されたので、せっかくなので記事にしてみます...笑

⚖️ それぞれの概要

flex-grow拡張の割合flex-shrink縮小の割合と、それぞれ指定できるものが違います。

プロパティ 余白があるとき 子要素たちが親要素より大きすぎるとき
flex-grow 拡張の割合を決める 影響しない
flex-shrink 影響しない 縮小の割合を決める

✅ 実際の使い分け

使用シーン 定義するプロパティ
余白を等分したい flex-growを定義(例: 1
余白は分けたくないが、はみ出たら縮めたい flex-shrinkを定義(例: 1
固定サイズで動かしたくない 両方0にする
flex: 0 0 auto;のように一括指定可能!)

👀 サンプル

説明してきたものの、文面だけではよくわからないと思うのでCodePenでサンプルをご用意しました!

flex-growの例

親要素(.grow-container)ではwidth: 100%に、
小要素(.box)ではそれぞれ適切なflex-growを定義しています。

拡張量 = 余白量 × (各要素の grow 値 ÷ 合計 grow 値)

という計算で拡張されています。
flex-growの値が他の要素より大きければ大きいほど拡張されるということです!

flex-shrinkの例

親要素(.grow-container)ではwidth: 100%に、
小要素(.box)ではそれぞれ適切なflex-shrinkを定義しています。

縮小量 = オーバー量 × ((shrink値 × 基準幅) ÷ 合計(shrink値 × 基準幅))

という計算で縮小されています。
flex-shrinkの値が他の要素より大きければ大きいほど縮小されるということです!

📚 まとめ

  • flex-grow余白がある時にどれだけ拡張するか
  • flex-shrinkスペース不足の時にどれだけ縮むか

Flexboxの力を最大限引き出すには、この2つの性質をうまく使い分けるのがカギ!💡

今回紹介した flex-grow と flex-shrink の関係性や計算ルールを理解しておけば、意図したレイアウトを安定して作ることができます!
それでは、より快適なFlexライフを〜🐒✨

Discussion