Решение 1 — резиновая картинка
<img src="cover.jpg" alt="Обложка"
width="600" height="400">
img { max-width: 100%; height: auto; display: block; }
Решение 2 — srcset + sizes
Три файла одной картинки. sizes описывает реальный CSS-размер: 50vw на desktop, 100vw иначе.
480w
960w (мобильный Retina ✓)
1440w (desktop Retina)
<img
src="cover-960.jpg"
srcset="cover-480.jpg 480w,
cover-960.jpg 960w,
cover-1440.jpg 1440w"
sizes="(min-width: 64rem) 50vw, 100vw"
alt="Обложка" width="1440" height="960">
Решение 3 — picture: формат + art direction
портрет
панорама
<picture class="hero-media">
<source type="image/webp" media="(min-width: 64rem)"
srcset="hero-wide.webp 960w, hero-wide@2x.webp 1920w"
sizes="50vw">
<source type="image/webp"
srcset="hero-mobile.webp 480w, hero-mobile@2x.webp 960w"
sizes="100vw">
<img src="hero-mobile.jpg"
alt="Студент верстает адаптивную страницу"
width="960" height="640">
</picture>
.hero-media img {
display: block;
width: 100%;
height: auto;
border-radius: 0.75rem;
}
Почему так: первый
<source> с media ловит desktop
и отдаёт широкий WebP; второй — мобильный WebP; <img> закрывает браузеры без WebP и несёт alt.