Элемент изображения

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

Точно так же, как srcset основывается на атрибуте src , элемент picture основывается на элементе img . Элемент picture оборачивается вокруг элемента img .

<picture>
  <img src="image.jpg" alt="A description of the image.">
</picture>

Если внутри элемента picture нет элемента img , элемент picture не будет работать.

Как и атрибут srcset , элемент picture обновит значение атрибута src в этом элементе img . Разница в том, что атрибут srcset дает браузеру рекомендации, а элемент picture дает команды. Это дает вам контроль.

source

Внутри элемента picture можно указать несколько source элементов, каждый из которых имеет свой собственный атрибут srcset . Затем браузер выполняет первый из возможных.

Форматы изображений

В этом примере есть три разных изображения в трех разных форматах:

<picture>
  <source srcset="image.avif" type="image/avif">
  <source srcset="image.webp" type="image/webp">
  <img src="image.jpg" alt="A description of the image." 
    width="300" height="200" loading="lazy" decoding="async">
</picture>

Первый source элемент указывает на изображение в новом формате AVIF . Если браузер способен отображать изображения в формате AVIF, он выбирает именно этот файл изображения. В противном случае он переходит к следующему source элементу.

Второй source элемент указывает на изображение в формате WebP . Если браузер способен отображать изображения WebP, он будет использовать этот файл изображения.

В противном случае браузер вернется к файлу изображения в атрибуте src элемента img . Это изображение в формате JPEG.

Это означает, что вы можете начать использовать новые форматы изображений, не жертвуя обратной совместимостью.

В этом примере атрибут type сообщает браузеру, какой формат изображения был указан.

Размеры изображения

Помимо переключения между форматами изображений, вы можете переключаться между размерами изображений. Используйте атрибут media , чтобы сообщить браузеру, насколько широко будет отображаться изображение. Поместите медиа-запрос внутри media атрибута.

<picture>
  <source srcset="large.png" media="(min-width: 75em)">
  <source srcset="medium.png" media="(min-width: 40em)">
  <img src="small.png" alt="A description of the image." 
    width="300" height="200" loading="lazy" decoding="async">
</picture>

Здесь вы сообщаете браузеру, что если ширина области просмотра шире 75em он должен использовать большое изображение. Между 40em и 75em браузер должен использовать среднее изображение. Ниже 40em браузер должен использовать маленькое изображение.

Это отличается от использования атрибутов srcset и sizes в элементе img . В этом случае вы предоставляете предложения браузеру. source элемент больше похож на команду, чем на предложение.

Вы также можете использовать дескриптор плотности пикселей внутри атрибута srcset source элемента.

<picture>
  <source srcset="large.png 1x" media="(min-width: 75em)">
  <source srcset="medium.png 1x, large.png 2x" media="(min-width: 40em)">
  <img src="small.png" alt="A description of the image." width="300" height="200" loading="lazy" decoding="async"
    srcset="small.png 1x, medium.png 2x, large.png 3x">
</picture>

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

Обрезка

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

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

Вот пример главного изображения, которое меняет свое содержимое и форму в зависимости от ширины области просмотра. Добавьте атрибуты width и height к каждому source элементу.

<picture>
  <source srcset="full.jpg" media="(min-width: 75em)" width="1200" height="500">
  <source srcset="regular.jpg" media="(min-width: 50em)" width="800" height="400">
  <img src="cropped.jpg" alt="A description of the image." width="400" height="400" loading="eager" decoding="sync">
</picture>

Помните, что вы не можете изменить атрибут alt в зависимости от источника изображения. Вам нужно будет написать атрибут alt , который описывает как полноразмерное, так и обрезанное изображение.

Вероятно, вам не понадобится использовать элемент picture для большинства адаптивных изображений — атрибуты srcset и sizes элемента img охватывают множество вариантов использования. Но в тех ситуациях, когда вам нужен более детальный контроль, элемент picture является мощным инструментом.

Есть один вид изображений, для которого вам может не понадобиться ни одно из решений: значки. Вот что будет дальше .

Проверьте свое понимание

Проверьте свои знания элемента изображения.

Если атрибут srcset передает браузеру ________, то элемент <picture> дает ________.

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

Некоторые возможности элемента <picture> :

Альтернативное кадрирование
например: пейзажные изображения или портретные изображения в зависимости от области просмотра.
Альтернативные форматы
например: файлы avif или webp меньшего размера и их легче загружать, если это возможно.
Альтернативные размеры
например: изображения большего размера для мониторов большего размера.
Альтернативные плотности
например: обеспечение высокого качества пикселей для экранов HD.
Альтернативные соотношения
Элемент изображения не имеет функций соотношения.