Автоматический макет на CSS Grid

Создание автоматического макета наподобие «Google Gallery», но с помощью css grid.

В чём заключается плюс создание мозаичной галереи на grid? Плюс в весе и строках кода.
В отличии от скриптов, а в некоторых вариантах скрипт может быть не один, а штуки четыре, вариант на css grid занимает пять строк кода.

В интернете полно вариантов css grid макетов, наверно вы их уже видели и в курсе что к чему, так что коротко и по делу!

Структура

<div class="grid"> <div class="card" style="--card-height: 4;"></div> <div class="card" style="--card-height: 8;"></div> <div class="card" style="--card-height: 4;"></div> <div class="card" style="--card-height: 8;"></div> ... </div>

Основной смысл построения разного уровня — задать блокам персональные выставленные значения высоты --card-height: 4.
Так же к высоте можно добавить и ширину --card-width: 2;, но тут нужно подбирать значения у окружающих блоков так, чтобы сверху и снизу не было пустоты.

Ничего сложного.

Стили

.grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(14rem, 1fr)); grid-template-rows: repeat(auto-fill, 3rem); grid-gap: 2rem; } .card { grid-area: span calc(var(--card-height, 4) + 1)/span var(--card-width, 1); }

Если галерея не подразумевает использования горизонтальных блоков занимающих более одного столбца, то /span var(--card-width, 1) можно смело удалять.

Остаётся только подобрать размеры, отступы (grid-gap) и стилизацию (закругления, тени и тп.) и всё, макет готов.

Минусы
Одним из главных для меня минусов данного варианта, и это не поддержка браузеров, с этим на данный момент как раз всё нормально, — сложность в циклы. Если нет чёткой высоты блока, допустим блоки содержат текст и он добавляется разными людьми. Тут так просто не получится, придётся писать скрипт высчитывающий высоту каждого блока, а это уже не просто на чистом css, это уже другая история.

Добавить в закладки
Комментариев пока нет
Чтобы оставить комментарий нужно войти на сайт под своим именем.