Вопрос или проблема
У меня есть сайт с изображением баннера героя.
Вот как это выглядит на десктопе:
Вот как это выглядит на мобильном устройстве (через инструменты разработчика 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
, вы сможете создать адаптивный и красивый дизайн вашего сайта, который будет хорошо выглядеть на всех устройствах. Главное — убедиться, что вы тщательно протестируете изменения на различных экранах, чтобы убедиться, что изображение выглядело гармонично и привлекательно для пользователей.