Как я могу сказать, что строка макета flexbox занимает оставшееся вертикальное пространство в окне браузера?
У меня трехрядный макет flexbox. Первые две строки имеют фиксированную высоту, но третья - динамическая, и я хотел бы, чтобы она увеличивалась до полной высоты браузера.
У меня есть еще один flexbox в строке 3, который создает набор столбцов. Чтобы правильно настроить элементы в этих столбцах, мне нужно, чтобы они понимали всю высоту браузера - для таких вещей, как цвет фона и выравнивание элементов в основании. Главный макет в конечном итоге будет напоминать это:
.vwrapper {
display: flex;
flex-direction: column;
flex-wrap: nowrap;
justify-content: flex-start;
align-items: stretch;
align-content: stretch;
//height: 1000px;
}
.vwrapper #row1 {
background-color: red;
}
.vwrapper #row2 {
background-color: blue;
}
.vwrapper #row3 {
background-color: green;
flex 1 1 auto;
display: flex;
}
.vwrapper #row3 #col1 {
background-color: yellow;
flex 0 0 240px;
}
.vwrapper #row3 #col2 {
background-color: orange;
flex 1 1;
}
.vwrapper #row3 #col3 {
background-color: purple;
flex 0 0 240px;
}
<body>
<div class="vwrapper">
<div id="row1">
this is the header
</div>
<div id="row2">
this is the second line
</div>
<div id="row3">
<div id="col1">
col1
</div>
<div id="col2">
col2
</div>
<div id="col3">
col3
</div>
</div>
</div>
</body>
Я пробовал добавить height
атрибут, который работает, когда я устанавливаю его на жесткое число, но не когда я его устанавливаю 100%
. Я понимаю, что height: 100%
это не работает, потому что содержимое не заполняет окно браузера, но могу ли я воспроизвести эту идею с помощью макета flexbox?
Ответы:
Вы должны установить
height
изhtml, body, .wrapper
к100%
(для того , чтобы наследовать всю высоту) , а затем просто установитьflex
большее значение , чем1
для ,.row3
а не на других.ДЕМО
источник
установите обертку на высоту 100%
и установите 3-й ряд на гибкий рост
демо
источник
Позвольте мне показать вам другой способ, который работает на 100%. Я также добавлю отступы для примера.
Как видите, мы можем добиться этого с помощью нескольких оболочек для управления, используя атрибуты flex-grow и flex-direction.
1: Когда родительский «flex-direction» является «строкой», его дочерний «flex-grow» работает горизонтально. 2: Когда родительским «flex-direction» является «columns», его дочерний «flex-grow» работает вертикально.
Надеюсь это поможет
Даниэль
источник
div
перебор.flex-pad-y
:)