В идеальном мире разработчик берёт подготовленную картинку из макета, вставляет в вёрстку и всё получается отлично. Но в реальности работа часто связана не только с вёрсткой, но и с поддержкой сайта. Некоторые картинки могут заменяться или обновляться. Контент-менеджер может прислать картинку в любом разрешении, а верстальщик должен уметь корректно её разместить.
В тех ситуациях, когда картинка не соответствует размеру бокса, но её нужно вставить, рекомендуется использовать object-fit
. Он определяет, как элемент реагирует на размеры своего бокса. object-fit
предназначается для замещаемых элементов — <img>
, <video>
, <object>
, <input type="image">
.
С помощью object-fit
можно обрезать встроенное изображение и определить, как оно будет сжиматься и растягиваться.
Значения свойства object-fit
Каждое изображение имеет оригинальный размер и бокс, в котором отображается. Например, картинка может иметь размеры 1920x1080px
, а бокс будет 1024x768px
. Изображение сожмётся до бокса, и пользователь увидит сжатые размеры, но при этом оригинальный размер картинки останется прежним.
Свойство object-fit
имеет несколько значений, каждое из которых влияет на отображение изображений.
Значение fill
fill
— изображение заполняет всю доступную область элемента, при этом его пропорции могут быть искажены. Задача fill
— растянуть картинку до размеров её бокса. Из-за этого могут получаться сплющенные картинки.
<img class="keks" src="./images/keks3.jpg" width="600px" height="397px" alt="Кекс">
.keks {
width: 800px;
background-color: #ccc;
object-fit: fill;
}
Значение contain
contain
— изображение пропорционально масштабируется, чтобы целиком поместиться внутри родительского элемента. При этом изображение может иметь пустые области по бокам, сверху или снизу.
Задача contain
— сохранить пропорции оригинальной картинки, бокс заполнять не обязательно.
<img class="keksblack" src="./images/keks4.jpg" width="700px" height="463px" alt="Кекс">
.keksblack {
width: 900px;
background-color: #ccc;
object-fit: contain;
}
Значение contain
удобно использовать для галереи фотографий. Если требуется сменить фото, то новое изображение не всегда идеально подходит под размеры бокса. Значение contain
позволит расположить в галерее новое фото, сохранив пропорции и не обрезав важные части.
Также это значение подходит для размещения логотипов, у которых есть определённый дизайн и они не должны меняться.
⭐ Для всех ситуаций, когда ограничена область показа и когда изображение точно не должно изменяться, используйте object-fit: contain
.
Значение cover
cover
— изображение масштабируется таким образом, чтобы полностью заполнить родительский элемент. Пропорции сохранятся, но всё, что не поместится в размер бокса, обрежется.
<img class="keks" src="./images/keks3.jpg" width="600px" height="397px" alt="Кекс">
.keks {
width: 500px;
background-color: #ccc;
object-fit: cover;
}
Значение none
none
— изображение будет отображаться в своих естественных размерах, игнорируя размеры родительского элемента. В этом случае изображение может выходить за пределы элемента или быть меньше его размеров.
<img class="keks" src="./images/keks5.jpg" width="600px" height="397px" alt="Кекс">
.keks {
width: 500px;
background-color: #ccc;
object-fit: none;
}
Значение scale-down
scale-down
— это значение определяется автоматически и выбирает более подходящее значение между none
и contain
. Если размеры изображения больше размеров родительского элемента, то scale-down
будет вести себя как contain
, иначе — как none
.
<img class="keks" src="./images/keks5.jpg" width="600px" height="397px" alt="Кекс">
.keks {
width: 500px;
background-color: #ccc;
object-fit: scale-down;
}
Как использовать object-fit на практике
Для применения свойства object-fit
выберите нужное значение и добавьте его к соответствующему элементу в CSS. Например, чтобы изображение полностью заполнило родительский элемент без искажения пропорций, используйте следующий код:
.keks {
object-fit: cover;
max-width: 100%;
max-height: 100%;
}
В статьях, тоже важно соблюдать пропорции картинок. При изменении картинок важно следить, чтобы вёрстка не сломалась.
Например, если картинка изменится, как видим ниже, то контент вокруг перестроится. В этом случае ничего не нужно делать, пропорции картинки не нарушают вёрстку.
Если в разметку добавить огромную картинку, она может нарушить сетку страницы.
Чтобы этого не происходило, рекомендуется добавлять изображениям max-width: 100%
. Тогда максимальный размер картинки всегда будет соответствовать размеру её родителя, и она не сможет выйти за его пределы. Всегда следуйте этому правилу.
Свойство object-fit
— удобный инструмент, который позволяет легко управлять отображением изображений на веб-страницах. Свойство контролирует соотношение сторон и поведение изображения при изменении размеров его родительского элемента.