Адаптивные изображения в CSS

помогите пожалуйста с CSS на моём сайте.

Как будет правильно сделать следующий функционал?

1)Изображение было по центру экрана.(можно задействовать position:fixed)

2)Изображение не должно выходить за рамки экрана или контейнера.

3)При изменении горизонтального изображения на вертикальное , было видно большую часть картинки.

Вот пример двух изображений: https://images.unsplash.com/photo-1581888517319-570283943d82?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjF9&auto=format&fit=crop&w=750&q=80 (вертикальное)

https://images.unsplash.com/photo-1534759846116-5799c33ce22a?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1376&q=80 (горизонтальное)

Писать javascript для изменения изображений не обязательно.


Ответы (1 шт):

Автор решения: CbIPoK2513

В background-size действуют такие правила как:

cover - cмещаемый контент меняет свой размер таким образом, чтобы сохранять свои пропорции при заполнении блока: окончательный размер контента будет определен как "покрытие" блока, ограничиваясь его шириной и высотой.

contain - смещаемый контент меняет свой размер таким образом, чтобы подстроится под область внутри блока пропорционально собственным параметрам: окончательный размер контента будет определен как "помещенный внутрь" блока, ограничиваясь его шириной и высотой.

Данные правила действую и в свойстве object-fit, которое работает для тега <img> и <video>.

Пример использования:

h4 {margin-bottom: 0;}

.viewport {
  display: flex;
  flex-direction: row;
  justify-content: center;
  align-items: center;
  width: 100%;
  min-height: 180px;
  height: 50vh;
  max-height: 500px;
  margin-bottom: 20px;
  overflow: hidden;
  background: red;
}

.viewport.-bg .img,
.viewport.-img .img {
  display: block;
  width: 50%;
  height: 100%;
}

.viewport.-bg .img {
  background-repeat: no-repeat;
  background-size: 100% 100%;
  background-position: center center;
}

.viewport.-bg .img.-vertical {
  background-image: url('https://i.imgur.com/ArGfW4l.png');
}

.viewport.-bg .img.-horizontal {
  background-image: url('https://i.imgur.com/Qjz8bz0.png');
}

.viewport.-bg.-cover .img {
  background-size: cover;
}

.viewport.-bg.-contain .img {
  background-size: contain;
}

.viewport.-img .img > img {
  width: 100%;
  height: 100%;
}

.viewport.-img.-cover .img > img {
  object-fit: cover;
}

.viewport.-img.-contain .img > img{
  object-fit: contain;
}
<h2>background-size</h2>

<h4>Без свойства</h4>
<div class="viewport -default -bg">
  <div class="img -vertical"></div>
  <div class="img -horizontal"></div>
</div>

<h4>С background-size: cover</h4>
<div class="viewport -cover -bg">
  <div class="img -vertical"></div>
  <div class="img -horizontal"></div>
</div>

<h4>С background-size: contain</h4>
<div class="viewport -contain -bg">
  <div class="img -vertical"></div>
  <div class="img -horizontal"></div>
</div>

<hr>

<h2>object-fit</h2>

<h4>Без свойства</h4>
<div class="viewport -default -img">
  <div class="img -vertical">
    <img src="https://i.imgur.com/ArGfW4l.png">
  </div>
  <div class="img -horizontal">
    <img src="https://i.imgur.com/Qjz8bz0.png">
  </div>
</div>

<h4>с object-fit: cover</h4>
<div class="viewport -cover -img">
  <div class="img -vertical">
    <img src="https://i.imgur.com/ArGfW4l.png">
  </div>
  <div class="img -horizontal">
    <img src="https://i.imgur.com/Qjz8bz0.png">
  </div>
</div>

<h4>с object-fit: contain</h4>
<div class="viewport -contain -img">
  <div class="img -vertical">
    <img src="https://i.imgur.com/ArGfW4l.png">
  </div>
  <div class="img -horizontal">
    <img src="https://i.imgur.com/Qjz8bz0.png">
  </div>
</div>

→ Ссылка