Хорошо, поэтому вероятный ответ, в конце концов, заключается в том, чтобы обернуть <picture>
в контейнер <div>
и применить CSS, включая хак padding-top
, чтобы сохранить его соотношение сторон:
<div style="position:relative;"width:100%;padding-top:33%>
<picture>
<source type="image/webp"
srcset="
image_100.webp 100w,
image_200.webp 200w,
image_400.webp 400w,
image_600.webp 600w,
image_754.webp 754w"
sizes="(min-width: 1058px) 1000px, 100%" />
<img srcset="
image_100.png 100w,
image_200.png 200w,
image_400.png 400w,
image_600.png 600w,
image_754.png 754w"
sizes="(min-width: 1058px) 1000px, 100%"
src="image_min.png" style="width:100%;height:100%;position:absolute" alt="image_alt" />
</picture>
</div>
- CSS запасного варианта
<img>
: width
и height
установлены на 100%, а position:absolute
- Оболочка
<div>
должна быть CSS position:relative
, чтобы изображение было расположено внутри него "абсолютно". <div>
должно иметь width
и padding-top
, заданные для отражения размеров / соотношения сторон изображения. - CSS не требуется определять inline, поэтому размер оболочки div можно установить по-разному для разных размеров области просмотра с помощью медиазапросов.
Он работает как следует:
Элемент <img>
полностью заполняет оболочку <div>
. Благодаря position:absolute
оболочка padding-top
<div>
не влияет на положение изображения. Процентное значение padding-top
устанавливает его относительно элемента width , поэтому соотношение сторон остается постоянным (например, padding-top
, установленный на 100%, сделает обертку всегда квадратной).
Основное преимущество для SEO / UX:
Независимо от того, что представляют собой значения sizes
и srcset
, если известны размеры (то есть соотношение сторон), мы можем создать заполнитель, используя CSS из отступление <img>
и, таким образом, резервирование места для изображения, которое еще не было загружено или даже выбрано браузером из srcset
.
В конечном итоге это предотвратит раздражающие изменения в макете страницы, вызванные изображением, нарисованным на странице, которая уже была отрисована.