Я хочу видеть на своем сайте много картинок, аккуратно и динамично расположенных, и не хочу много кодить.

Каменная кладка сэкономит ваше время.

Masonry — это библиотека компоновки сетки JavaScript, созданная Дэвидом ДеСандро, которая мгновенно упорядочивает элементы в их оптимальном положении в зависимости от доступного вертикального пространства.

Чтобы начать использовать Masonry, вы можете загрузить библиотеку здесь:

или ссылка CDN напрямую на файлы Masonry:

<script src="https://unpkg.com/masonry-layout@4/dist/masonry.pkgd.min.js"></script>
<!-- or -->
<script src="https://unpkg.com/masonry-layout@4/dist/masonry.pkgd.js"></script>

Менеджеры пакетов

Установить через Бауэр: bower install masonry --save

Установить с помощью npm: npm install masonry-layout

Давайте начнем!

Начнем с включения файла Masonry .js в нашу HTML-страницу.

<script src="/path/to/masonry.pkgd.min.js"></script>

Размер наших изображений обрабатывается в нашем файле CSS.

.grid-item { width: 200px; }
.grid-item--width2 { width: 400px; }

Мы можем использовать Masonry как jQueryplugin$(‘selector’).masonry()

$('.grid').masonry({
// options
itemSelector: '.grid-item',
columnWidth: 200
});

Мы создаем элемент <div> с классом “grid” в нашем файле HTML:

<div class="grid">
  <div class="grid-item"></div>
  <div class="grid-item grid-item--width2"></div>
  <div class="grid-item grid-item--height2"></div>
  ...
</div>

Макет

Для размера и стиля мы делаем это непосредственно в нашем файле CSS:

.grid-item {
  float: left;
  width: 80px;
  height: 60px;
  border: 2px solid hsla(0, 0%, 0%, 0.5);
}

.grid-item--width2 { width: 160px; }
.grid-item--height2 { height: 140px; }

Для адаптивного макета с размерами, установленными в процентах, установите процентную ширину columnWidth и установите percentPosition: true, чтобы уменьшить переходы регулировки при изменении размера окна.

Masonry предоставляет ссылку на отдельный скрипт imagesLoaded для решения любых проблем с перекрытием изображений. Вы можете скачать на imagesloaded.desandro.com.

Мы запускаем метод Masonry layout после загрузки каждого изображения в сетку:

// init Masonry
var $grid = $('.grid').masonry({
  // options...
});
// layout Masonry after each image loads
$grid.imagesLoaded().progress( function() {
  $grid.masonry('layout');
});

Или инициализируйте Masonry после загрузки всех изображений.

var $grid = $('.grid').imagesLoaded( function() {
  // init Masonry after all images have loaded
  $grid.masonry({
    // options...
  });
});

Параметры

Чтобы включить статический баннер или исключить элементы изменения размера, Masonry рекомендует всегда устанавливать itemSelector.

itemSelector: '.grid-item'

<div class="grid">
  <!-- do not use banner in Masonry layout -->
  <div class="static-banner">Static banner</div>
  <div class="grid-item"></div>
  <div class="grid-item"></div>
  ...
</div>

Чтобы выровнять элементы по горизонтальной сетке, Masonry рекомендует установить ширину столбца.

columnWidth: 80

Вот полный список опций с демо-кодом для вышеуказанных гифок.

Методы

Для добавления элементов Masonry предоставляет методы appended и prepended.

// jQuery
$grid.masonry( 'appended', elements )
// vanilla JS
msnry.appended( elements )
$('.append-button').on( 'click', function() {
  // create new item elements
  var $items = $('<div class="grid-item">...</div>');
  // append items to grid
  $grid.append( $items )
    // add and lay out newly appended items
    .masonry( 'appended', $items );
});

// jQuery
$grid.masonry( 'prepended', elements )
// vanilla JS
msnry.prepended( elements )
$('.prepend-button').on( 'click', function() {
  // create new item elements
  var $items = $('<div class="grid-item">...</div>');
  // prepend items to grid
  $grid.prepend( $items )
    // add and lay out newly prepended items
    .masonry( 'prepended', $items );
});

Для удаления элементов используйте метод remove

// jQuery
$grid.masonry( 'remove', elements )
// vanilla JS
msnry.remove( elements )
$grid.on( 'click', '.grid-item', function() {
  // remove clicked element
  $grid.masonry( 'remove', this )
    // layout remaining item elements
    .masonry('layout');
});

Для получения элементов элемента в виде массива Masonry предоставляет метод getItemElements

// jQuery
var elems = $grid.masonry('getItemElements')
// vanilla JS
var elems = msnry.getItemElements()

Вот полный список методов с демо-кодом для вышеуказанных гифок.

Начальная загрузка

Masonry также работает с системой сетки Bootstrap. Чтобы создать сетку из 3 столбцов, используя col-xs-4 как columnWidth:

<div class="container-fluid">
  <!-- add extra container element for Masonry -->
  <div class="grid">
    <!-- add sizing element for columnWidth -->
    <div class="grid-sizer col-xs-4"></div>
    <!-- items use Bootstrap .col- classes -->
    <div class="grid-item col-xs-8">
      <!-- wrap item content in its own element -->
      <div class="grid-item-content">...</div>
    </div>
    <div class="grid-item col-xs-4">
      <div class="grid-item-content">...</div>
    </div>
    ...
  </div>
</div>
$('.grid').masonry({
  itemSelector: '.grid-item', // use a separate class for itemSelector, other than .col-
  columnWidth: '.grid-sizer',
  percentPosition: true
});

Кредиты

Так вот! Вы также можете добавить волшебную сетку Masonry на свой сайт и дополнительно настроить ее с помощью событий и больше.

Выражаем благодарность за фрагменты кода и демонстрации David DeSandro за предоставленную замечательную библиотеку компоновки сетки, свободно доступную для использования и распространения.

https://masonry.desandro.com/