Макет CSS: мобильный, вертикальный макет, верхний колонтитул (фиксированная высота), нижний колонтитул (фиксированная высота). Как заполнить оставшееся пространство img, ограниченным по высоте и ширине

avatar
Jeff Hanna
1 июля 2021 в 18:25
227
1
0

Макет: Мобильный, Вертикальный макет, Верхний колонтитул (фиксированная высота), Нижний колонтитул (фиксированная высота). Как заполнить оставшееся пространство с помощью img, ограниченного по высоте и ширине

Это очень распространенный макет для меня на iOS. Пытаюсь понять, как это сделать в CSS.

Вот что я пытаюсь сделать:

Использование flexbox со столбцом flex-direction Установка высоты верхнего и нижнего колонтитула (или можно сделать с помощью flex-basis) flex-shrink: 0 для верхнего и нижнего колонтитула, чтобы они не сжимались flex-shrink: 1 для контейнера изображения, чтобы оно сжималось при необходимости Установка максимальной ширины и максимальной высоты на 100% на изображении object-fit: уменьшение масштаба, чтобы сохранялось соотношение сторон изображения (это означает, что будут горизонтальные или вертикальные полосы)

Проблема: изображение сжимается по ширине, но должно сжиматься еще больше, чтобы соответствовать доступному вертикальному пространству

HTML

<div class='container'>
  <div class='header'>
    Header
  </div>
  <div class='content'>
    <div class='image-container'>
      <img class="cat" src="https://jngnposwzs-flywheel.netdna-ssl.com/wp-content/uploads/2019/05/Transparent-OrangeWhiteCat-764x1024.png"/>
    </div>
  </div>
  <div class='footer'>
    Footer
  </div>
</div>

CSS

.container {
  background-color: #aaa;
  height: 400px;
  width: 175px;
  display: flex;
  flex-direction: column;
  border: 2px solid blue;
}

.box {
  border: 2px solid black;
  display: flex;
  justify-content: center;
  align-items: center;
}

.box1 {
  height: 100px;
  flex-shrink: 0;
}

.box2 {
  flex-shrink: 1;
}

.cat {
  max-width: 100%;
  max-height: 100%;
  object-fit: scale-down;
  border: 2px solid orange;
}

.box3 {
  height: 100px;
  flex-shrink: 0;
}

https://codepen.io/jeffrey-robert/pen/yLbNVZp

Источник

Ответы (1)

avatar
G-Cyrillus
1 июля 2021 в 19:08
0

Если вы используете object-fit, то трюк состоит в том, чтобы установить на img: <9048522867333> и это должно заполнить Flex Child Boxe, детская коробка <904852867736> потребует <90482636> потребует <9048286> потребуется <90485286> 2,6> потребуется <90422867736> потребует <90482867736> потребуется <90482867736> потребуется <9048528677736> потребуется. слишком до заполнить оставшееся пространство.

.container {
  background-color: #aaa555;
  height: 400px;
  width: 175px;
  display: flex;
  flex-direction: column;
  border: 2px solid blue;
}

.box {
  border: 2px solid black;
  display: flex;
  justify-content: center;
  align-items: center;
}

.box1 {
  height: 100px;
  flex-shrink: 0;
}

.box2 {
  flex:1 1 auto;
}

.cat {
  width: 100%;
  height:0;
  min-height:100%;
  object-fit: scale-down;
  border: 2px solid orange;
}

.box3 {
  height: 100px;
  flex-shrink:1;
}
<div class="container">
  <div class="box box1">
    1
  </div>
  <div class="box box2">
    <img class="cat" src="https://jngnposwzs-flywheel.netdna-ssl.com/wp-content/uploads/2019/05/Transparent-OrangeWhiteCat-764x1024.png"/>
  </div>
  <div class="box box3">
    3
  </div>
</div>
Jeff Hanna
1 июля 2021 в 19:40
0

большое спасибо, вы не представляете, сколько людей поставило это в тупик, ха-ха! Никогда бы не догадался, что высота:0 мин-высота:100%

G-Cyrillus
1 июля 2021 в 19:43
0

@JeffHanna, здесь также требуется flex-grow, тогда может работать высота / минимальная высота;)