I am trying to make a page which consists of a header, a left nav and some content.
I would like the left nav and the content to reach up to the bottom of the viewport, so that no scroll bar appears for the whole page.
However both the left nav and the content can be very large, so I would like each of them to have a scroll for overflow-y
.
I have tried using blocks/floats but didn't manage to achieve my intended result.
I saw that flex has the flex-grow
which seemed to offer a solution, however I haven't managed to make it work.
In the fiddle below I have attempted to have a column flexbox for the header and remaining site, and a row flexbox for the left nav and content, however these grow beyond the height of the viewport.
https://jsfiddle.net/ph8qnfky/4/
body {
height: 100%;
margin: 0;
}
.viewportDiv {
display: flex;
flex-flow: column;
height: 100%;
}
.header{
background-color: yellow;
height: 100px;
min-height: 100px;
}
.remainingDiv{
background-color: red;
flex-grow: 1;
}
.mainSite {
display: flex;
flex-direction: row;
flex-grow: 1;
/* max-height: 100px; */
}
.leftNav{
background-color: green;
width: 200px;
overflow-y: scroll;
}
.content {
background-color: grey;
overflow-y: scroll;
}
<div class="viewportDiv">
<div class="header">Site header</div>
<div class="remainingDiv">
<div class="mainSite">
<div class="leftNav">
<div>item</div>
<div>item</div>
<div>item</div>
<div>item</div>
<div>item</div>
<div>item</div>
<div>item</div>
<div>item</div>
<div>item</div>
<div>item</div>
<div>item</div>
<div>item</div>
<div>item</div>
<div>item</div>
<div>item</div>
<div>item</div>
<div>item</div>
<div>item</div>
<div>item</div>
<div>item</div>
<div>item</div>
<div>item</div>
<div>item</div>
<div>item</div>
<div>item</div>
</div>
<div class="content">
Lorem ipsum dolor sit amet, <br/> consectetur adipiscing elit. <br/>Aliquam vel ullamcorper ligula. Vestibulum nibh arcu, mollis in commodo ut, tristique sed sapien. Cras elementum facilisis consequat. Suspendisse eleifend gravida arcu, a rhoncus mi placerat at. <br/>Cras et vestibulum nulla, at vestibulum arcu. Pellentesque at aliquam turpis. Integer consequat tristique diam scelerisque consequat. <br/>Nullam mattis condimentum diam, sed tincidunt lacus iaculis a. Sed eu ex arcu. <br/>Nullam libero enim, venenatis quis vehicula id, fermentum vitae sapien. Praesent vehicula est id orci rhoncus, <br/>dignissim sodales risus commodo.
Lorem ipsum dolor sit amet, <br/> consectetur adipiscing elit. <br/>Aliquam vel ullamcorper ligula. Vestibulum nibh arcu, mollis in commodo ut, tristique sed sapien. Cras elementum facilisis consequat. Suspendisse eleifend gravida arcu, a rhoncus mi placerat at. <br/>Cras et vestibulum nulla, at vestibulum arcu. Pellentesque at aliquam turpis. Integer consequat tristique diam scelerisque consequat. <br/>Nullam mattis condimentum diam, sed tincidunt lacus iaculis a. Sed eu ex arcu. <br/>Nullam libero enim, venenatis quis vehicula id, fermentum vitae sapien. Praesent vehicula est id orci rhoncus, <br/>dignissim sodales risus commodo.
Lorem ipsum dolor sit amet, <br/> consectetur adipiscing elit. <br/>Aliquam vel ullamcorper ligula. Vestibulum nibh arcu, mollis in commodo ut, tristique sed sapien. Cras elementum facilisis consequat. Suspendisse eleifend gravida arcu, a rhoncus mi placerat at. <br/>Cras et vestibulum nulla, at vestibulum arcu. Pellentesque at aliquam turpis. Integer consequat tristique diam scelerisque consequat. <br/>Nullam mattis condimentum diam, sed tincidunt lacus iaculis a. Sed eu ex arcu. <br/>Nullam libero enim, venenatis quis vehicula id, fermentum vitae sapien. Praesent vehicula est id orci rhoncus, <br/>dignissim sodales risus commodo.
Lorem ipsum dolor sit amet, <br/> consectetur adipiscing elit. <br/>Aliquam vel ullamcorper ligula. Vestibulum nibh arcu, mollis in commodo ut, tristique sed sapien. Cras elementum facilisis consequat. Suspendisse eleifend gravida arcu, a rhoncus mi placerat at. <br/>Cras et vestibulum nulla, at vestibulum arcu. Pellentesque at aliquam turpis. Integer consequat tristique diam scelerisque consequat. <br/>Nullam mattis condimentum diam, sed tincidunt lacus iaculis a. Sed eu ex arcu. <br/>Nullam libero enim, venenatis quis vehicula id, fermentum vitae sapien. Praesent vehicula est id orci rhoncus, <br/>dignissim sodales risus commodo.
</div>
</div>
</div>
</div>
I would like to achieve both leftNav and content to cut off at viewport end and have their scroll bars enabled.
I am trying to solve this with flex as it seemed to be a good fit, but if there is a non-flex solution involving only css I would not have a problem using it.
Best regards