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