Изображение героя обрезано в разных размерах

Вопрос или проблема

У меня есть сайт с изображением баннера героя.

Вот как это выглядит на десктопе:

введите описание изображения здесь

Вот как это выглядит на мобильном устройстве (через инструменты разработчика Chrome):

введите описание изображения здесь

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

Я рассмотрел несколько альтернатив, и ни одна не сработала, так что не уверен, какой подход лучше. Некоторые из альтернатив, которые я пробовал:

1) Обрезать изображение для мобильных устройств с другим соотношением сторон, от центра к краям. Таким образом, основное сообщение (МЕГА РАСПРОДАЖА) будет выглядеть нормально, а остальное не будет видно на мобильном (не парьтесь об этом). Я не знаю, как это сделать, а также проблема в том, что изображение имеет srcset, так что это добавляет сложности.

2) Использовать одно и то же большое изображение для всех устройств, но использовать min-height, центрировать изображение так, чтобы видима была только центральная часть. Проблема в том, что srcset покажет меньшее изображение, так что этот подход пока не сработал.

Какова лучшая практика для этого? Я прочитал ОЧЕНЬ много о пользовательских полях, функции add_image_size(), srcset и т. д., но пока не могу это решить.

Любая помощь будет полезна. Большое спасибо!

ИЗМЕНЕНИЕ: Похоже, что элемент <picture> то, что мне нужно, но теперь я не знаю, как интегрировать его с загрузкой изображений WP и процессом обрезки.

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

object-fit и object-position работают по сути так же, как background-size и background-position, но вместо того, чтобы применяться только к фоновым изображениям, они работают с объектами, такими как тег <img>.

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

Посмотрите этот Fiddle. Обратите внимание, как они используют одно и то же изображение, но оно выглядит более-менее увеличенным при разных ширинах, это то, что вы хотите сделать.

Вы можете установить эти различные значения для object-fit…

  • fill: это значение по умолчанию, которое растягивает изображение, чтобы вписать его в контентный блок, независимо от его соотношения сторон.
  • contain: увеличивает или уменьшает размер изображения, чтобы заполнить блок, сохраняя его соотношение сторон.
  • cover: изображение заполнит высоту и ширину своего блока, вновь сохраняя свое соотношение сторон, но часто обрезая изображение в процессе.
  • none: изображение игнорирует высоту и ширину родительского блока и сохраняет свой оригинальный размер.
  • scale-down: изображение сравнивает разницу между none и contain, чтобы найти самый маленький конкретный размер объекта.

Примечание: По умолчанию изображение центрировано в контентном блоке. Вы можете изменить это, используя object-position.

Пример:

img {
    object-fit: none;
    object-position: 50% 50%; /* значение по умолчанию: изображение центрировано */
    object-position: 0 0; /* расположение в левом верхнем углу контентного блока */
}

Вы можете просто использовать приведенный ниже CSS для контейнерного класса вашего баннера героя. Например, если контейнерный класс вашего баннера героя называется ‘hero-container’, то добавьте ниже указанный CSS, здесь вы можете уменьшить значение 100 до 80 или 70 в зависимости от высоты изображения баннера, которое вы хотите. 100vh будет отображать полную высоту экрана, так что вы можете уменьшить это значение по своему усмотрению, CSS ниже:

.hero-container{height: 100vh;}

Ответ или решение

Как улучшить отображение изображения героя на мобильных устройствах

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

1. Использование элемента <picture>

Элемент <picture> предоставляет возможность загружать различные версии одного и того же изображения в зависимости от условий просмотра. Это особенно полезно для адаптивного дизайна. Вы можете создать несколько разных версий изображения с различными соотношениями сторон для настольных и мобильных устройств.

Пример использования:

<picture>
    <source media="(max-width: 600px)" >
    <source media="(min-width: 601px)" >
    <img src="path/to/fallback-image.jpg" alt="Banner">
</picture>

Этот код позволяет браузеру выбирать изображение в зависимости от ширины экрана.

2. CSS-свойства object-fit и object-position

Если вы хотите сохранить одно изображение, но изменить его отображение, вы можете использовать свойства CSS object-fit и object-position. Эти свойства обладают возможностями, аналогичными background-size и background-position, но применяются к тегу <img>.

  • object-fit определяет, как изображение должно вписываться в контейнер.

    • cover: изображение растягивается, чтобы заполнить контейнер, обрезая его края.
    • contain: изображение уменьшается или увеличивается, сохраняя свои пропорции.
  • object-position позволяет задать, как изображение позиционируется внутри контейнера.

Пример CSS:

.hero-image {
    width: 100%;
    height: 60vh; /* Задайте нужную высоту */
    object-fit: cover; /* Это поможет сохранить ширину, но изменит высоту */
    object-position: center; /* Центрирует изображение */
}

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

3. Контейнерные классы

Если у вас уже есть контейнер для изображения, например, .hero-container, вы можете задать высоту в процентах или относительно высоты экрана (viewport height). Это даст вам гибкость в том, как изображение будет отображаться на различных устройствах.

Пример:

.hero-container {
    height: 100vh; /* полное заполнение экрана */
}

@media (max-width: 600px) {
    .hero-container {
        height: 70vh; /* уменьшенная высота для мобильных устройств */
    }
}

4. Использование srcset

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

<img src="default.jpg" 
     srcset="image-500w.jpg 500w,
             image-1000w.jpg 1000w,
             image-2000w.jpg 2000w" 
      
     alt="Banner Image">

Вывод

Выбор подходящего метода зависит от вашего конкретного случая и желаемого визуального эффекта. Используя элемент <picture>, свойства CSS object-fit, настройка высоты контейнера и правильное использование srcset, вы сможете создать адаптивный и красивый дизайн вашего сайта, который будет хорошо выглядеть на всех устройствах. Главное — убедиться, что вы тщательно протестируете изменения на различных экранах, чтобы убедиться, что изображение выглядело гармонично и привлекательно для пользователей.

Оцените материал
Добавить комментарий

Капча загружается...