У меня была обратная проблема, как описано: первая загрузка работала нормально в Mac OS X Safari, но изменение сетки со всеми новыми элементами привело к тому, что все они сложились в верхнем левом углу.Кроме того, ожидание готового события и установка высоты и ширины CSS для наших элементов не устранили этого.
На нашем сайте есть категории данных, которые отображаются в сетке кладки, и только одна категория отображается навремя.Пользователь может в любой момент переключить категорию и инициировать запрос AJAX для загрузки новых данных.В последних версиях Safari (9.1, 10) и таких браузерах, как Chrome, мы могли бы просто сделать это, изменив категорию для замены всех новых элементов:
// domData is HTML string from the server
// IMJS is our global variable that we use for globals and lookups
$("#divTemplateCategoryName").after(domData); // insert new HTML
var elementsToAdd = $(".grid-item-template-info"); //select the elements
IMJS.MasonryGrid.masonry('addItems', elementsToAdd); // tell masonry to add them
IMJS.MasonryGrid.masonry('layout'); // tell masonry to layout again
Однако в некоторых версиях Safari это не сработалои мы должны были сделать это вместо этого:
// domData is HTML string from the server
// IMJS is our global variable that we use for globals and lookups
IMJS.MasonryGrid.masonry('destroy'); // destroy the grid
$("#divTemplateCategoryName").after(domData); // insert new HTML
InitMasonry(); // re-do our entire masonry init
Поскольку у меня нет времени, чтобы отследить каждую версию браузера, которая может быть затронута этой ошибкой, я переключился на последний метод для всех браузеров.