異なる画像サイズを一定サイズのカードで表示したい。元画像をそのまま指定したheight, widthで表示した場合、縦長、横長の画像は圧縮されてしまう。どうしたら良いか。
昔、先輩に教わったのだが、システムでは表示する際にデータを装飾することはあっても、基本的に元データそのものを加工・変更してはいけない。
ということで、表示を揃えるためにアップロードした画像をサーバーサイド側で切り抜くのは気が引けていた。
少し調べたら、CSSのobject-fitでアスペクト比を維持したまま処理できるらしい。
contain: アスペクト比を維持したままボックスに収まるよう拡大縮小
cover: アスペクト比を維持したまま、コンテンツボックスを埋めるよう拡大縮小
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
.contain img {
width: 200px;
height: 150px;
object-fit: contain;
}
.cover img {
width: 200px;
height: 150px;
object-fit: cover;
}
.fill img {
width: 200px;
height: 150px;
object-fit: fill;
}
</style>
</head>
<body>
<div class="contain">
<img src="img/bridge1.jpg"><br>
<img src="img/bridge2.jpg">
</div>
<br>
<div class="cover">
<img src="img/bridge1.jpg"><br>
<img src="img/bridge2.jpg">
</div>
<br>
<div class="fill">
<img src="img/bridge1.jpg"><br>
<img src="img/bridge2.jpg">
</div>
<script>
</script>
</body>
</html>

coverだと、画像が切れる恐れがあるから、containが一番しっくり来るな。