Глиф Учебники

Как сделать адаптивную картинку

Справочник · HTML и CSS · 2 минуты чтения

Две строки CSS решают главную задачу — картинка не шире своего блока и не теряет пропорции:

CSS
img {
  max-width: 100%;
  height: auto;
}

Атрибуты width и height в HTML всё равно оставляйте настоящими размерами файла: по ним браузер знает пропорции заранее и оставляет место, пока картинка грузится.

HTML
<img src="images/park.jpg" alt="Парк весной" width="1600" height="900">

Картинка-обложка нужной формы

Когда у карточек разные фотографии, а рамка под них одна — например, 16 на 9, — помогают aspect-ratio и object-fit:

CSS
.card img {
  width: 100%;
  height: auto;
  aspect-ratio: 16 / 9;
  object-fit: cover;
}

aspect-ratio задаёт пропорции блока, object-fit: cover заполняет его картинкой целиком, обрезая лишнее по краям. object-fit: contain вместо этого покажет картинку целиком, оставив пустые поля.

Разные файлы для разных экранов

Телефону незачем качать фотографию шириной 2000 пикселей. Атрибут srcset перечисляет варианты одного снимка, а браузер сам выбирает подходящий по ширине экрана и плотности пикселей:

HTML
<img
  src="images/park-800.jpg"
  srcset="images/park-400.jpg 400w, images/park-800.jpg 800w, images/park-1600.jpg 1600w"
  sizes="(max-width: 600px) 100vw, 600px"
  alt="Парк весной"
  width="1600"
  height="900">

Файлы разных размеров готовят заранее в любом графическом редакторе.

Разные картинки: тег picture

Если на телефоне нужен другой кадр (например, крупный план вместо широкой панорамы) или другой формат, — тег <picture>:

HTML
<picture>
  <source media="(max-width: 600px)" srcset="images/park-square.jpg">
  <source srcset="images/park.webp" type="image/webp">
  <img src="images/park.jpg" alt="Парк весной" width="1600" height="900">
</picture>

Браузер берёт первый подходящий <source>, а если ни один не подошёл — <img>. Сам <img> внутри обязателен: именно он показывает картинку, а alt и размеры пишутся у него.

Подводные камни