【HTML】横幅が異なる画像を横に並べたい【CSS】

どうも、くまだです。

横幅が異なる画像を横にきれいに並べる方法です。

地味にハマったのでメモ。

横幅が異なる画像を横に並べる方法

例えば以下のような4つの画像を横に並べたい。

ロゴの大きさもテキストのフォントサイズも同じですが、ロゴとテキストが1枚の画像という場合。

画像サイズが異なる場合

↑は横幅揃ってますが、実際は画像の横幅はバラバラです。

パッと思いつく感じだと下記のようにflexboxで横に並べます。

 <div class="p-imgobx">
    <div class="c-img">
      <img src="test.png" alt="">
    </div>
    <div class="c-img">
      <img src="test2.png" alt="">
    </div>
    <div class="c-img">
      <img src="test3.png" alt="">
    </div>
    <div class="c-img">
      <img src="test4.png" alt="">
    </div>
  </div>
.p-imgobx {
	display: flex;
	flex-wrap: wrap;

}
.c-img {
	max-width: 180px;
	width: 100%;
	height: 100%;
	margin-top: 10px;
	margin-left: 10px;
	border: 1px solid #333;
}

.c-img img {
	width: 100%;
	height: auto;
	display: block;
}
画像を横に並べる

ただ横に並べるだけだったらこれでもいいんですが、ロゴの大きさをそろえたい。かといって、heightを100%にすると、

.c-img img {
	width: 100%;
	height: 100%;
	display: block;
}
横幅依存の場合

こんな感じで画像が縦に引き伸ばされてしまう。例えば画像の横幅をmax-widthで決めてしまうと、横長の画像のときに画像がつぶれてしまいます。できれば「画像の横幅依存」でそろえていきたい。

以下のように修正。画像の横幅100%を辞めて、高さを具体的に値を指定する。

.p-imgobx {
	display: flex;
	flex-wrap: wrap;

}
.c-img {
	height: 60px; /* 高さ指定 */
	margin-top: 10px;
	margin-left: 10px;
	border: 1px solid #333;

}

.c-img img {
	width: auto; /* autoに変更 */
	height: 100%;
  display: inline-block;
}
画像高さ調整

こんな感じで揃えることができました。

想定される状況としては、もしこの部分がWordPressで動的に出力させたい場合、画像の横幅が長いものが出るのか、横幅が短い画像が出るか分からない状況だと、うかつにmax-widthは使えない。(最初のほうでやった、画像の高さがそろわなくなる)

画像の高さを指定・横幅は画像依存にする形であれば、画像の横幅が長くても短くても対応できます。(高さに合わせて横幅がサイズ調整されるので)

なお、flexbox以外にGridも横に並べることはできますが、横幅が可変するような場合はGridはあまり得意ではありません。(一応Gridパターン↓)

.p-imgobx {
	display: grid;
	grid-template-columns: repeat(3, 1fr);

}

.c-img {
	width: 100%;
	height: 80px;
	border: 1px solid #333;

}

.c-img img {
	width: 100%;
	height: 100%;
  display: block;
}

画像引き伸ばし

画像が引き伸ばされたりします..。

Gridはパネルみたいな規則性があるものを並べるのは得意ですが、「横幅が可変するもの」を並べるのはあまり向いてないです。

ここまで読んでくださりありがとうございました。

この記事を書いた人