画像とテキストなどを横並びにするデザインはよくあると思いますが、Flexboxで横並びにして要素の幅を指定した時、指定した幅より狭く縮んでしまったことはありませんか?
これはちゃんと理由があり、CSSで1行追加すれば解説します。
今回はその原因と解決方法を解説します。
(有料になっていたらすいません🙇♂️)
Flexboxで画像や要素が小さく潰れる(縮む)時の対処方法
まずこちらは画像が小さくなってしまった例です。
See the Pen
Untitled by junpei (@junpei-sugiyama)
on CodePen.
画像は幅200pxに指定していますが、それより小さくなっています(左上のHTML・CSSをクリックするともっと小さくなります)
そしてこちらが小さくならないようにした方です。
See the Pen
Untitled by junpei (@junpei-sugiyama)
on CodePen.
今度は指定した幅200pxになっていて、左上のHTML・CSSをクリックして画面幅を狭くしても200pxのままです。
解決方法
最初に解決方法ですが、小さくなってしまう要素に以下の1行を追加するだけです。
.profile-img {
flex-shrink: 0; /* これを追加 */
width: 200px;
}
要素が小さくなる原因
先ほどflex-shrink: 0;
を書きましたが、初期値はflex-shrink: 1;
になります。
flex-shrink: 1;
は子要素の幅を指定しても、親要素をはみ出ないように自動で縮小してくれます。
逆にflex-shrink: 0;
にすると、幅を指定した子要素は親要素の幅より大きいとはみ出してしまいます。
こちらで見比べてみると分かると思います。
See the Pen
Untitled by junpei (@junpei-sugiyama)
on CodePen.
親要素の幅は300pxで、子要素はそれぞれ120〜40pxにしています。
1つ目は初期値のflex-shrink: 1;
なので、親要素に収まるかわりに全て小さくなっています。
2つ目は子要素すべてflex-shrink: 0;
にしているので、合計400pxとなって100pxはみ出ています。
3つ目は1つ目の子要素だけflex-shrink: 0;
にしているので、1つ目の子要素だけ小さくならず、その分ほかの子要素がさらに小さくなっています。
このようにflex-shrink
の値によって要素は伸縮するので注意しましょう。
まとめ
今回はFlexboxで画像や要素が小さく潰れる(縮む)時の対処方法を解説してきました。
画像とテキストの横並びは非常によくあるデザインなので、地味ですがかなり使う機会は多いと思います。
以上になります。