Сучасне розташування елементів списку, блоків, зображень які мають різні пропорції, у вигляді колонок з елоементами разними по висоті, до прикладу як на сайті Pinterest без участі JavaScript.
Найкращий і найпростіший варіант зробити це через CSS, який виглядає як Masonry, але працює набагато швидше. Для цього використаємо column-count, що створить ефект колонок різної висоти, як у Pinterest.
<?php $style = ".usegall-grid { column-count: 3; /* Кількість колонок для ПК */column-gap: 15px;width: 100%;}.usegall-item { display: inline-block; /* Важливо для Masonry */width: 100%;margin-bottom: 15px;break-inside: avoid; /* Запобігає розриву картинки між колонками */}.usegall-item img { width: 100%; height: auto; /* Зберігаємо пропорції */border-radius: 8px; transition: 0.3s; cursor: pointer; display: block;}/* Адаптація для планшетів */@media (max-width: 992px) {.usegall-grid { column-count: 2; }}/* Адаптація для телефонів */@media (max-width: 576px) {.usegall-grid { column-count: 1; }}"; ?>
У циклі foreach, який виводить масив зображень не потрібно примусово задавати висоту, щоб не "ламати" Pinterest-ефект:
<div class="usegall-grid"><?php foreach ($images as $index => $img) : ?><?php $src = $img->folder . '/' . htmlspecialchars($img->name, ENT_COMPAT, 'UTF-8'); ?><div class="usegall-item"><img src="/<?php echo $src; ?>" data-alt="<?php echo htmlspecialchars($img->name); ?>" style="width: 100%; height: auto;"></div><?php endforeach; ?></div>
Чому ми використали column-count замість JS?
- Продуктивність: Це чистий CSS. Браузеру не потрібно чекати завантаження всіх картинок, щоб розрахувати їх координати (як це робить Masonry.js).
- Швидкість для мобільних: Твій сайт покаже галерею миттєво, а не чекатиме виконання скриптів.
- Порядок: Фото будуть йти зверху вниз по колонках. Це виглядає дуже професійно.
Маленький нюанс:
Якщо ти хочеш, щоб фото йшли строго зліва направо в рядах (а не по колонках), але мали різну висоту — це вже складніша логіка Flexbox Masonry. Але для "ефекту Pinterest" column-count — це ідеальний і найшвидший варіант.