Ok, this is my basic website structure:
<body>
<div id="wrapper">
<header><a href="/"> </a></header>
<nav>
<ul>
<li><a href="...">...</a></li>
<li><a href="...">...</a></li>
<li><a href="...">...</a></li>
</ul>
</nav>
<div id="content"></div>
<footer><a href="/"> </a></footer>
</div>
</body>
And here is my CSS basics:
html
{
font-size: 100%;
height: 100%;
line-height: 1.4;
overflow-y: scroll;
}
body
{
background: #EEE url("../images/background.png") repeat-y center center fixed;
color: #333;
height: 100%;
font: 1em 'Lato-Regular';
margin: 0;
padding: 0;
}
#wrapper
{
height: 100%;
margin: 0 auto;
width: 960px;
}
#content
{
min-height: 460px;
height: auto !important;
height: 460px;
margin: 20px 0;
}
This is what I would like to achieve (without using javascript hacks, preferably):
div#content
should have a minimum height of X pixels, but otherwise expand as much as it wants to include the content of the page.div#wrapper
should stretch to fill the whole viewport height with the div#content
being the flexible part that stretch to fill.I'm getting a weird result:
As you can see, the wrapper is not stretching to fill the browser viewport and, by consequence, the footer (the black bar on the bottom) is floating in the middle of the page. Can you help me please?
display:flex;
is the easy nowdays (besides it looks a lot like this question Fill remaining vertical space with CSS using display:flex )
html
{
font-size: 100%;
height: 100%;
line-height: 1.4;
overflow-y: scroll;
}
body
{
background: #EEE url("../images/background.png") repeat-y center center fixed;
color: #333;
height: 100%;
font: 1em 'Lato-Regular';
margin: 0;
padding: 0;
}
#wrapper
{
height: 100%;
margin: 0 auto;
width: 960px;
display:flex;
flex-direction:column
}
#content
{
flex:1;
margin: 20px 0;
/* overflow:auto; add this and it will show a scrollbar when needed and won't push footer down */
}
footer,header {
background:lightgray;
/* no need to set any height, a min-height eventually */
<div id="wrapper">
<header><a href="/">header</a></header>
<nav>
<ul>
<li><a href="...">...</a></li>
<li><a href="...">...</a></li>
<li><a href="...">...</a></li>
</ul>
</nav>
<div id="content"></div>
<footer><a href="/">footer</a></footer>
</div>