Responsive column masonry layout with CSS column count
Tutorial blog post here: http://codepen.io/ramenhog/post/an-exercise-in-css-masonry
<div class="masonry"> | |
<div class="item"> | |
<div class="item__content"> | |
</div> | |
</div> | |
<div class="item"> | |
<div class="item__content item__content--small"> | |
</div> | |
</div> | |
<div class="item"> | |
<div class="item__content item__content--medium"> | |
</div> | |
</div> | |
<div class="item"> | |
<div class="item__content item__content--small"> | |
</div> | |
</div> | |
<div class="item"> | |
<div class="item__content item__content--medium"> | |
</div> | |
</div> | |
<div class="item"> | |
<div class="item__content"> | |
</div> | |
</div> | |
<div class="item"> | |
<div class="item__content item__content--large"> | |
</div> | |
</div> | |
<div class="item"> | |
<div class="item__content item__content--medium"> | |
</div> | |
</div> | |
<div class="item"> | |
<div class="item__content item__content--small"> | |
</div> | |
</div> | |
<div class="item"> | |
<div class="item__content"> | |
</div> | |
</div> | |
<div class="item"> | |
<div class="item__content item__content--large"> | |
</div> | |
</div> | |
<div class="item"> | |
<div class="item__content"> | |
</div> | |
</div> | |
<div class="item"> | |
<div class="item__content item__content--small"> | |
</div> | |
</div> | |
<div class="item"> | |
<div class="item__content item__content--large"> | |
</div> | |
</div> | |
<div class="item"> | |
<div class="item__content item__content--medium"> | |
</div> | |
</div> | |
<div class="item"> | |
<div class="item__content item__content--small"> | |
</div> | |
</div> | |
<div class="item"> | |
<div class="item__content item__content--medium"> | |
</div> | |
</div> | |
<div class="item"> | |
<div class="item__content"> | |
</div> | |
</div> | |
<div class="item"> | |
<div class="item__content item__content--small"> | |
</div> | |
</div> | |
</div> |
Responsive column masonry layout with CSS column count
Tutorial blog post here: http://codepen.io/ramenhog/post/an-exercise-in-css-masonry
@import url('https://fonts.googleapis.com/css?family=PT+Mono'); | |
$bg: #4F000B; | |
$itemBg1: #720026; | |
$itemBg2: #CE4257; | |
$itemBg3: #FFC093; | |
$itemBg4: #FF7F51; | |
$counterBg: #222; | |
@mixin setColorAndHover($baseColor) { | |
color: $baseColor; | |
&:hover { | |
background: lighten($baseColor, 8%); | |
} | |
} | |
body, | |
html { | |
position: relative; | |
width: 100%; | |
height: 100%; | |
background: $bg; | |
font-family: "PT Mono", monospace; | |
} | |
.masonry { | |
column-count: 1; | |
column-gap: 0; | |
counter-reset: item-counter; | |
@media screen and (min-width: 400px) { | |
column-count: 2; | |
} | |
@media screen and (min-width: 600px) { | |
column-count: 3; | |
} | |
@media screen and (min-width: 800px) { | |
column-count: 4; | |
} | |
@media screen and (min-width: 1100px) { | |
column-count: 5; | |
} | |
} | |
.item { | |
box-sizing: border-box; | |
break-inside: avoid; | |
padding: 10px; | |
counter-increment: item-counter; | |
&__content { | |
position: relative; | |
display: flex; | |
flex-direction: column; | |
justify-content: center; | |
align-items: center; | |
height: 220px; | |
font-size: 40px; | |
color: darken($bg, 5%); | |
background: currentColor; | |
box-sizing: border-box; | |
@include setColorAndHover($itemBg1); | |
&:before { | |
position: absolute; | |
top: 0; | |
left: 0; | |
font-size: 13px; | |
width: 2em; | |
height: 2em; | |
line-height: 2em; | |
text-align: center; | |
font-weight: bold; | |
background-color: $counterBg; | |
content: counter(item-counter); | |
} | |
&:after { | |
color: darken($bg, 10%); | |
content: 'ಠ‿ಠ'; | |
} | |
&--small { | |
@include setColorAndHover($itemBg2); | |
height: 100px; | |
&:after { | |
content: '♥◡♥'; | |
} | |
} | |
&--medium { | |
@include setColorAndHover($itemBg3); | |
height: 175px; | |
&:after { | |
content: '◔ᴗ◔'; | |
} | |
} | |
&--large { | |
@include setColorAndHover($itemBg4); | |
height: 280px; | |
&:after { | |
content: 'ಠ_๏'; | |
} | |
} | |
} | |
} |