Пропорции для img
Управляем пропорциями изображения с помощью CSS
В этом очень небольшом обзоре мы изучим, как установить соотношение сторон (пропорции) для изображения, размещаемого на HTML-странице. Для чего это нужно? К примеру, полученные знания будут полезны, если возникает необходимость уместить картинки различных размеров и пропорций в квадратный блок (или любой другой блок с четко определенными размерами и соотношением сторон), не искажая изображения.
Следует понимать, что в данном случае мы будем манипулировать CSS-свойствами, ни одно изображении не пострадает и сохранит свое первозданное состояние.
Содержание
Изображение фиксированного размера
Если на страницу нужно вывести картинку заранее определенных размеров, можно воспользоваться атрибутами width
и height
.
Так как мы не знаем размеры и пропорции исходного изображения, применим CSS-свойство object-fit
. Таким образом, мы сможем быть уверены, что картинка не деформируется.
HTML:
<img width="200" height="200" src="/path/to/image.jpeg" alt="">
CSS:
img {
object-fit: cover;
}
Результат можно увидеть на нижеприведенной иллюстрации. Заметьте: исходное изображение имеет большую ширину, но оно не подверглось искажениям, вместо этого оно “обрезано” по центру:
Свойство object-fit
принимает значения fill
, contain
, cover
, none
, scale-down
. Подробно информацию можно изучить на сайте MDN.
Изображение нефиксированного размера
Чтобы привести картинку, изменяющую свои размеры вместе с родительским блоком, к определенным пропорциям нужно воспользоваться оберткой. Оборачивающий элемент заставит изображение сохранять определенные пропорции, так как само изображение заполнит всю его площадь.
HTML:
<div class="aspect-ratio-box">
<img src="/media/desk.jpg" alt=""/>
</div>
CSS:
/* Position child elements relative to this element */
.aspect-ratio-box {
position: relative;
}
/* Create a pseudo element that uses padding-bottom to take up space */
.aspect-ratio-box::after {
display: block;
content: '';
/* 16:9 aspect ratio */
padding-bottom: 56.25%;
}
/* Image is positioned absolutely relative to the parent element */
.aspect-ratio-box img {
/* Image should match parent box size */
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
}
Приблизительно так будет выглядеть результат при соотношении сторон 16:9:
Свойство padding-bottom
определяет высоту родительского контейнера, выраженную в процентах от его ширины. Например, при ширине блока 400px результирующая высота составит 56,25% от 400px, то есть около 225px.
Для того, чтобы определить нужное нам значение padding-bottom
необходимо разделить высоту на ширину.
Например, при соотношении сторон 16:9, арифмитические манипуляции будут выглядеть так:
9 / 16 = 0.5625
Выразим результ в процентах (умножим полученное число на 100):
0.5625 * 100 = 56.25
Результат: 56.25%
Вот и все.
Заключение
Мы научились выводить на HTML-изображение в различных пропорциях без деформации исходной картинки. Предложенные варианты работы с изображениями фиксированных и нефиксированных охватывают значительную часть стандартных ситуаций, возникающих при верстке.