Когда вы устанавливаете элемент на flex: 1
, он разбивается на:
flex-grow: 1
flex-shrink: 1
flex-basis: 0
В контейнере в направлении столбца (как у вас) вышеприведенные свойства flex применяются вертикально. Это означает, что flex-basis
и height
являются эквивалентными свойствами.
flex-basis = height (in a column-direction container)
Существует очевидная разница между flex-basis: 0
и height: 100%
. Это такая же разница как height: 0
и height: 100%
.
В вашей ситуации, когда .header
и .footer
занимают 140px вертикального пространства, установка среднего элемента (.body
) на height: 100%
обычно вызывает переполнение.
Но поскольку начальное значение flex-контейнера равно flex-shrink: 1
, flex-элементам разрешается сокращаться, и этого не произойдет. Однако, на мой взгляд, это все еще неаккуратное и неточное кодирование.
Установив .body
на flex: 1
, вы устанавливаете высоту на 0
, но также позволяете ей использовать свободную высоту с flex-grow: 1
. В этом случае я бы сказал, что это решение более эффективно.
Подробнее: