Изображения¶
Обзор изображений в HTML.
Декоративные изображения, такие как фоновые градиенты на кнопках или фоновые изображения на участках контента или всей странице, являются презентационными и должны применяться с помощью CSS. Когда изображение добавляет контекст в документ, оно является контентом и должно быть встроено в HTML.
Основным способом включения изображений является тег <img>
с атрибутом src
, ссылающимся на ресурс изображения, и атрибутом alt
, описывающим изображение.
1 |
|
Атрибут srcset
в элементе <img>
и элемент <picture>
позволяют включать несколько источников изображений с соответствующими медиазапросами, каждый из которых имеет запасной источник, что позволяет предоставлять наиболее подходящий файл изображения в зависимости от разрешения устройства, возможностей браузера и размера области просмотра. Атрибут srcset
позволяет предоставлять несколько версий изображений в зависимости от разрешения и, совместно с атрибутом sizes
, размера области просмотра браузера.
1 2 3 4 5 6 |
|
Это также можно сделать с помощью элемента <picture>
, наряду с дочерними элементами <source>
, который в качестве источника по умолчанию принимает <img>
.
1 2 3 4 5 6 7 8 |
|
Помимо этих встроенных в HTML методов обработки изображений, HTML также позволяет улучшить производительность рендеринга изображений с помощью атрибутов. Тег <img>
и, соответственно, графические кнопки отправки <input type="image">
могут включать атрибуты height
и width
для установки соотношения сторон изображения с целью уменьшения смещения макета содержимого. Атрибут lazy
включает ленивую загрузку.
В HTML также поддерживается включение SVG-изображений с помощью <svg>
напрямую, хотя SVG-изображения с расширением .svg
(или в виде data-uri) могут быть встроены с помощью элемента <img>
.
Элемент <figure>
вместе с вложенным в него элементом <figcaption>
позволяет включить изображение с соответствующим описанием. Элемент <figure>
не ограничивается только включением изображений. Это семантический способ ссылки на изображения, фрагменты кода, текст примера или другое содержимое вместе с описанием этого содержимого как на единое целое. При включении <figcaption>
убедитесь, что он является первым или последним дочерним элементом, вложенным в <figure>
.
Как минимум, каждое изображение переднего плана должно содержать атрибуты src
и alt
.
Файл src
— это путь и имя файла встроенного изображения. Атрибут src
используется для указания URL-адреса изображения. Затем браузер получает актив и отображает его на странице. Этот атрибут необходим для <img>
; без него нечего рендерить.
Атрибут alt
содержит альтернативный текст для изображения, представляющий собой описание изображения для тех, кто не может видеть экран (вспомните поисковые системы и вспомогательные технологии, и даже Alexa, Siri и Google Assistant), и может быть показан браузером, если изображение не загружается. Помимо пользователей с медленными сетями или ограниченной пропускной способностью, текст alt
невероятно полезен в HTML-сообщениях, поскольку многие пользователи блокируют изображения в своих почтовых приложениях.
1 |
|
Если изображение имеет тип файла SVG, включите также role="img"
, что необходимо в связи с VoiceOver ошибками.
1 |
|
Эти примеры включают косую черту в конце, также ошибочно называемую самозакрывающимся тегом; это свойство XML, включая SVG и XHTML, но не HTML. Подробнее об этом см. примечание в модуле forms.
Написание эффективных описаний изображений alt
.¶
Атрибуты Alt должны быть краткими и лаконичными, содержать всю необходимую информацию, которую передает изображение, и исключать информацию, избыточную по отношению к другому содержимому документа или иную бесполезную. При написании текста тон должен отражать тон сайта.
Чтобы написать эффективный альтернативный текст, представьте, что вы читаете всю страницу человеку, который не может ее видеть. С помощью элемента semantic <img>
пользователи и боты, читающие с экрана, получают информацию о том, что данный элемент является изображением. Включать в alt
фразу "This is an image/screenshot/photo of" является излишним. Пользователю не нужно знать, что это изображение, но ему нужно знать, какую информацию передает изображение.
Обычно вы не говорите: "Это зернистое изображение собаки в красной шапке". Скорее, вы передадите то, что передает изображение в контексте остальной части документа, а то, что вы передадите, будет меняться в зависимости от контекста и содержания окружающего текста.
Например, фотография собаки будет описана по-разному, в зависимости от контекста. Если Пушистик — это аватарка рядом с отзывом о корме для собак Yuckymeat, то достаточно alt="Пушистик"
.
Если фотография является частью страницы усыновления Пушистика на сайте приюта для животных, то целевой аудиторией является потенциальный родитель собаки. Текст должен описывать информацию, переданную на изображении, которая важна для усыновителя и не дублируется в окружающем тексте. Уместно более длинное описание, например, alt="Пушистик, трехцветный терьер с очень короткой шерстью, с теннисным мячиком во рту"
. В тексте страницы, посвященной усыновлению, обычно указываются вид, порода, возраст и пол усыновляемого животного, поэтому их не нужно повторять в тексте alt. Но в письменной биографии собаки, скорее всего, не будет указана длина шерсти, цвет и предпочтения в игрушках. Обратите внимание, что мы не описывали изображение: потенциальному владельцу собаки не нужно знать, находится ли она в помещении или на улице, или что у нее красный ошейник и синий поводок.
При использовании изображений для иконографии, поскольку атрибут alt
обеспечивает доступное имя, передавайте смысл пиктограммы, а не описание изображения. Например, атрибут alt значка лупы — search
. У пиктограммы, похожей на дом, alt-текстом является home
. Описание значка 5-дюймовой дискеты — save
. Если есть две иконки Пушистика, используемые для обозначения лучших практик и антипаттернов, то у улыбающейся собаки в зеленом берете может быть установлен атрибут alt="good"
, а у рычащей собаки в красном берете — alt="bad"
. При этом следует использовать только стандартную иконографию, а при использовании нестандартных пиктограмм, таких как "хороший" и "плохой" пушистик, включать легенду и гарантировать, что пиктограммы не являются единственным способом расшифровки значения элементов пользовательского интерфейса,
Если изображение представляет собой скриншот или график, напишите, что можно узнать из этого изображения, а не описывайте его внешний вид. Хотя изображение, безусловно, может стоить тысячи слов, описание должно кратко передавать все, что можно узнать.
Опускайте информацию, которую пользователь уже знает из контекста и которая иным образом осведомлена в контенте. Например, если вы находитесь на обучающей странице по изменению настроек браузера, а страница посвящена щелчку по значкам в браузере chrome, то URL страницы на снимке экрана не важен. Ограничьте alt
темой: как изменить настройки. В качестве alt
можно написать: "Значок настроек находится в навигационной панели под полем поиска". Не указывайте "screenshot" или "machinelearningworkshop", так как пользователю не нужно знать, что это скриншот, и не нужно знать, где был технический писатель, когда писал инструкцию. Описание изображения основывается на контексте того, зачем оно было включено.
Если изображение показывает, как найти номер версии браузера по адресу chrome://version/
, включите URL в содержимое страницы в качестве инструкции, а в качестве атрибута alt
укажите пустую строку, поскольку изображение не дает никакой информации, которая не содержится в окружающем тексте.
Если изображение не несет никакой дополнительной информации или является чисто декоративным, то атрибут alt
все равно должен присутствовать, но в виде пустой строки.
1 |
|
На сайте MachineLearningWorkshop.com имеется семь изображений переднего плана, следовательно, семь изображений с атрибутами alt: выключатель пасхального яйца, значок руководства, две биографические фотографии Хэла и Евы и три аватара блендера, пылесоса и тостера. Изображение переднего плана, похожее на журнал, является единственным чисто декоративным. На странице также есть два фоновых изображения, которые также являются декоративными и, поскольку добавлены с помощью CSS, недоступны.
Журнал, будучи чисто декоративным, имеет пустой атрибут alt
и role
= none
, поскольку изображение является чисто презентационным SVG. SVG-изображения, если они имеют смысл, должны содержать атрибут role="img"
.
1 |
|
В нижней части страницы расположены три обзора, каждый из которых содержит изображение плаката. Обычно текст alt
— это имя человека, изображенного на плакате.
1 2 3 4 5 |
|
Вместо этого, поскольку это шуточная страница, следует передать то, что может быть неочевидным для слабовидящих пользователей, чтобы они не пропустили юмор; мы используем оригинальную функцию машины в качестве alt
, вместо того чтобы использовать имя персонажа:
1 |
|
Фотографии преподавателей — это не просто аватары, это биографические изображения, поэтому они требуют более подробного описания.
Если бы это был реальный сайт, вы бы дали минимальное описание того, как выглядит преподаватель, чтобы будущий студент мог узнать его при входе в аудиторию.
1 2 3 4 5 |
|
Поскольку это шуточный сайт, вместо этого предоставьте информацию, которая уместна в контексте шутки:
1 2 3 4 5 |
|
Если бы вы читали эту страницу другу по телефону, ему было бы все равно, как выглядит красная точка. В данном случае важна история создания ссылки на фильм.
При написании описательного текста подумайте, какую важную и значимую для пользователя информацию передает изображение, и включите ее в текст. Помните, что содержание атрибута alt
для изображения зависит от контекста. Вся информация, передаваемая на изображении, которая доступна зрячему пользователю и соответствует контексту, — это то, что необходимо передать, и ничего более. Будьте краткими, точными и полезными.
Атрибуты src
и alt
являются минимальными требованиями для встраиваемых изображений. Есть еще несколько атрибутов, которые мы должны обсудить.
Отзывчивые изображения¶
Существует огромное количество размеров области просмотра. Существуют также различные разрешения экранов. Вы не захотите тратить полосу пропускания мобильного пользователя, предоставляя ему изображение, достаточно широкое для большого экрана монитора, но, возможно, захотите предоставлять изображения с более высоким разрешением для миниатюрных устройств, разрешение экрана которых в четыре раза меньше обычного. Существует несколько способов предоставления различных изображений в зависимости от размера области просмотра и разрешения экрана.
<img> srcset
атрибут¶
Атрибут srcset
позволяет предлагать несколько файлов изображений, причем браузер выбирает, какое изображение запрашивать, на основе нескольких медиа-запросов, включая размер области просмотра и разрешение экрана.
Для элемента <img>
может использоваться один атрибут srcset
, но этот srcset
может ссылаться на несколько изображений. Атрибут srcset
принимает список значений, разделенных запятыми, каждое из которых содержит URL-адрес актива, за которым следует пробел, а затем дескрипторы для данного варианта изображения. Если используется дескриптор ширины, то для каждого параметра srcset
, кроме последнего, необходимо также включить атрибут sizes
с медиазапросом или размером источника. Стоит ознакомиться с разделами, посвященными отзывчивым изображениям с srcset
и описательным синтаксисам.
При совпадении изображений srcset
будет иметь приоритет над изображением src
.
<picture>
и <source>
¶
Еще одним способом предоставления нескольких ресурсов и предоставления браузеру возможности отобразить наиболее подходящий актив является элемент <picture>
. Элемент <picture>
является элементом-контейнером для нескольких вариантов изображений, перечисленных в неограниченном количестве элементов <source>
и одном обязательном элементе <img>
.
Атрибуты <source>
включают в себя srcset
, sizes
, media
, width
и height
. Атрибут srcset
является общим для img
, source
и link
, однако в source он реализован несколько иначе, поскольку вместо него медиа-запросы могут быть перечислены в атрибуте media в <srcset>
. <source>
также поддерживает форматы изображений, определенные в атрибуте type
.
Браузер будет рассматривать каждый дочерний элемент <source>
и выбирать среди них наиболее подходящий. Если совпадений не найдено, то выбирается URL атрибута src
элемента <img>
. Доступное имя берется из атрибута alt
вложенного элемента <img>
. Стоит также ознакомиться с разделами Learn, посвященными элементу <picture>
и прескриптивные синтаксисы.
Дополнительные возможности производительности¶
Ленивая загрузка¶
Атрибут loading
указывает браузеру, поддерживающему JS, как загружать изображение. Значение по умолчанию eager
означает, что изображение загружается сразу же после разбора HTML, даже если оно находится за пределами видимой области просмотра. При установке значения loading="lazy"
загрузка изображения откладывается до тех пор, пока оно, скорее всего, не попадет в область просмотра. "Вероятность" определяется браузером на основе расстояния, на котором изображение находится от области просмотра. Это значение обновляется по мере прокрутки изображения пользователем. Ленивая загрузка позволяет экономить полосу пропускания и процессор, повышая производительность для большинства пользователей. Если JavaScript отключен, то в целях безопасности все изображения по умолчанию будут иметь значение eager
.
1 |
|
Соотношение сторон¶
Браузеры начинают рендеринг HTML с момента его получения и делают запросы к активам по мере их появления. Это означает, что когда браузер встречает тег <img>
и делает запрос, он уже отрисовывает HTML. А загрузка изображений может занять некоторое время. По умолчанию браузеры не резервируют место для изображений, кроме размера, необходимого для отображения текста alt
.
Элемент <img>
всегда поддерживал атрибуты height
и width
, не имеющие единицы измерения. Эти свойства вышли из употребления в пользу CSS. В CSS можно определять размеры изображения, часто задавая одно измерение, например max-width: 100%;
, чтобы обеспечить сохранение соотношения сторон. Поскольку CSS обычно включается в <head>
, он разбирается до того, как встретится какой-либо <img>
. Однако без явного указания height
или соотношения сторон, зарезервированное место является высотой (или шириной) текста alt
. Поскольку большинство разработчиков указывают только ширину, получение и отрисовка изображений приводит к кумулятивному сдвигу макета, что вредит web vitals. Для решения этой проблемы браузеры поддерживают соотношение сторон изображения. Включение атрибутов height
и width
в <img>
действует как подсказки по размерам, сообщая браузеру соотношение сторон, что позволяет зарезервировать необходимое количество места для последующего рендеринга изображения. Указывая в изображении значения высоты и ширины, браузер узнает соотношение сторон этого изображения. Когда браузер сталкивается с одним измерением, как в нашем примере с 50%, он сохраняет место для изображения, придерживаясь CSS-измерения, а другое измерение сохраняет соотношение сторон по ширине и высоте.
1 2 3 4 5 6 7 |
|
Изображения по-прежнему будут отзывчивыми, если CSS был настроен правильно, чтобы сделать их отзывчивыми. Да, включенные в состав атрибуты height
и width
будут переопределены с помощью CSS. Цель включения этих атрибутов — зарезервировать пространство с правильным соотношением сторон, что повышает производительность за счет уменьшения смещения макета. Страница будет загружаться примерно столько же времени, но пользовательский интерфейс не будет перескакивать при отображении изображения на экране.
Другие возможности изображения¶
Элемент <img>
также поддерживает атрибуты crossorigin
, decoding
, referrerpolicy
и, в браузерах на базе Blink, fetchpriority
. Редко используется, если изображение является частью карты на стороне сервера, то для пользователей, не имеющих указательных устройств, следует включить булевский атрибут ismap
и вложить <img>
в ссылку.
Атрибут ismap
не нужен и даже не поддерживается для <input type="image" name="imageSubmitName">
, поскольку координаты x
и y
места щелчка передаются во время отправки формы, добавляя значения к имени ввода, если таковое имеется. Например, что-то вроде &imageSubmitName.x=169&imageSubmitName.y=66
будет передано вместе с формой, когда пользователь щелкнет на изображении, отправив его. Если изображение не имеет атрибута name
, то отправляются значения x и y: &x=169&y=66
.