Адаптивная галерея

Одной из распространенных задач при разработке веб-приложений является создание адаптивных интерфейсов, которые корректно отображаются на различных устройствах с разными разрешениями экранов. Библиотека BasicLightbox предоставляет удобные инструменты для создания модальных окон и отображения изображений, что делает её отличным выбором для реализации адаптивных галерей.

Основные возможности BasicLightbox

Библиотека BasicLightbox позволяет создавать легкие модальные окна для отображения изображений и других медиа-ресурсов. Она подходит для реализации простых галерей с возможностью просмотра изображений в увеличенном виде. Основная задача — обеспечить удобное взаимодействие с элементами на экране при различных разрешениях. Важно, чтобы галерея правильно адаптировалась к разным размерам экрана и не нарушала юзабилити.

Установка и подключение

Для начала необходимо подключить библиотеку BasicLightbox. Это можно сделать с помощью CDN или скачать файл и подключить его локально.

CDN:

<link href="https://cdn.jsdelivr.net/npm/baselightbox@5.0.0/dist/basicLightbox.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/baselightbox@5.0.0/dist/basicLightbox.min.js"></script>

Локальное подключение:

  1. Скачайте файлы библиотеки с официального репозитория или с сайта.
  2. Подключите CSS и JS файлы в вашем проекте:
<link rel="stylesheet" href="path/to/basicLightbox.min.css">
<script src="path/to/basicLightbox.min.js"></script>

Структура HTML для галереи

Для создания адаптивной галереи нужно подготовить структуру HTML, которая будет изменяться в зависимости от размеров экрана. Стандартная разметка для изображений может выглядеть следующим образом:

<div class="gallery">
  <a href="image1.jpg" class="gallery-item" data-lightbox="gallery">
    <img src="thumbnail1.jpg" alt="Image 1">
  </a>
  <a href="image2.jpg" class="gallery-item" data-lightbox="gallery">
    <img src="thumbnail2.jpg" alt="Image 2">
  </a>
  <a href="image3.jpg" class="gallery-item" data-lightbox="gallery">
    <img src="thumbnail3.jpg" alt="Image 3">
  </a>
</div>

Каждое изображение в галерее оборачивается в ссылку, которая указывает на полное изображение. Это изображение будет отображаться в модальном окне при клике.

Открытие изображений в модальном окне

После того как HTML структура готова, можно перейти к добавлению функционала с использованием библиотеки BasicLightbox. Для этого необходимо инициализировать обработчик кликов на изображениях. Когда пользователь кликает на изображение, оно откроется в модальном окне.

Пример JavaScript кода для открытия изображения в модальном окне:

const galleryItems = document.querySelectorAll('.gallery-item');

galleryItems.forEach(item => {
  item.addEventListener('click', (e) => {
    e.preventDefault();
    const imageUrl = item.getAttribute('href');
    const lightbox = basicLightbox.create(`
      <img src="${imageUrl}" alt="Full image">
    `);
    lightbox.show();
  });
});

Этот код создает обработчик клика на каждом элементе галереи. При клике открывается модальное окно с изображением, указанным в атрибуте href.

Адаптивность галереи

Основная особенность адаптивной галереи заключается в корректном отображении как на мобильных устройствах, так и на десктопах. Для этого можно использовать медиазапросы (CSS Media Queries) для настройки отображения изображений.

Пример стилей для адаптивной галереи:

/* Стандартные стили для десктопов */
.gallery {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 10px;
}

.gallery-item img {
  width: 100%;
  height: auto;
  display: block;
  border-radius: 5px;
}

/* Адаптация для планшетов */
@media (max-width: 768px) {
  .gallery {
    grid-template-columns: repeat(2, 1fr);
  }
}

/* Адаптация для мобильных устройств */
@media (max-width: 480px) {
  .gallery {
    grid-template-columns: 1fr;
  }
}

С помощью этих медиазапросов галерея будет изменять количество колонок в зависимости от ширины экрана. На больших экранах изображения будут отображаться в 4 колонки, на планшетах — в 2, а на мобильных устройствах — в 1 колонку. Это обеспечит оптимальный вид галереи на всех устройствах.

Стиль модального окна

Модальное окно, которое открывается с изображением, также должно быть адаптивным. Библиотека BasicLightbox автоматически подстраивает модальное окно под размеры изображения. Однако, для улучшения восприятия можно добавить дополнительные стили.

Пример стилей для модального окна:

.basicLightbox .basicLightbox__placeholder {
  background-color: rgba(0, 0, 0, 0.8);
}

.basicLightbox .basicLightbox__content img {
  max-width: 100%;
  max-height: 80vh;
  object-fit: contain;
  border-radius: 10px;
}

Эти стили позволяют модальному окну выглядеть аккуратно и избегать искажений изображения. Использование max-height: 80vh ограничивает максимальный размер изображения, предотвращая его превышение на высоких экранах.

Навигация по галерее

Для создания полноценной галереи можно добавить возможность переключения между изображениями. Библиотека BasicLightbox позволяет это сделать с помощью дополнительной настройки.

Пример кода для переключения изображений:

const galleryItems = document.querySelectorAll('.gallery-item');
let currentIndex = 0;

const lightbox = basicLightbox.create(`
  <img src="${galleryItems[currentIndex].getAttribute('href')}" alt="Full image">
  <div class="controls">
    <button class="prev">Previous</button>
    <button class="next">Next</button>
  </div>
`);

document.querySelector('.next').addEventListener('click', () => {
  currentIndex = (currentIndex + 1) % galleryItems.length;
  const nextImageUrl = galleryItems[currentIndex].getAttribute('href');
  lightbox.element().querySelector('img').src = nextImageUrl;
});

document.querySelector('.prev').addEventListener('click', () => {
  currentIndex = (currentIndex - 1 + galleryItems.length) % galleryItems.length;
  const prevImageUrl = galleryItems[currentIndex].getAttribute('href');
  lightbox.element().querySelector('img').src = prevImageUrl;
});

lightbox.show();

В этом примере добавлены кнопки для перехода к следующему и предыдущему изображению. При клике на эти кнопки обновляется изображение в модальном окне.

Итоги

Используя библиотеку BasicLightbox и комбинацию с медиазапросами CSS, можно создать адаптивную галерею, которая будет корректно отображаться на разных устройствах. Это позволит пользователям взаимодействовать с контентом удобно и без потери качества отображения изображений.