<!DOCTYPE html>
<html>
<head>
<title>Masonry Plugin</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<div class="cards">
<div class="card">
<div class="card-image">
<img src="https://s-media-cache-ak0.pinimg.com/564x/65/33/85/6533859c383845b498d81990c4be2a41.jpg" />
</div>
<div class="card-info">
Low-poly illustrations
</div>
</div>
<div class="card">
<div class="card-image">
<img src="https://s-media-cache-ak0.pinimg.com/564x/19/dc/3d/19dc3d3f392a57378c55c32e3ef7574e.jpg" />
</div>
<div class="card-info">
Burger Bits by cronobreaker.devi... on @deviantART
</div>
</div>
<div class="card">
<div class="card-image">
<img src="https://s-media-cache-ak0.pinimg.com/564x/5c/dd/72/5cdd72b452abf457e85ec9ea38aa6559.jpg" />
</div>
<div class="card-info">
Da' Monk Photo by Mnk Crew
</div>
</div>
<div class="card">
<div class="card-image">
<img src="https://s-media-cache-ak0.pinimg.com/564x/89/df/1c/89df1ceeb79793465779a273794faa10.jpg" />
</div>
<div class="card-info">
vector animals
<br> Photo by Çetin Can Karaduman on Behance
</div>
</div>
<div class="card">
<div class="card-image">
<img src="https://s-media-cache-ak0.pinimg.com/564x/f8/e7/bf/f8e7bfc4e7523e1d050fd12e2141eb48.jpg" />
</div>
<div class="card-info">
Diet Zombie Pop by cronobreaker.devi... on @deviantART
</div>
</div>
<div class="card">
<div class="card-image">
<img src="https://s-media-cache-ak0.pinimg.com/564x/0a/ec/7b/0aec7ba66f3970edbeed34168ea7e776.jpg" />
</div>
<div class="card-info">
Vectors Assemble
<br> Photo by William Teal on Behance
</div>
</div>
<div class="card">
<div class="card-image">
<img src="https://s-media-cache-ak0.pinimg.com/564x/8f/de/a6/8fdea6e709e1dbf66aa5f031c0e187fc.jpg" />
</div>
<div class="card-info">
Camila 2 - Urban Arts by Cristiano
</div>
</div>
<div class="card">
<div class="card-image">
<img src="https://s-media-cache-ak0.pinimg.com/564x/c2/7f/4c/c27f4ce431471238a8ac08de609a3e24.jpg" />
</div>
<div class="card-info">
BMO v2.0 by shoden23.devianta... on @deviantART
</div>
</div>
<div class="card">
<div class="card-image">
<img src="https://s-media-cache-ak0.pinimg.com/564x/2a/04/0f/2a040f6fd57319510e6c7a027795cb1d.jpg" />
</div>
<div class="card-info">
FORCE AWAKENS DEADPOOL-vector
<br> Photo by Orlando Arocena on Behance
</div>
</div>
<div class="card">
<div class="card-image">
<img src="https://s-media-cache-ak0.pinimg.com/564x/e7/66/c2/e766c2d243ed4b6962d71ba8b48ffddf.jpg" />
</div>
<div class="card-info">
Breaking Bad by Guillaume
</div>
</div>
</div>
<script src="pinterestgrid.js"></script>
<script type="text/javascript">
(function() {
'use strict';
var grid = new PinterestGrid({
container: '.cards',
item: '.card',
gutter: 10,
delay: 200
});
window.addEventListener('resize', function() {
grid.init();
});
Array.from(document.querySelectorAll('.card img')).forEach(function(item) {
item.addEventListener('load', function() {
grid.init();
item.removeEventListener('load');
}, false);
});
}());
</script>
</body>
</html>
(function () {
'use strict';
var grid = new PinterestGrid({
container: '.cards',
item: '.card',
gutt: 10,
delay: 200
});
} ());
body {
color: #212121;
font-size: 13px;
font-family: 'Helvetica Neue', sans-serif;
background: #ECEFF1;
padding: 2em;
}
.cards {
margin: auto;
max-width: 700px;
}
.card {
background: white;
box-shadow: 1px 1px 2px rgba(0,0,0,0.3);
box-sizing: border-box;
border-radius: 4px;
display: inline-block;
margin: 0 10px 10px 0;
vertical-align: top;
width: 160px;
/* Animaciones */
opacity: 0;
-webkit-transition: all 200ms ease-in-out;
-moz-transition: all 200ms ease-in-out;
-ms-transition: all 200ms ease-in-out;
-o-transition: all 200ms ease-in-out;
transition: all 200ms ease-in-out;
}
.card--loaded { opacity: 1; }
.card img {
border-radius: 4px 4px 0 0;
width: 100%;
}
.card-info {
padding: 0.6em 1em;
}
(function(exports) {
'use strict';
function PinterestGrid(options) {
this.settings = Object.assign({
delay: 100,
shorterFirst: true,
gutter: 6
}, options);
this.loaded = false;
this.transform = _getTransformProperty();
// Objetos del DOM
this.$container = (options.container instanceof Node)
? options.container
: document.querySelector(options.container);
if (!this.$container) return false;
this.$itemCollection = (options.item instanceof NodeList)
? options.item
: this.$container.querySelectorAll(options.item);
if (!this.$itemCollection || this.$itemCollection.length === 0) return false;
if (!this.loaded) {
return this.init();
}
}
PinterestGrid.prototype.init = function() {
this.loaded = true;
this.$container.style.width = '';
var gutter = parseInt(this.settings.gutter);
var containerWidth = this.$container.getBoundingClientRect().width;
var itemsWidth = this.$itemCollection[0].getBoundingClientRect().width + gutter;
var cols = Math.max(Math.floor((containerWidth - gutter) / itemsWidth), 1);
containerWidth = (itemsWidth * cols + gutter) + 'px';
this.$container.style.width = containerWidth;
this.$container.style.position = 'relative';
var itemsPosY = [];
var itemsPosX = [];
for (var i = 0; i < cols; i++) {
itemsPosX.push(i * itemsWidth + gutter);
itemsPosY.push(gutter);
}
Array.from(this.$itemCollection).forEach(function(item, i) {
var firstItem, itemIndex, posX, posY;
if (this.settings.shorterFirst) {
firstItem = itemsPosY.slice(0).sort(function(a, b){ return a - b }).shift();
itemIndex = itemsPosY.indexOf(firstItem);
} else {
itemIndex = i % cols;
}
posX = itemsPosX[itemIndex];
posY = itemsPosY[itemIndex];
item.style.position = 'absolute';
item.style.webkitBackfaceVisibility = item.style.backfaceVisibility = 'hidden';
item.style[this.transform] = 'translate3d(' + posX + 'px, ' + posY + 'px, 0)';
itemsPosY[itemIndex] += item.getBoundingClientRect().height + gutter;
if (!/loaded/.test(item.className)) {
setTimeout(function() {
item.classList.add(item.className.split(' ')[0] + '--loaded');
}, (parseInt(this.settings.delay) * i));
}
}.bind(this));
var containerHeight = itemsPosY.slice(0).sort(function(a, b) { return a - b }).pop();
this.$container.style.height = containerHeight + 'px';
if (!/loaded/.test(this.$container.className)) {
this.$container.classList.add(this.$container.className.split(' ')[0] + '--loaded');
}
if (typeof this.settings.callback === 'function') {
this.settings.callback(this.$itemCollection);
}
};
function _getTransformProperty() {
var style = document.createElement('div').style;
var transform;
var vendorProp;
if (undefined !== style[vendorProp = 'webkitTransform']) {
transform = vendorProp;
}
if (undefined !== style[vendorProp = 'msTransform']) {
transform = vendorProp;
}
if (undefined !== style[vendorProp = 'transform']) {
transform = vendorProp;
}
return transform;
}
// AMD
if (typeof define === 'function' && define.amd) {
define(function() {
return PinterestGrid
});
}
// CommonJS
else if (typeof module !== 'undefined' && module.exports) {
module.exports = PinterestGrid;
}
// Global
else {
exports.PinterestGrid = PinterestGrid;
}
}(this));