Simple CSS3 Masonry Grid , which can be used to create image gallery or to display posts grid wih no Javascript
A Pen by Hyyan Abo Fakher on CodePen.
Simple CSS3 Masonry Grid , which can be used to create image gallery or to display posts grid wih no Javascript
A Pen by Hyyan Abo Fakher on CodePen.
| <html> | |
| <head> | |
| <meta charset="utf-8"> | |
| <meta http-equiv="X-UA-Compatible" content="IE=edge"> | |
| <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| <title>CSS3 Masonry Grid</title> | |
| </head> | |
| <body> | |
| <section id="masonry" class="masonry"> | |
| <!-- template | |
| <figure> | |
| <img src="..." /> | |
| <figcaption> | |
| <div class="title"></div> | |
| <div class="category"></div> | |
| </figcaption> | |
| </figure> | |
| --> | |
| </section> | |
| </body> | |
| </html> |
| (function() { | |
| var mas = document.querySelector('#masonry'); | |
| for (var x = 0; x < 30; x++) { | |
| var w = Math.floor(Math.random() * (800 - 400 + 1)) + 400; | |
| var h = Math.floor(Math.random() * (800 - 400 + 1)) + 400; | |
| var price = Math.floor(Math.random() * (1500) + 1); | |
| var src = 'http://lorempixel.com/' + w + '/' + h + '/food/'; | |
| var category = 'CSS3 '; | |
| var title = 'CSS3 Masonry Grid'; | |
| var content = '<figure>' + | |
| '<img src="' + src + '" />' + | |
| '<figcaption>' + | |
| '<div class="price">' + price + '€</div>' + | |
| '<div class="info">' + | |
| '<div class="category">' + category + '</div>' + | |
| '<div class="title">' + title + '</div>' + | |
| '</div>' + | |
| '</figcaption>' + | |
| '</figure>'; | |
| mas.innerHTML = mas.innerHTML + content; | |
| } | |
| })(); |
| /// Mixin to prefix several properties at once | |
| /// @author Hugo Giraudel | |
| /// @param {Map} $declarations - Declarations to prefix | |
| /// @param {List} $prefixes (()) - List of prefixes to print | |
| @mixin prefix($declarations, $prefixes: ()) { | |
| @each $property, $value in $declarations { | |
| @each $prefix in $prefixes { | |
| #{'-' + $prefix + '-' + $property}: $value; | |
| } | |
| // Output standard non-prefixed declaration | |
| #{$property}: $value; | |
| } | |
| } | |
| $masonry-border-color: #673AB7; | |
| $masonry-border-color-hover: #E91E63; | |
| $masonry-caption-bg: #000; | |
| $masonry-caption-category-color: #90A4AE; | |
| $masonry-caption-title-color: #fff; | |
| $masonry-caption-price-color: #fff; | |
| @keyframes "fadeIn" { | |
| from { | |
| opacity: 0; | |
| } | |
| to { | |
| opacity: 1; | |
| } | |
| } | |
| @-webkit-keyframes "fadeIn" { | |
| from { | |
| opacity: 0; | |
| } | |
| to { | |
| opacity: 1; | |
| } | |
| } | |
| @-moz-keyframes "fadeIn" { | |
| from { | |
| opacity: 0; | |
| } | |
| to { | |
| opacity: 1; | |
| } | |
| } | |
| body{ | |
| margin: 0; | |
| padding: 0; | |
| background : #2e3141 | |
| } | |
| .masonry { | |
| position: relative; | |
| width: 100%; | |
| min-height: 1200px; | |
| overflow: hidden; | |
| @include prefix(( | |
| column-count: 4, | |
| column-gap: 0, | |
| box-sizing: border-box, | |
| animation: fadeIn 500ms linear | |
| ), webkit moz ms o); | |
| & , & * { | |
| // fix css3 flickering | |
| @include prefix(( | |
| transform: translate3d(0,0,0), | |
| backface-visibility: hidden | |
| ), webkit moz ms o); | |
| } | |
| figure { | |
| position: relative; | |
| display: block; | |
| padding: 0; | |
| margin: 0; | |
| width: 100%; | |
| overflow: hidden; | |
| cursor: auto; | |
| @include prefix(( | |
| box-sizing: border-box | |
| ), webkit moz ms o); | |
| &::before { | |
| content: ''; | |
| position: absolute; | |
| bottom: 0px; | |
| width: 100%; | |
| height: 25px; | |
| z-index: 1000; | |
| border-bottom: 8px solid $masonry-border-color; | |
| @include prefix(( | |
| transition: 1s ease, | |
| transform: translate3d(0,0,0), | |
| backface-visibility: hidden | |
| ), webkit moz ms o); | |
| } | |
| &:hover { | |
| &::before { | |
| border-color: $masonry-border-color-hover; | |
| } | |
| img { | |
| opacity: 1; | |
| @include prefix(( | |
| transform: scale(1.2) | |
| ), webkit moz ms o); | |
| } | |
| figcaption { | |
| bottom: 0; | |
| } | |
| } | |
| img { | |
| display: block; | |
| width: 100%; | |
| height: 200%; | |
| opacity: .9; | |
| @include prefix(( | |
| transform: scale(1), | |
| transition: transform 500ms | |
| ), webkit moz ms o); | |
| } | |
| figcaption { | |
| display: block; | |
| position: absolute; | |
| bottom: 0; | |
| left: 0; | |
| right: 0; | |
| height: 100%; | |
| padding: 2%; | |
| opacity: .7; | |
| @include prefix(( | |
| box-sizing: border-box, | |
| transition: "bottom 500ms,border-bottom-color 500ms" | |
| ), webkit moz ms o); | |
| background: $masonry-caption-bg; | |
| background: -webkit-linear-gradient(transparent, $masonry-caption-bg); | |
| background: -o-linear-gradient(transparent, $masonry-caption-bg); | |
| background: -moz-linear-gradient(transparent, $masonry-caption-bg); | |
| background: linear-gradient(transparent, $masonry-caption-bg); | |
| .price , .info { | |
| position: absolute; | |
| bottom: 4%; | |
| } | |
| .price { | |
| right: 2%; | |
| font-size: 2.5vw; | |
| color: $masonry-caption-price-color; | |
| } | |
| .info { | |
| left: 2%; | |
| .title { | |
| a { | |
| text-decoration: none !important; | |
| } | |
| font-weight: bolder; | |
| font-size: 1.5vw; | |
| color: $masonry-caption-title-color; | |
| } | |
| .category { | |
| color: $masonry-caption-category-color; | |
| } | |
| } | |
| } | |
| } | |
| } | |
| /*========== Mobile First Method ==========*/ | |
| /* Custom, iPhone Retina */ | |
| @media only screen and (min-width : 320px) { | |
| .masonry{ | |
| @include prefix(( | |
| column-count: 1 | |
| ), webkit moz ms o); | |
| } | |
| } | |
| /* Extra Small Devices, Phones */ | |
| @media only screen and (min-width : 480px) { | |
| .masonry{ | |
| @include prefix(( | |
| column-count: 1 | |
| ), webkit moz ms o); | |
| } | |
| } | |
| /* Small Devices, Tablets */ | |
| @media only screen and (min-width : 768px) { | |
| .masonry{ | |
| @include prefix(( | |
| column-count: 2 | |
| ), webkit moz ms o); | |
| } | |
| } | |
| /* Medium Devices, Desktops */ | |
| @media only screen and (min-width : 992px) { | |
| .masonry{ | |
| @include prefix(( | |
| column-count: 3 | |
| ), webkit moz ms o); | |
| } | |
| } | |
| /* Large Devices, Wide Screens */ | |
| @media only screen and (min-width : 1200px) { | |
| .masonry{ | |
| @include prefix(( | |
| column-count: 4 | |
| ), webkit moz ms o); | |
| } | |
| } |