← Назад к вопросам

Как уменьшить ширину картинки для мобильной версии сайта?

2.2 Middle🔥 151 комментариев
#JavaScript Core

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI4 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Стратегии адаптации изображений для мобильных устройств

Уменьшение ширины картинки для мобильной версии — это не одна техника, а комплексный подход, затрагивающий HTML, CSS, а иногда и серверную часть. Основная цель — не просто механически сжать картинку, а обеспечить оптимальную производительность (быструю загрузку) и качество отображения на экранах с ограниченной шириной и, зачастую, медленным интернетом.

1. Отзывчивые изображения с помощью CSS (Базовый и обязательный метод)

Это первый и главный этап. Мы указываем картинке в CSS гибкие размеры.

.responsive-img {
    /* Основное правило: максимальная ширина равна 100% от родительского контейнера */
    max-width: 100%;
    /* Высота подстраивается автоматически, сохраняя пропорции */
    height: auto;
    /* Убеждаемся, что изображение не выходит за пределы экрана */
    display: block;
}

Принцип работы: Элемент, в котором находится картинка (например, <div class="container">), на мобильном устройстве будет узким (например, 100% от viewport). Правило max-width: 100% не позволит картинке превысить эту ширину. Исходная картинка может быть большой (1200px), но в CSS она будет отмасштабирована браузером до ширины контейнера (например, 375px).

Вариация с разными правилами для разных breakpoints (контрольных точек):

/* Базовая стилизация для всех устройств */
.img {
    width: 100%;
    height: auto;
}

/* Для планшетов и выше можно ограничить ширину */
@media (min-width: 768px) {
    .img {
        width: 80%;
        margin: 0 auto;
    }
}

/* Для десктопов фиксируем размер */
@media (min-width: 1024px) {
    .img {
        width: 600px;
    }
}

2. Использование HTML}атрибута srcset (Оптимизация загрузки)

CSS масштабирует уже загруженную картинку. Но если исходный файл весит 2 МБ, он всё равно будет целиком загружен на мобильный телефон, что неприемлемо. Атрибут srcset позволяет браузеру выбирать наиболее подходящий по размеру и плотности пикселей файл из предложенного списка.

<img
    src="image-default.jpg" <!-- Фолбэк для старых браузеров -->
    srcset="image-small.jpg 320w,  <!-- w = ширина исходного файла в пикселях -->
            image-medium.jpg 768w,
            image-large.jpg 1200w"
    sizes="(max-width: 480px) 100vw,  <!-- Правила для расчета нужной ширины -->
           (max-width: 1024px) 50vw,
           600px"
    alt="Описание изображения"
    class="responsive-img"
>

Как это работает:

  • Браузер смотрит на условие в sizes. Например, на экране 375px сработает правило (max-width: 480px) 100vw — значит, картинке нужно 100% от ширины viewport (375px).
  • Затем он смотрит в srcset и выбирает тот файл, чья заявленная ширина (320w, 768w и т.д.) наиболее близко соответствует требуемым 375px, с учетом плотности пикселей устройства (Retina-экранам нужны файлы в 2 раза больше).
  • В нашем примере для экрана 375px, скорее всего, будет загружено image-medium.jpg (768px), что даст хорошее качество даже на Retina-экране (где требуется ~750px).

3. Элемент <picture> (Арт -дирекшн)

Элемент <picture> идет дальше. Он позволяет не просто масштабировать одно и то же изображение, а полностью менять его на другое для определенных условий (арт-дирекшн). Это идеально для сложных Hero-изображений, где на десктопе видна широкая сцена, а на мобильном — важный крупный объект.

<picture>
    <!-- Для узких экранов загружаем портретную, обрезанную картинку -->
    <source media="(max-width: 767px)" srcset="mobile-portrait.jpg">
    <!-- Для экранов средней ширины и высокой плотности пикселей -->
    <source media="(max-width: 1023px)" srcset="tablet-landscape.jpg 1x, tablet-landscape@2x.jpg 2x">
    <!-- Для широких экранов (десктоп) и всех остальных случаев -->
    <img src="desktop-wide.jpg" alt="Описание сцены" class="responsive-img">
</picture>

Ключевой момент: Браузер использует первое совпавшее условие <source> и загружает указанный в нём файл. Элемент <img> в конце является обязательным фолбэком и показывается, если ни одно условие не совпало.

4. Серверная оптимизация и современные форматы

Фронтенд-техники должны работать в паре с бэкендом:

  • Генерация вариантов изображений: На сервере (вручную или через CMS/CDN) должны быть заранее подготовлены несколько физически разных файлов (image-small.jpg, image-medium.jpg), а не один огромный.
  • Использование современных форматов: WebP и AVIF обеспечивают лучшее сжатие при том же качестве, чем JPEG и PNG. Их можно подключать через <picture> или с проверкой поддержки в srcset.
    <picture>
        <source type="image/avif" srcset="image.avif">
        <source type="image/webp" srcset="image.webp">
        <img src="image.jpg" alt="...">
    </picture>
    

Резюме и лучшие практики

  1. Всегда используйте max-width: 100%; height: auto; в CSS для базовой отзывчивости.
  2. Для оптимизации производительности обязательно используйте srcset и sizes для предоставления браузеру выбора подходящего файла. Это сокращает трафик и ускоряет загрузку.
  3. Для арт-дирекшна (когда композиция картинки важна) используйте элемент <picture>.
  4. Готовьте оптимизированные исходники: Убедитесь, что на сервере есть несколько версий каждого изображения (например, 320px, 768px, 1200px) в оптимальном качестве и сжатии.
  5. Внедряйте современные форматы (WebP/AVIF) для дополнительного выигрыша в размере файла.

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

Как уменьшить ширину картинки для мобильной версии сайта? | PrepBro