Цель состоит в том, чтобы визуализировать объект без почтового ящика, если соотношение сторон находится в заданных пределах, например от 16: 9 до 4: 3.
Например, когда доступная ширина 16: Изображение 9 уменьшается ниже 16: 9, мы хотим обрезать левую и правую стороны изображения.Если ширина будет уменьшена ниже 4: 3, мы хотим сохранить это соотношение и начать уменьшать.
В этом примере вы можете видеть, как масштабируется объект.Проблема с этим подходом заключается в том, что масштабирование происходит немедленно, как только доступное пространство становится еще одним пикселем.
.iframe {
border: 1px solid black;
width: 350px;
height: 350px;
resize: both;
overflow: auto;
}
.wrapper {
background-color: #c05046;
height: 100%;
display: flex;
}
.image {
margin: 0 auto;
max-width: 100%;
max-height: 100%;
object-fit: contain;
}
<div class="iframe">
<div class="wrapper">
<img class="image" src="https://i.ytimg.com/vi/PX-0Nrg4Yhw/maxresdefault.jpg">
</div>
</div>
[В примерах смоделирован iframe, и вы можете изменить его размер для изменения доступного пространства.]
Трюк с соотношением жидкостейкак объяснено в https://voormedia.com/blog/2012/11/responsive-background-images-with-fixed-or-fluid-aspect-ratios может каким-то образом достичь масштабирования между 2 коэффициентами, но имеет несколько недостатков:
- Он работает с фиксированной высотой и имеет только ширину шкалы, что делает его работу горизонтально, но непо вертикали.
- Объект не произвольный объект, а
background-image
, что означает, что этот трюк, вероятно, не будет работать с видео и другими объектами.
.iframe {
background-color: #c05046;
border: 1px solid black;
width: 350px;
height: 350px;
resize: both;
overflow: auto;
}
.column {
max-width: 640px;
}
figure.fluidratio {
margin: 0;
padding-top: 15%; /* slope */
height: 240px; /* start height */
background-image: url(https://i.ytimg.com/vi/PX-0Nrg4Yhw/maxresdefault.jpg);
background-size: cover;
-moz-background-size: cover; /* Firefox 3.6 */
background-position: center; /* Internet Explorer 7/8 */
}
<div class="iframe">
<div class="column">
<figure class="fluidratio"></figure>
</div>
</div>
Я видел, как кто-то предлагал использовать встроенный SVG, но не получил примеры для работы.
Любые отзывы приветствуются.