HTML/CSS

レスポンシブな画像表示

px、%、vw、vh、em、remなどの単位はwidthや heightなどの全てに使えます。
中でもひっかかりやすいvw、vh、%を使って、歪ませない&レスポンシブな画像表示を考えていきましょう。

vw、vh

ブラウザのウィンドウサイズを100としたパーセンテージ。
100vw=ウィンドウの幅
100vh=ウィンドウの高さ

vwはwidth専用、vhはheight専用の単位と思われがちですが、どれにでも使えます。
むしろ、
.hoge{
width:100vw
height:50vw
}
と単位を揃えれば、ボックスの縦横比を保ったまま拡大縮小できて便利です。

%の使い方に注意

もととなる基準が違います。

widthでの%

親のコンテンツ(padding,borderを含まない)を100とする

heightでの%

親のコンテンツ(padding,borderを含まない)を100とする
ただし、親に明確なheightが設定されている必要がある

padding,marginでの%

親のコンテンツ(padding,borderを含まない)を100とする
上下のpaddingやmarginも、親のコンテンツが基準になる点に注意。

画像を歪ませない方法

デモ

https://blog.picnico.design/sample/gazou-hiritsu.html

(1)縦横比を保って画像全体を表示させる場合

基本的にはimgタグにheightは設定しません。widthのみ指定します(場合によってはheightのみ)。
片方だけ設定し、もう片方をauto(初期値)にしておくことで、比が保たれたまま画像が表示できます。ただし、widthを%やvwで指定していると、大きなPCなどで見たときに画像が大きくなりすぎることがあります。

(2)縦横比を保って画像の一部をトリミングする場合

MVなどで、先程の問題『幅は100vwにしたいんだけど、高さをautoにすると、大きなPCで見たときに高さでかくなりすぎるので縦はトリミングしたい』が発生したとき。

2−1.背景画像にする

div{
width: 100vw;
height:500px; ←親の高さ固定しちゃう(height書かないと潰れる)
background: url(ichigo.jpg) center center/cover;
}

2−2.object-fitを使う

IE非対応。ただしもうIEはサポート終わってるので使っていいと思います。案件次第。

img{
width: 100vw;
height:500px; ←img自体の高さ固定しちゃう
object-fit:cover;
object-position:center center;(デフォルトで中心にくる)
}

https://developer.mozilla.org/ja/docs/Web/CSS/object-fit

max-○○を使ってよりレスポンシブにする

先程までのheight500pxだとスマホでは縦長サイズになるので、heightと max-heightを併記するとよい。

width:100vw;
height:400px;
max-height:50vw;
bg:url(パス) center center/cover;