I have a layout like this:
<div class="flexbox">
<div class="header"></div>
<div class="main"></div>
<div class="footer"></div>
</div>
and css for it:
html,
body {
height: 100%;
}
.flexbox {
display: flex;
flex-direction: column;
flex-wrap: nowrap;
justify-content: flex-start;
align-content: stretch;
align-items: flex-start;
height: 100%;
width: 100%;
}
.flexbox .main {
order: 0;
flex: 1 1 auto;
align-self: stretch;
}
.flexbox .header,
.flexbox .footer {
order: 0;
flex: 0 1 auto;
align-self: stretch;
}
in the above .main
column is stretched 100% height
, all this works perfect, now adding .flexbox-row
inside .main
:
<div class="flexbox">
<div class="header"></div>
<div class="main">
<div class="flexbox-row">
<div class="first"></div>
<div class="second"></div>
<div class="third"></div>
</div>
</div>
<div class="footer"></div>
</div>
and css:
.flexbox-row {
display: flex;
flex-direction: row;
flex-wrap: nowrap;
justify-content: flex-start;
align-content: stretch;
align-items: flex-start;
}
.flexbox-row .first,
.flexbox-row .second,
.flexbox-row .third {
order: 0;
flex: 0 1 auto;
align-self: stretch;
}
.flexbox-row .second {
order: 0;
flex: 1 1 auto;
align-self: stretch;
}
but for some reason .main
column the second one does not stretch 100% in height
anymore.
Here is jsbin demo
Add height:100%
to .flexbox-row
I've simplified your rules, there were unnecessary properties there.
html,
body {
height: 100%;
margin: 0
}
.flexbox {
display: flex;
flex-direction: column;
flex-wrap: nowrap;
height: 100%;
width: 100%;
}
.flexbox .main {
flex: 1;
background: red
}
.flexbox .header,
.flexbox .footer {
background: green;
padding:1em
}
.flexbox-row {
display: flex;
height: 100%;
}
.flexbox-row .first,
.flexbox-row .second,
.flexbox-row .third {
background: #C9E1F4;
padding: 1em;
}
.flexbox-row .second {
flex: 1;
background: #A8EDAC
}
<div class="flexbox">
<div class="header">Header</div>
<div class="main">
<div class="flexbox-row">
<div class="first">First</div>
<div class="second">Main</div>
<div class="third">Third</div>
</div>
</div>
<div class="footer">Footer</div>
</div>
UPDATE
In Chrome and Safari, the height of (non flex) children are not recognized in percentages. However Firefox and IE recognize and scale the children based on percentage heights.
Source
So a workaround for that is adding .position:relative
to .main
and position:absolute
, width
/height:100%
to .flexbox-row
html,
body {
height: 100%;
margin: 0
}
.flexbox {
display: flex;
flex-direction: column;
flex-wrap: nowrap;
height: 100%;
width: 100%
}
.flexbox .main {
flex: 1;
background: red;
position: relative
}
.flexbox .header,
.flexbox .footer {
background: green;
padding: 1em
}
.flexbox-row {
display: flex;
position:absolute;
height: 100%;
width: 100%
}
.flexbox-row .first,
.flexbox-row .second,
.flexbox-row .third {
background: #C9E1F4;
padding: 1em;
}
.flexbox-row .second {
flex: 1;
background: #A8EDAC
}
<div class="flexbox">
<div class="header">Header</div>
<div class="main">
<div class="flexbox-row">
<div class="first">First</div>
<div class="second">Main</div>
<div class="third">Third</div>
</div>
</div>
<div class="footer">Footer</div>
</div>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With