【グリッドレイアウト】カード型レイアウトをCSSのみで簡単作成

2020年7月25日 (更新日:2020年7月25日)

【グリッドレイアウト】カード型レイアウトをCSSのみで簡単作成:【グリッドレイアウト】ピンタレスト風カー...


【グリッドレイアウト】ピンタレスト風カード型レイアウトをCSSのみで簡単作成

Pinterestで代表されるレイアウトとしてカード型のグリッドレイアウトがあります。
このレイアウトはタイル状に敷き詰めてレイアウトする方法はfloatは勿論、flexboxでも特殊なやり方をしなければならないCSSでは難しいレイアウト方法です。
手っ取り早いのはJavaScriptを使った方法で有名なのはMasonryライブラリを用いた方法ですが、ライブラリの読み込みに時間がかかったり、CSSのカスタマイズが難しかったりします。
そこでCSSマルチカラムレイアウト・モジュールを使って簡単にカード型レイアウトを実現してみたいと思います。
あとflexboxを使った特殊な方法はこちらです。

【webデザイン CSS】flexboxでPinterest風カード型レイアウト

HTMLコーディング

まずHTMLで概要としては

<main>
<div>
<h4>画像</h4>
<h3>見出し</h3>
<p>本文</p>
</div>
</main>

というmainタグの中に1カードとしてdivタグを用意します。
このdivタグを複数用意し親要素であるmainタグにマルチカラムレイアウトを適用させます。
使用するのはcolumnプロパティです。

CSSコーディング

CSSでは3種類のレイアウトモジュールがあります。それがflex、grid、columnの3つになります。
カード型のレイアウトにはその中でもcolumnが一番合っていると思います。

main{
	column-count: 5;
	column-gap: 20px;
}

column-countは段落数になります。
5段落にしています。
column-gapは段落と段落の間隔になります。
20pxの間隔にしています。

マルチカラムレイアウト

設定してみると仕様ではありますが途中でぶった斬れます。
いい感じでタイル状に詰めてレイアウトされていますので後は途中でぶった斬れないよう設定してみます。

main div{
	break-inside: avoid;
}

子要素であるdivタグに途中切れないようにbreak-insideプロパティを設定します。
値はavoidになります。

マルチカラムレイアウト

上手くいきました。
設定はこれだけになります。
簡単ですよね。
後はレスポンシブにしてみます。

See the Pen multicolumn layout by tatsuya☆ラボラトリ【 tatsuya-lab.com 】 (@labtatsuya) on CodePen.

あまりにも簡単でしたので欲が出てきました。
最初のカラムだけ2つ分カラム使って後は1カラムにしてみたいと思います。
何か関連するプロパティはないかと探したらcolumn-spanがありました。
しかし値がallしかありません。

main div:first-of-type{
	column-span: all;
}

結果、こんなん出ました。

マルチカラムレイアウト

思ってたのと違います。

column-countを使ってやってみます。
まずmainタグの子要素をdivタグとsectionにします。
そしてsectionタグの中にdivタグのカードをまとめます。

	main div{
		break-inside: avoid;
	}
	main section{
		column-count: 2;
		margin-bottom: 20px;
	}

	main{
		column-count: 3;
	}
マルチカラムレイアウト

できました。

See the Pen Multi-Column Layout 2 by tatsuya☆ラボラトリ【 tatsuya-lab.com 】 (@labtatsuya) on CodePen.