Картинки — важная часть веба. Они делают сайты визуально выразительными, помогают передать смысл, иллюстрируют текст и даже играют функциональную роль (например, иконки или изображения товаров). И у HTML есть сразу несколько способов вставки изображений.
Классика жанра: тег <img>
СкопированоСамый очевидный способ вставить изображение — использовать тег <img>
:
<img src="kotik.webp" alt="Кот по кличке Комaру с белой грудкой и серо-чёрными полосками на теле в очках с жёлтыми линзами смотрит прямо в камеру">
<img src="kotik.webp" alt="Кот по кличке Комaру с белой грудкой и серо-чёрными полосками на теле в очках с жёлтыми линзами смотрит прямо в камеру" >
Этот способ хорош для вставки контентных изображений — тех, которые несут смысл. Например, фото товара или иллюстрации к статье.
Современный подход: <picture>
СкопированоЕсли нужно подгружать разные изображения в зависимости от устройства или использовать адаптивные форматы, пригодится тег <picture>
:
<picture> <source srcset="cat.webp" type="image/webp"> <source srcset="cat.jpg" type="image/jpeg"> <img src="cat.jpg" alt="Белый котик смотрит в окно, на фоне коричневый котик тоже смотрит в окно" ></picture>
<picture> <source srcset="cat.webp" type="image/webp"> <source srcset="cat.jpg" type="image/jpeg"> <img src="cat.jpg" alt="Белый котик смотрит в окно, на фоне коричневый котик тоже смотрит в окно" > </picture>
<picture>
позволяет указать несколько версий изображения. Браузер сам выберет подходящее по поддерживаемому формату.
Через CSS
СкопированоИзображения можно использовать как фоновые с помощью background
:
.container { background-image: url("kotik.jpg");}
.container { background-image: url("kotik.jpg"); }
Этот способ подходит для декоративных изображений, которые не несут смысловой нагрузки. Такие изображения не нужно описывать в alt
.
Через <object>
и <embed>
СкопированоЭти способы используются редко, но они позволяют встроить интерактивный SVG или даже PDF:
<object data="chart.svg" type="image/svg+xml"></object>
<object data="chart.svg" type="image/svg+xml"></object>
<embed src="diagram.svg" type="image/svg+xml">
<embed src="diagram.svg" type="image/svg+xml">
Обычно <img>
и <picture>
предпочтительнее.
Через <canvas>
СкопированоЭто уже не просто картинка, а полноценный рисовальный холст:
<canvas id="myCanvas" width="259" height="194"></canvas>
<canvas id="myCanvas" width="259" height="194"></canvas>
На нём можно «рисовать» изображения с помощью JavaScript:
const canvas = document.getElementById('myCanvas')const ctx = canvas.getContext('2d')const img = new Image()img.src = 'cat.jpg'img.onload = () => ctx.drawImage(img, 0, 0)
const canvas = document.getElementById('myCanvas') const ctx = canvas.getContext('2d') const img = new Image() img.src = 'cat.jpg' img.onload = () => ctx.drawImage(img, 0, 0)
<canvas>
используется в играх, графиках, анимации.
Какой способ выбрать?
Скопировано<img>
— почти всегда подходит, если нужно просто вставить картинку.<picture>
— для адаптивности, ретина-дисплеев, .webp и .avif.<object>
и<embed>
— когда нужно вставить PDF или интерактивные медиа.<canvas>
— когда изображение нужно рисовать динамически.
На практике
Скопированосоветует Скопировано
🛠 В своих проектах я часто использую комбинацию <img>
для смысловых изображений, <picture>
если нужна адаптивность, а background
для иконок и фонов.
🛠 Когда работал с электронной библиотекой, использовал <picture>
для обложек книг: WebP — по умолчанию, JPEG — как запасной вариант. Это экономило трафик и ускоряло загрузку страниц на мобильных.