CSS object-fit — як картинка вписується в рамку


Опис

object-fit — це CSS-властивість, яка визначає, як вміст елемента <img>, <video>, або іншого елемента, що містить зображення або відео, буде масштабуватись і вписуватись у контейнер. Її часто використовують для забезпечення коректного відображення медіаконтенту без спотворень.

Застосовується:

  • Галереї зображень для підтримання однакового вигляду зображень.
  • Адаптивне відображення відео.
  • Прев’ю картинок або аватарів.
автор: NagarD

Загальний опис

автор: NagarD

Порада

Для зображень дуже схоже на властивість background-size, але не дозволяє вказати конкретні розміри у пікселях.

автор: NagarD
Порада

Задавайте властивість безпосередньо картинці <img>, а не батьківському контейнеру.

автор: NagarD
Нотатка

Ця властивість вказує змісту заповнювати контейнер різними способами; такі як "зберегти це співвідношення сторін" або "розтягнути і зайняти якомога більше місця".

автор: NagarD
Нотатка

Працює тільки якщо картинці задано хоча б один розмір: ширина або висота. Інакше браузер не розуміє, в яку область потрібно вписати картинку.

автор: NagarD
Нотатка

Чудово працює в комбінації з властивістю object-position.

автор: NagarD

Синтаксис

object-fit: contain | cover | fill | none | scale-down;

Властивість object-fit може отримувати 5 значень:

contain

Вміщує повністю (є поля, немає обрізки). Зберігає пропорції зображення та масштабує його так, щоб воно повністю помістилося в контейнер.

Зображення не обрізається, але через різницю в пропорціях між зображенням і контейнером можуть залишатися порожні області.

запропонував(ла): NagarD

cover

Заповнює повністю (немає полів, є обрізка). Зберігає пропорції зображення та масштабує його так, щоб воно повністю заповнило контейнер.

Частина зображення може бути обрізана, якщо його пропорції відрізняються від пропорцій контейнера.

Ідеально підходить для створення фонів або повноекранних зображень без спотворень.

запропонував(ла): NagarD

fill

Об'єкт розтягується, щоб заповнити контейнер повністю, навіть якщо це спотворює його пропорції.

Зображення може виглядати стиснутим або витягнутим, якщо його співвідношення сторін відрізняється від контейнера.

автор: NagarD

none

Відображається в оригінальному розмірі. Якщо його розмір більший за контейнер, частина об'єкта буде прихована.

Використовується, коли важливо показати оригінальну роздільну здатність.

автор: NagarD

scale-down

Працює як none або contain, залежно від того, яке зменшує об'єкт більше.

Показує об'єкт у натуральному розмірі, якщо він менший за контейнер, або масштабує його до contain, якщо об'єкт більший.

автор: NagarD

Значення без задання: fill
Наслідує: Ні
Анімується: Ні
JavaScript синтаксис: object.style.objectFit = 'cover';

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE Microsoft Internet Explorer
32 36 10 19 79
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
4.4.3 32 36 10

Приклади

+ запропонувати свій приклад у пісочниці

Та сама картинка 300×150 у трьох однакових квадратних рамках 140×140. fill (без задання) сплющує коло в овал, cover заповнює рамку й обрізає боки, contain вписує все зображення й лишає порожні смуги.

HTML

<div class="row">
  <figure>
    <img class="fill" src="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='300' height='150'><rect width='300' height='150' fill='%234a6fa5'/><circle cx='150' cy='75' r='62' fill='%23ffd166'/></svg>" alt="Жовте коло на синьому тлі">
    <figcaption>fill (без задання)</figcaption>
  </figure>
  <figure>
    <img class="cover" src="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='300' height='150'><rect width='300' height='150' fill='%234a6fa5'/><circle cx='150' cy='75' r='62' fill='%23ffd166'/></svg>" alt="Жовте коло на синьому тлі">
    <figcaption>cover</figcaption>
  </figure>
  <figure>
    <img class="contain" src="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='300' height='150'><rect width='300' height='150' fill='%234a6fa5'/><circle cx='150' cy='75' r='62' fill='%23ffd166'/></svg>" alt="Жовте коло на синьому тлі">
    <figcaption>contain</figcaption>
  </figure>
</div>

CSS

body {
  font-family: monospace;
  font-size: 13px;
  padding: 14px;
}

.row {
  display: flex;
  gap: 16px;
  flex-wrap: wrap;
}

figure {
  margin: 0;
}

figcaption {
  margin-top: 6px;
  color: #444;
  text-align: center;
}

img {
  display: block;
  width: 140px;
  height: 140px;
  background-color: #eee;
  border: 2px solid #333;
}

.fill {
  object-fit: fill;
}

.cover {
  object-fit: cover;
}

.contain {
  object-fit: contain;
}
автор: NagarD

Коментарі

Коментарів ще немає — будьте першим!

Відповідь для

Як форматувати текст?
Пишемо Виходить
**важливо**
*акцент*
~~застаріле~~
Виділення в тексті. Те саме роблять кнопки панелі, що спливає над виділеним.
## Як працює каскад
### Порядок оголошень
Заголовки всередині тексту. Найбільший не потрібен — він у сторінки вже є.
[[css/property/color]] Посилання на сторінку довідника. Наберіть [[ — поле веде сходинками (розділ → тип → сторінка), а хибний ключ підкреслить хвилею.
[[!sandbox/S0oh1hBm]] Живий приклад окремим рядком — саме вікно результату. Той самий ключ зі знаком !: наберіть [[! і дійдіть сходинками до потрібної сторінки, список покаже її приклади.
[MDN](https://developer.mozilla.org) Посилання на чужий сайт.
![Схема каскаду](https://site.com/схема.png) Картинка. Опис обов'язковий: його читають пошуковик і незрячі.
Задайте `display: grid` контейнеру Код усередині речення.
```css
.card { display: grid }
```
Код блоком. Мова після трьох лапок вмикає підсвітку.
- Походження
1. Походження
Перелік: маркований і нумерований.
- [ ] дописати приклади
- [x] перевірити в Firefox
Перелік завдань із галочками. Пробіл у порожніх дужках обов'язковий.
> Порядок важить лише за рівної ваги. Цитата на всю ширину абзацу.
Специфічність
: вага селектора; більша перемагає
Список означень: термін, а під ним пояснення з відступом. Пробіл після двокрапки обов'язковий.
Каскад має три критерії[^1]
[^1]: Походження, специфічність, порядок.
Виноска: номер у тексті, примітка внизу сторінки. Без згадки [^1] у тексті примітка не з'явиться.
Відповідь: ||сорок два|| Ховає те, що між рисками: читач бачить на цьому місці розмиту пляму, а решта речення лишається звичайною. Клац — і текст відкрито.
|| Показати рішення
Задайте контейнеру `display: grid`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

Увійдіть — коментар з'явиться одразу, без капчі й очікування перевірки.

Правка
Зворотний зв'язок
Вхід