W3docs

HTML-тег <img>

Тег <img>: атрибуты src и alt, адаптивные srcset/sizes, ленивая загрузка, width/height для CLS, форматы изображений и обработка ошибок.

Тег <img> используется для вставки изображения в HTML-документ. Само изображение не встраивается непосредственно в документ — браузер загружает его из источника, указанного в теге <img>.

HTML img tag

У элемента <img> есть два обязательных атрибута: src, указывающий источник изображения, и alt, задающий альтернативный текст для изображения.

Чтобы сделать HTML-изображения кликабельными, нужно поместить тег <img> внутрь тега <a>, который используется для создания ссылки на изображение.

Синтаксис

Тег <img> является пустым, то есть закрывающий тег не требуется. Он содержит только атрибуты. Однако в XHTML тег <img> должен быть самозакрывающимся (<img />).

Пример HTML-тега <img>:

Пример использования HTML-тега <img>

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
  </head>
  <body>
    <h1>Heading </h1>
    <p>This is Aleq's photo</p>
    <img src="/uploads/media/default/0001/01/25acddb3da54207bc6beb5838f65f022feaa81d7.jpeg" alt="Aleq" width="200" height="185"/>
  </body>
</html>

С помощью CSS можно изменить внешний вид изображения.

Пример тега <img> со стилями CSS:

Как стилизовать HTML-тег <img> с помощью свойств vertical-align и padding в CSS?

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
    <style>
      img {
      border-radius: 50%;
      border: 4px dashed #077cb9;
      width: 300px;
      display: block;
      margin: 0 auto;
      }
    </style>
  </head>
  <body>
    <div>
     <img src="/uploads/media/default/0001/03/e91b0d7a957cadd0c3282d34e423ff0f97799a1d.jpeg" alt="Ararat mountain" width="256" height="256" />
    </div>
  </body>
</html>

Атрибуты src и alt

Атрибут src (source — источник) указывает источник изображения. Он обязателен, так как задаёт путь к изображению. Значением атрибута src может быть как имя файла, так и его URL.

Атрибут alt задаёт альтернативный текст для изображения. Он также обязателен для тега <img>. Его значение — описательный текст, который отображается в браузере до загрузки изображения или если изображение не удалось загрузить.

Декоративные и информативные изображения

Наличие текста в атрибуте alt зависит от назначения изображения:

  • Информативные изображения (фото товара, диаграмма, логотип, несущий смысл) требуют короткого описательного текста alt, передающего ту же информацию, что и само изображение. Описывайте что изображено, а не «изображение с».
  • Декоративные изображения (разделители, заглушки, фоновые украшения, не несущие смысловой нагрузки) должны использовать пустой alt="". Это указывает экранным дикторам пропустить изображение. Не опускайте атрибут alt совсем — его отсутствие приводит к тому, что некоторые экранные дикторы озвучивают имя файла.
<!-- Meaningful: describe the content -->
<img src="ararat.jpg" alt="Snow-capped Mount Ararat at sunrise" />

<!-- Decorative: empty alt so assistive tech skips it -->
<img src="divider.png" alt="" />
Совет

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

Использование "data:image/[type];base64,[base64-string]" в атрибуте src

Формат data:image/[type];base64,[base64-string] можно использовать в качестве значения атрибута src тега img для отображения изображения прямо из HTML-кода, без загрузки из внешнего файла.

Вот пример использования этого формата для отображения изображения в теге img:

Использование "data:image/[type];base64,[base64-string]" в атрибуте src

<img
  src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=="
  alt="Tiny base64-encoded sample image"
  width="5"
  height="5">

В этом примере image/png указывает MIME-тип изображения, а длинная строка после base64, — это данные изображения, закодированные в base64. Приведённая строка представляет собой полноценный (хоть и крошечный) PNG-файл размером 5×5 пикселей.

Обратите внимание, что использование изображений в формате base64 увеличивает размер HTML-файла и может замедлить загрузку страницы. Как правило, этот формат рекомендуется использовать для небольших изображений или иконок, а для более крупных изображений — внешние файлы.

Пример HTML-тега <img> с атрибутами src и alt:

Пример тега img с атрибутами src и alt

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
  </head>
  <body>
    <img src="/uploads/media/default/0001/03/01cc5ccf0ce755075e468cc651f27c354e1b032e.jpeg" alt="Paris" width="256" height="256" />
  </body>
</html>

Зачем задавать ширину и высоту

Всегда задавайте атрибуты width и height (в пикселях, без единиц измерения), соответствующие реальным размерам изображения. Это позволяет браузеру вычислить соотношение сторон изображения и зарезервировать нужное пространство до завершения загрузки файла. Без этих атрибутов страница сначала отрисовывается без места для изображения, а затем смещается при его появлении — это ухудшает опыт пользователя и негативно влияет на Cumulative Layout Shift (CLS), один из показателей Core Web Vitals от Google.

<!-- Browser reserves a 4:3 box immediately, so no layout shift -->
<img src="photo.jpg" alt="Mountain view" width="800" height="600">

Изображение по-прежнему можно масштабировать через CSS. Распространённый и надёжный подход — задать атрибуты width и height для соотношения сторон, а затем сделать изображение адаптивным с помощью CSS:

img {
  height: auto;   /* preserve aspect ratio */
  max-width: 100%; /* never overflow its container */
}

Атрибуты loading и decoding

Атрибут loading откладывает загрузку изображения (и iframe) до тех пор, пока ресурс не окажется достаточно близко к области видимости. Это стандартная функция, поддерживаемая всеми современными браузерами.

Допустимые значения атрибута loading:

  • lazy — откладывает загрузку до тех пор, пока изображение не приблизится к viewport на заданное расстояние. Используйте для изображений ниже сгиба / вне экрана.
  • eager (по умолчанию) — немедленно загружает ресурс.
<img src="defer.png" loading="lazy" alt="Gallery thumbnail" width="500" height="400">
Внимание

Не применяйте ленивую загрузку к самому важному изображению в верхней части страницы (часто это элемент Largest Contentful Paint, или LCP). Ленивая загрузка задерживает его запрос и делает страницу медленнее. Для такого изображения используйте loading="eager" или просто не указывайте атрибут.

Связанный атрибут decoding подсказывает браузеру, как декодировать изображение. decoding="async" позволяет браузеру декодировать изображение в отдельном потоке, не блокируя отрисовку окружающего контента:

<img src="photo.jpg" alt="Landscape" width="800" height="600"
     loading="lazy" decoding="async">

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

Адаптивные изображения: srcset и sizes

Одно фиксированное изображение либо расходует лишний трафик на маленьких экранах, либо выглядит размыто на больших. Атрибуты srcset и sizes позволяют браузеру выбрать наиболее подходящий файл с учётом размера экрана и плотности пикселей устройства, сохраняя при этом один элемент <img>.

  • srcset перечисляет варианты изображений, каждый из которых сопровождается дескриптором ширины (реальная ширина изображения в пикселях, например 480w).
  • sizes сообщает браузеру, какой будет отображаемая ширина изображения при разных брейкпоинтах, чтобы он мог сделать выбор до вычисления макета.
<img
  src="photo-800.jpg"
  srcset="photo-480.jpg 480w,
          photo-800.jpg 800w,
          photo-1200.jpg 1200w"
  sizes="(max-width: 600px) 100vw,
         (max-width: 1000px) 50vw,
         800px"
  alt="Coastline at sunset"
  width="800" height="600">

Здесь браузер читает sizes, вычисляет необходимое количество CSS-пикселей для изображения, умножает на плотность пикселей устройства и загружает наиболее подходящий вариант из srcset. Обычный src остаётся запасным вариантом для браузеров, не поддерживающих srcset.

Если нужно предоставить разные кадрировки для разных макетов (художественное управление) или предложить современные форматы с запасным вариантом (например, AVIF/WebP с резервным JPEG), используйте элемент <picture>.

Поддерживаемые форматы изображений

Форматы файлов изображений — это стандартизированные способы организации и хранения цифровых изображений. Формат файла изображения может хранить данные в несжатом виде, в сжатом формате (с потерями или без) или в формате векторной графики. (Wikipedia).

Разные браузеры поддерживают разные форматы изображений. Ниже приведён список распространённых форматов:

АббревиатураФормат файлаMIME-типРасширение(я) файлаСовместимость с браузерами
APNGAnimated Portable Network Graphicsimage/apng.apngChrome, Edge, Firefox, Opera, Safari
AVIFAV1 Image File Formatimage/avif.avifChrome 85+, Firefox 93+, Safari 16+, Opera
GIFGraphics Interchange Formatimage/gif.gifChrome, Edge, Firefox, Opera, Safari
ICOMicrosoft Iconimage/x-icon.ico, .curChrome, Edge, Firefox, Opera, Safari
JPEGJoint Photographic Expert Group imageimage/jpeg.jpg, .jpeg, .jfif, .pjpeg, .pjpChrome, Edge, Firefox, Opera, Safari
PNGPortable Network Graphicsimage/png.pngChrome, Edge, Firefox, Opera, Safari
SVGScalable Vector Graphicsimage/svg+xml.svgChrome, Edge, Firefox, Opera, Safari
WebPWeb Picture formatimage/webp.webpChrome, Edge, Firefox, Opera, Safari 14+

JPEG и PNG поддерживаются повсеместно и остаются самыми безопасными вариантами по умолчанию. WebP и AVIF — современные форматы, обеспечивающие заметно меньший размер файлов при сопоставимом качестве: AVIF, как правило, сжимает лучше всего, а WebP имеет наибольшую поддержку. Поскольку ряд старых браузеров не поддерживает AVIF, рекомендуется предоставлять эти форматы через элемент <picture> с запасным вариантом в виде JPEG или PNG, а не использовать их напрямую в <img src>.

Ошибки загрузки изображений

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

  • Атрибут src пуст ("") или имеет значение null.
  • URL из атрибута src совпадает с URL текущей страницы.
  • Изображение повреждено и не может быть загружено.
  • Метаданные изображения повреждены настолько, что невозможно получить его размеры, а в атрибутах тега <img> размеры не указаны.
  • Формат не поддерживается браузером.

Вы можете отслеживать событие error с помощью атрибута onerror и подставлять запасное изображение, чтобы пользователи видели заглушку вместо значка сломанного изображения:

<img
  src="profile.jpg"
  alt="User profile photo"
  width="200" height="200"
  onerror="this.onerror=null; this.src='fallback.png';">

Предварительная установка this.onerror=null важна: она удаляет обработчик перед изменением src, чтобы в случае, если запасное изображение тоже не загрузится, обработчик не сработал повторно и не вызвал бесконечный цикл.

Атрибуты

Ниже перечислены текущие стандартные атрибуты элемента <img>. Устаревшие атрибуты указаны отдельно ниже.

АтрибутЗначениеОписание
altтекстЗадаёт альтернативный текст для изображения. Используйте alt="" для чисто декоративных изображений.
crossoriginanonymous | use-credentialsОпределяет, используется ли CORS при загрузке изображения. Изображения, загруженные через CORS, можно использовать в элементе <canvas> без ограничения его функциональности.
decodingsync | async | autoПодсказывает браузеру, как декодировать изображение. async выполняет декодирование вне основного потока.
heightпикселиЗадаёт высоту изображения. Устанавливайте вместе с width, чтобы зарезервировать место и избежать смещения макета.
ismapismapУказывает, что содержимое тега является серверной картой-изображением.
loadingeager | lazyОпределяет, загружается ли изображение немедленно или откладывается до приближения к viewport.
sizesмедиаусловия + размерыСообщает браузеру отображаемую ширину изображения для каждого брейкпоинта, используется вместе с srcset.
srcURLЗадаёт источник изображения.
srcsetURL + дескрипторыСписок через запятую изображений-кандидатов с дескрипторами ширины (w) или плотности пикселей (x).
usemap#mapnameУказывает ссылку на элемент <map>, содержащий координаты клиентской карты-изображения.
widthпикселиЗадаёт ширину изображения. Устанавливайте вместе с height, чтобы зарезервировать место и избежать смещения макета.

Тег <img> также поддерживает глобальные атрибуты и атрибуты событий.

Устаревшие атрибуты

Эти атрибуты устарели в HTML5. Вместо них используйте CSS-альтернативы.

АтрибутЗначенияОписаниеАльтернатива
alignleft right top bottom middleЗадаёт выравнивание изображения относительно окружающих элементов.Свойства CSS float и/или vertical-align.
borderпикселиЗадаёт ширину рамки вокруг изображения.Свойство CSS border.
hspaceСвойство CSS margin.
nameЗадаёт имя элемента.Атрибут id.
vspaceпикселиЗадаёт отступы сверху и снизу изображения.Свойство CSS margin.

Практика

Практика
Как правильно разметить чисто декоративное изображение, чтобы экранные дикторы его пропускали?
Как правильно разметить чисто декоративное изображение, чтобы экранные дикторы его пропускали?
Was this page helpful?