flex-shrinkがどのように調整されるかわかりません

flex-shrinkの計算ではflex-basisも考慮する必要があります。
2020年7月21日
ユーザー

flex-shrinkを使ってコードを試しに書いていた時に気付いた点を確認させてください。

クラスbox1~box5までの幅100pxのflex itemを5つ用意して、以下のCSSを記述しました。

.container {
  width: 440px;
  display: flex;
  flex-direction: row;
 }

.box1{
  flex-basis: 200px;
  flex-shrink: 2;
}
.box2{flex-shrink: 4;}
.box4{flex-shrink: 0;}

アイテム全体の幅が100*4+200=600px、コンテナの幅が440pxなので、超過している幅は160px。
これをbox1から順に2:4:1:0:1に割り振るので、各アイテムの幅は160px/20px/80px/100px/80pxとなるかと思いましたが、実際には136px/36px/84px/100px/84pxとなりました。

各アイテムの要素幅に対して係数がかかっている、即ち「box1にはflex-shrinkは2だけれど、幅が他の要素の2倍あるので、box1の割り振りの基準値は22=4となり、超過幅が22=4:4:1:0:1に割り振られた」という風に捉えたのですが、正しいでしょうか。

また、flex-growを使って逆のパターンを試したのですが、flex-growではアイテムの要素幅に関係なく、flex-growで設定された値のみを基準に割り振られているようです。こちらも理解があっているかどうか、またshrinkとgrowでどうして違いがあるのか、分かれば教えて頂きたいです。

よろしくお願いいたします。

この回答を見るにはプレミアムプランへの登録が必要です

プレミアムプランとは?