[CSS]JavaScriptを使わずに、Pinterest風レイアウトにするスタイルシートのテクニック
Post on:2012年8月23日
sponsorsr
昨日は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;
}
sponsors











