Справочник · HTML
Тег <img>: изображение на странице
Тег <img> вставляет изображение в страницу. Он пустой — закрывающего тега нет. Обязательный минимум — адрес файла в src и текстовая замена в alt. Атрибуты width и height резервируют место, а srcset и loading помогают картинке грузиться быстро на любом экране.
- Минимум:
<img src="photo.jpg" alt="Описание">. - Декоративной картинке — пустой
alt="", а не отсутствие атрибута. widthиheightубирают скачок макета при загрузке.loading="lazy"— только для картинок ниже первого экрана.srcsetотдаёт телефону маленький файл, а широкому экрану — большой.
Минимальный пример
<img src="/images/workshop.jpg" alt="Мастер расписывает глиняную чашку"
width="800" height="533">Браузер сразу резервирует место 800×533 в пропорции, загружает файл и показывает его. Если файл не загрузится, вместо него появится текст из alt. Его же прочитает скринридер и учтёт поисковик при поиске по картинкам.
Атрибуты тега img
| Атрибут | Значение | Зачем |
|---|---|---|
src | адрес файла | обязательный |
alt | текст или пустая строка | замена для тех, кто картинку не видит; обязательный |
width, height | числа без px | пропорции и место до загрузки |
srcset | список файлов с шириной | разные размеры под разные экраны |
sizes | ширина картинки в макете | подсказка, какой файл из srcset взять |
loading | lazy / eager | отложенная загрузка |
decoding | async / sync / auto | не блокировать отрисовку при декодировании |
fetchpriority | high / low / auto | приоритет загрузки главной картинки |
title | текст | всплывающая подсказка; alt не заменяет |
Как писать alt
alt — это то, что человек должен узнать из картинки, если её не видит. Отвечай на вопрос «зачем здесь это изображение».
| Картинка | Хороший alt |
|---|---|
| Фото с информацией | «Схема проезда: вход со двора, вторая дверь слева» |
| Декоративная волна, фон | alt="" — скринридер её пропустит |
| Логотип-ссылка на главную | «Praktum — на главную»: описывай действие |
| Иконка рядом с текстом «Скачать» | alt="" — текст уже есть |
| Сложный график | коротко в alt, подробно в подписи figcaption или тексте рядом |
Не начинай с «картинка» или «фото» — скринридер и так объявит изображение. Если alt совсем не указать, скринридер может прочитать имя файла вроде «IMG_2048.jpg».
width и height: убираем скачок макета
<img src="/images/cover.jpg" alt="Обложка курса" width="1200" height="630">img {
max-width: 100%;
height: auto;
}Без размеров браузер не знает высоту картинки, пока она не загрузится, и текст под ней сначала встаёт выше, а потом прыгает вниз. Это ухудшает показатель CLS из Core Web Vitals. Атрибуты задают пропорцию, а CSS max-width: 100%; height: auto позволяет картинке сжиматься под экран с сохранением пропорций.
srcset и sizes: картинка под размер экрана
<img src="/images/hero-800.jpg"
srcset="/images/hero-400.jpg 400w,
/images/hero-800.jpg 800w,
/images/hero-1600.jpg 1600w"
sizes="(max-width: 700px) 100vw, 700px"
alt="Ученики за ноутбуками на занятии"
width="1600" height="900">В srcset перечислены файлы и их реальная ширина (400w). sizes говорит, какой ширины будет картинка в макете: на экране до 700px — во всю ширину окна, иначе 700px. Браузер сам выберет файл с учётом плотности пикселей экрана. Телефон скачает 400 или 800 пикселей вместо 1600 — страница грузится быстрее.
Для иконок фиксированного размера проще дескрипторы плотности: srcset="logo.png 1x, logo@2x.png 2x". Если нужно отдать другой кадр или формат, используй тег picture.
loading="lazy" и главная картинка
<!-- главная картинка первого экрана -->
<img src="/images/hero.jpg" alt="…" width="1600" height="900" fetchpriority="high">
<!-- картинки ниже по странице -->
<img src="/images/step-3.jpg" alt="…" width="800" height="450" loading="lazy">loading="lazy" откладывает загрузку, пока картинка не приблизится к экрану, и экономит трафик на длинных страницах. Но главной картинке первого экрана lazy вредит: она начнёт грузиться позже и ухудшит LCP. Ей, наоборот, ставят fetchpriority="high".
Какой формат выбрать
| Формат | Для чего |
|---|---|
| AVIF, WebP | фото и иллюстрации: в разы легче JPEG при том же качестве |
| JPEG | фото, если нужна совместимость со всем |
| PNG | скриншоты, картинки с прозрачностью и мелким текстом |
| SVG | логотипы, иконки, схемы: векторные, чёткие на любом экране |
| GIF | почти не нужен: анимацию лучше делать видео video |
Не загружай фото 4000 пикселей в карточку шириной 300. Сожми и уменьши файл до нужного размера — это самая заметная экономия на большинстве сайтов.
Картинка-ссылка и подпись
<a href="/">
<img src="/favicon.svg" alt="Praktum — на главную" width="40" height="40">
</a>
<figure>
<img src="/images/flex-axes.png" alt="Главная ось направлена слева направо, поперечная — сверху вниз" width="800" height="400">
<figcaption>Оси Flexbox при flex-direction: row</figcaption>
</figure>Если картинка — единственное содержимое ссылки, её alt становится текстом ссылки, поэтому он описывает цель перехода. Подпись к иллюстрации оформляют через figure и figcaption.
img или фон через CSS
Картинка — часть содержания: фото товара, схема, иллюстрация к уроку. Есть alt, её видит поисковик и скринридер.
Чистое оформление: узор, градиент, декоративная волна. Не несёт смысла и не нуждается в описании.
Частые ошибки
- Не пишут alt вовсе — скринридер прочитает имя файла.
- Ставят пустой alt у картинки с важной информацией.
- Не указывают width и height, и текст прыгает при загрузке.
- Ставят
loading="lazy"главной картинке первого экрана. - Путают регистр в имени файла: на сервере Photo.JPG и photo.jpg — разные файлы.
Доступность
У каждой картинки должен быть атрибут alt: осмысленный — у содержательной, пустой — у декоративной. Текст на картинке дублируй в alt или, лучше, выноси в HTML. Не передавай важную информацию только изображением — например, ошибки в форме или цены. Для сложных схем и графиков давай текстовое описание рядом.
Поддержка браузерами
img, alt, srcset и sizes поддерживаются всеми браузерами. loading="lazy" работает во всех актуальных браузерах. fetchpriority поддерживают свежие версии Chrome, Safari и Firefox; старые браузеры просто игнорируют атрибут, картинка всё равно загрузится. Форматы AVIF и WebP поддерживаются всеми актуальными браузерами.
Практика
Добавь на страницу три изображения: главную картинку первого экрана с высоким приоритетом, иллюстрацию ниже по странице с отложенной загрузкой и подписью, и декоративную волну. Подбери им правильные alt и укажи размеры. Сделай так, чтобы картинки не вылезали за экран на телефоне.
Показать решение
<img src="/images/hero.webp" alt="Ученица верстает первую страницу" width="1600" height="900" fetchpriority="high">
<figure>
<img src="/images/grid.webp" alt="Три колонки карточек одинаковой ширины" width="800" height="450" loading="lazy">
<figcaption>Сетка из трёх колонок на CSS Grid</figcaption>
</figure>
<img src="/images/wave.svg" alt="" width="1200" height="80">
<style>
img { max-width: 100%; height: auto; }
</style>Частые вопросы
Обязателен ли атрибут alt?
Да. Для содержательной картинки — описание, для декоративной — пустой alt="". Без атрибута скринридер может прочитать имя файла, а валидатор покажет ошибку.
Нужно ли закрывать тег img?
Нет, img — пустой элемент. Запись <img ... /> со слэшем тоже допустима в HTML, но не обязательна.
Зачем указывать width и height, если размер задан в CSS?
Атрибуты сообщают браузеру пропорцию до загрузки файла, и он резервирует место. Так текст не прыгает, а CSS height: auto сохраняет пропорцию при сжатии.
Когда использовать loading="lazy"?
Для картинок ниже первого экрана: галерей, иллюстраций в длинной статье. Главной картинке первого экрана lazy не ставят.
Чем srcset отличается от тега picture?
srcset даёт браузеру выбор между размерами одной картинки. picture нужен, когда нужен другой кадр на мобильном или запасной формат для старых браузеров.