Как сделать адаптивную картину, чтобы ее поведение при адаптиве было не стандартным
Что я имед ввиду под нестандартным поведенеием. Если, к примеру, сделать картинку на 100% ширину и высоты, то при object-fit: cover картинка постарается "покрыть блок", т.е, если он там не поместится контент картинки может обрезать так, чтобы пропорции сохранились. Это стандарт.
Я хочу попробовать сделать вот так. Предположим у меня есть широкая картинка 1000x100 пикселей. На левом крае картинки нарисован кот, а на правом крае собака. Я хочу, чтобы когда ширина контейнера картинки уменьшалась, собака и кот приблизились к друг другу, а не просто обрезались. Как это можно сделать?

Ответы (1 шт):
Для данного случая, в виду простоты картинки, думаю, что подойдёт такой вариант (измените размер блока, ухватив его за правый нижний угол):
.picture {
position: relative; margin: 0 auto;
width: 100%; max-width: 1000px; height: 100px;
overflow: hidden; resize: horizontal;
box-shadow: 0 0 0 1px #000;
background-image: url(https://i.stack.imgur.com/03cri.jpg);
background-position: 50% 0; background-repeat: no-repeat;
}
.picture::before,
.picture::after {
content: "";
position: absolute;
height: inherit; width: 50%;
overflow: hidden;
background-image: inherit;
background-repeat: no-repeat;
}
.picture::before {
left: 0; background-position: 0% 0;
-webkit-mask-image: linear-gradient(to right, #000f, #0000);
mask-image: linear-gradient(to right, #000f, #0000);
}
.picture::after {
right: 0; background-position: 100% 0;
-webkit-mask-image: linear-gradient(to left, #000f, #0000);
mask-image: linear-gradient(to left, #000f, #0000);
}
<div class="picture"></div>
Очень много зависит от картинки - вот пример чуть интереснее:
.picture {
position: relative; margin: 0 auto;
width: 100%; max-width: 1200px; height: 627px;
overflow: hidden; resize: horizontal;
box-shadow: 0 0 0 1px #000;
background-image: url(https://pbs.twimg.com/media/Dm-ob6nW4AIdZyz.jpg:large);
background-position: 50% 0; background-repeat: no-repeat;
}
.picture::before,
.picture::after {
content: "";
position: absolute;
height: inherit; width: 50%;
overflow: hidden;
background-image: inherit;
background-repeat: no-repeat;
}
.picture::before {
left: 0; background-position: 0% 0;
-webkit-mask-image: linear-gradient(to right, #000f 80%, #0000);
mask-image: linear-gradient(to right, #000f 80%, #0008);
}
.picture::after {
right: 0; background-position: 100% 0;
-webkit-mask-image: linear-gradient(to left, #000f 80%, #0000);
mask-image: linear-gradient(to left, #000f 80%, #0000);
}
<div class="picture"></div>