Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Как сделать раскладку как на Pinterest

Короткий ответ

Самый простой способ сегодня — многоколоночная раскладка: карточки идут сверху вниз и заполняют колонки без пустот:

<style>
  .wall { columns: 3 100px; column-gap: 8px; }
  .wall div { break-inside: avoid; margin-bottom: 8px; padding: 8px; background: lavender; border-radius: 8px; }
</style>
 
<div class="wall">
  <div style="height: 60px">1</div><div style="height: 100px">2</div><div style="height: 40px">3</div>
  <div style="height: 80px">4</div><div style="height: 50px">5</div><div style="height: 90px">6</div>
</div>

columns: 3 100px означает «не больше трёх колонок шириной не меньше 100px», а break-inside: avoid не даёт разрезать карточку между колонками.

Ограничение

Порядок здесь идёт по колонкам: сначала заполняется первая, потом вторая. Для галереи это неважно, а для ленты новостей, где порядок читают слева направо, такой способ не подходит.

Будущее: grid masonry

В спецификации есть настоящая раскладка masonry в grid с порядком по строкам, но поддерживают её пока не все браузеры. До тех пор используют колонки выше или небольшой скрипт.

Частая ошибка

Без break-inside: avoid карточка может начаться внизу одной колонки и продолжиться наверху следующей. А margin-bottom вместо gap нужен потому, что у колонок нет промежутков между элементами по вертикали.

Функции из этого ответа

  • display — Определяет, как элемент ведёт себя в потоке и как раскладывает содержимое.
  • gap — Промежутки между элементами во flexbox и grid.
  • height — Высота элемента.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.