[CSS]JavaScriptを使わずに、Pinterest風レイアウトにするスタイルシートのテクニック

昨日はJavaScriptを使ってPinterest風レイアウトを実現するスクリプトを紹介しましたが、今日はJavaScript無しでスタイルシートで実現するテクニックを紹介します。

サイトのキャプチャ

CSS-Only Pinterest Style Columns Layout

デモ

デモでは画像とテキストを配置した高さの異なるパネルが、天地左右同じマージンでレンガ状に配置されています。

デモのキャプチャ

デモページ:幅1200pxで表示

レスポンシブ レイアウトにも対応しており、ブレイクポイントは960px, 1100pxの二つです。

デモのキャプチャ

デモページ:幅900pxで表示

パネルのホバー時には、美しいアニメーションのエフェクトも。

デモのキャプチャ

デモページ:幅900pxで表示

実装

HTML

HTMLは非常にシンプルで、各パネルをdiv要素で実装し、それらをdiv要素で二重に内包します。

<div id="wrapper">
	<div id="columns">
		<div class="pin">
			<img src="image.png" />
			<p>テキスト</p>
		</div>
		<div class="pin">
			<img src="image.png" />
			<p>テキスト</p>
		</div>
		...
		...
	</div>
</div>

CSS

Pinterest風レイアウトをCSSで実現するには、二つの方法が考えられます。
一つ目はfloatの使用、しかしこれは各パネルが同じ高さの場合に限定されます。二つ目はここで使用しているCSS3 Columns、高さの異なる各パネルに均一の溝を与えて配置します。

body {
	background: url(http://subtlepatterns.com/patterns/scribble_light.png) ;
}

#wrapper {
	width: 90%;
	max-width: 1100px;
	min-width: 800px;
	margin: 50px auto;
}

#columns {
	-webkit-column-count: 3;
	-webkit-column-gap: 10px;
	-webkit-column-fill: auto;
	-moz-column-count: 3;
	-moz-column-gap: 10px;
	-moz-column-fill: auto;
	column-count: 3;
	column-gap: 15px;
	column-fill: auto;
}

.pin {
	display: inline-block;
	background: #FEFEFE;
	border: 2px solid #FAFAFA;
	box-shadow: 0 1px 2px rgba(34, 25, 25, 0.4);
	margin: 0 2px 15px;
	-webkit-column-break-inside: avoid;
	-moz-column-break-inside: avoid;
	column-break-inside: avoid;
	padding: 15px;
	padding-bottom: 5px;
	background: -webkit-linear-gradient(45deg, #FFF, #F9F9F9);
	opacity: 1;
	
	-webkit-transition: all .2s ease;
	-moz-transition: all .2s ease;
	-o-transition: all .2s ease;
	transition: all .2s ease;
}

.pin img {
	width: 100%;
	border-bottom: 1px solid #ccc;
	padding-bottom: 15px;
	margin-bottom: 5px;
}

.pin p {
	font: 12px/18px Arial, sans-serif;
	color: #333;
	margin: 0;
}

@media (min-width: 960px) {
	#columns {
		-webkit-column-count: 4;
		-moz-column-count: 4;
		column-count: 4;
	}
}

@media (min-width: 1100px) {
	#columns {
		-webkit-column-count: 5;
		-moz-column-count: 5;
		column-count: 5;
	}
}

#columns:hover .pin:not(:hover) {
	opacity: 0.4;
}

top of page

©2017 coliss