Поиск по сайту
Ctrl + K
Вопросы по CSS

Как создать адаптивную галерею изображений с помощью CSS?

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

Шаг 1: HTML-структура

Сначала создадим основную структуру HTML для галереи. Мы будем использовать элемент <div> для контейнера галереи, а изображения обернем в теги <img>:

<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Адаптивная галерея изображений</title>
    <link rel="stylesheet" href="styles.css">
</head>
<body>
    <div class="gallery">
        <img src="image1.jpg" alt="Изображение 1">
        <img src="image2.jpg" alt="Изображение 2">
        <img src="image3.jpg" alt="Изображение 3">
        <img src="image4.jpg" alt="Изображение 4">
        <img src="image5.jpg" alt="Изображение 5">
        <img src="image6.jpg" alt="Изображение 6">
    </div>
</body>
</html>

Шаг 2: CSS для адаптивности

Теперь добавим стили в файл styles.css, чтобы сделать галерею адаптивной. Мы будем использовать Flexbox для выравнивания изображений:

* {
    box-sizing: border-box;
}

body {
    margin: 0;
    font-family: Arial, sans-serif;
}

.gallery {
    display: flex;
    flex-wrap: wrap;
    justify-content: space-between; /* Разделим пространство между изображениями */
    padding: 10px; /* Добавим отступы вокруг контейнера */
}

.gallery img {
    max-width: 100%; /* Ограничим максимальную ширину изображений */
    height: auto; /* Автоматическая высота для сохранения пропорций */
    margin-bottom: 10px; /* Отступ снизу для каждого изображения */
    flex: 1 1 calc(33.33% - 10px); /* Три изображения в ряд с отступом */
    /* Это правило означает: 
       1. flex-grow: 1 (изображение может расти);
       2. flex-shrink: 1 (изображение может сжиматься);
       3. flex-basis: calc(33.33% - 10px) (идет расчет ширины с учетом отступа);
    */
}

/* Меньше изображений на меньших экранах */
@media (max-width: 768px) {
    .gallery img {
        flex: 1 1 calc(50% - 10px); /* Два изображения в ряд для экранов меньше 768px */
    }
}

@media (max-width: 480px) {
    .gallery img {
        flex: 1 1 100%; /* Одно изображение в ряд для мобильных устройств */
    }
}

Объяснение кода

  • HTML: Создается контейнер для галереи, в который помещаются изображения. Каждый элемент изображения имеет атрибут alt для улучшения доступности.
  • CSS:
    • Flexbox: Используется для того, чтобы изображения автоматически выстраивались в ряды, согласно заданным правилам.
    • Пропорции: Изображения сохраняют свои пропорции благодаря height: auto;.
    • Media Queries: При помощи медиа-запросов мы изменяем количество изображений в ряду в зависимости от ширины экрана — три изображения для больших экранов, два для средних, и одно для мобильных устройств.
  • Заключение

    Теперь у вас есть простая адаптивная галерея изображений, которая будет хорошо отображаться на различных устройствах. Вы можете поэкспериментировать с количеством изображений в ряду и стилями, чтобы сделать вашу галерею уникальной. Не забывайте оптимизировать изображения для быстрого загрузки!