Masonry срабатывает до того, как загрузятся картинки.
Приведу способы решения сей проблемы
отсюда:
Способ 1
Установить для всех изображений размеры жестко: ширину и высоту в пикселях.
Способ 2
Повесить обработку Масонри на событиеload. Код для jQuery:
jQuery(window).load(function(){
jQuery('.masonry').masonry({ columnWidth:310, itemSelector:'.box, .item' });
});
Минус этого способа в том, что тут скорее всего придется ждать загрузки всего "окна": jQuery(window).load. Использовать load отдельно для элемента редко допустимо, потому что jQuery будет интерпретировать его как AJAX функцию load. Чтобы этого избежать используйте 3-й пример.
Способ 3
Инициализировать работу Масонри, после того, как все картинки будут загружены. А для проверки загрузки использовать дополнительный JS скрипт imagesLoaded. Код:
var container = document.querySelector('#container');
var msnry;
// Инициализация Масонри, после загрузки изображений
imagesLoaded( container, function() {
msnry = new Masonry( container );
});
Код для jQuery:
var $container = $('#container');
// Инициализация Масонри, после загрузки изображений
$container.imagesLoaded( function() {
$container.masonry();
});
Заметка: также ошибка может быть при использовании дополнительных шрифтов, поэтому загрузку шрифтов нужно проверять.