Hi,
That’s the problem with fixed elements and you have to account for them being in the way of other content. For a fluid header and footer then fixed positioning is not the best idea and you would need to script it to allow it to work in a fluid manner.
You also have to remember that if you have any fixed width elements in the fixed footer that cause an overflow then you won’t be able to reach them via the window scrollbars and you would need scrollbars on the fixed elements themselves which starts to look messy.
As an exercise only you could do something with flexbox but the scrollbar is maintained on the main content rather than the window.
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Untitled Document</title>
<style>
html, body {
margin:0;
padding:0;
height:100%;
}
body {
display: flex;
height: 100vh;
flex-direction: column;
}
.content {
flex: 1;
overflow:auto;
}
main.content { background:blue }
header, footer { background:red; }
p { margin:1em }
</style>
</head>
<body>
<header>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed id mauris eu nulla feugiat sagittis nec vel nulla. Suspendisse lobortis, augue at ornare tincidunt, dui erat ultrices eros, sed convallis sapien orci convallis felis. Curabitur nec sapien arcu. Ut molestie gravida facilisis. Proin pharetra varius consectetur. Nullam adipiscing felis a elit pulvinar dignissim. Nam tempor adipiscing elit non varius. </p>
</header>
<main class="content">
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed id mauris eu nulla feugiat sagittis nec vel nulla. Suspendisse lobortis, augue at ornare tincidunt, dui erat ultrices eros, sed convallis sapien orci convallis felis. Curabitur nec sapien arcu. Ut molestie gravida facilisis. Proin pharetra varius consectetur. Nullam adipiscing felis a elit pulvinar dignissim. Nam tempor adipiscing elit non varius. </p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed id mauris eu nulla feugiat sagittis nec vel nulla. Suspendisse lobortis, augue at ornare tincidunt, dui erat ultrices eros, sed convallis sapien orci convallis felis. Curabitur nec sapien arcu. Ut molestie gravida facilisis. Proin pharetra varius consectetur. Nullam adipiscing felis a elit pulvinar dignissim. Nam tempor adipiscing elit non varius. </p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed id mauris eu nulla feugiat sagittis nec vel nulla. Suspendisse lobortis, augue at ornare tincidunt, dui erat ultrices eros, sed convallis sapien orci convallis felis. Curabitur nec sapien arcu. Ut molestie gravida facilisis. Proin pharetra varius consectetur. Nullam adipiscing felis a elit pulvinar dignissim. Nam tempor adipiscing elit non varius. </p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed id mauris eu nulla feugiat sagittis nec vel nulla. Suspendisse lobortis, augue at ornare tincidunt, dui erat ultrices eros, sed convallis sapien orci convallis felis. Curabitur nec sapien arcu. Ut molestie gravida facilisis. Proin pharetra varius consectetur. Nullam adipiscing felis a elit pulvinar dignissim. Nam tempor adipiscing elit non varius. </p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed id mauris eu nulla feugiat sagittis nec vel nulla. Suspendisse lobortis, augue at ornare tincidunt, dui erat ultrices eros, sed convallis sapien orci convallis felis. Curabitur nec sapien arcu. Ut molestie gravida facilisis. Proin pharetra varius consectetur. Nullam adipiscing felis a elit pulvinar dignissim. Nam tempor adipiscing elit non varius. </p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed id mauris eu nulla feugiat sagittis nec vel nulla. Suspendisse lobortis, augue at ornare tincidunt, dui erat ultrices eros, sed convallis sapien orci convallis felis. Curabitur nec sapien arcu. Ut molestie gravida facilisis. Proin pharetra varius consectetur. Nullam adipiscing felis a elit pulvinar dignissim. Nam tempor adipiscing elit non varius. </p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed id mauris eu nulla feugiat sagittis nec vel nulla. Suspendisse lobortis, augue at ornare tincidunt, dui erat ultrices eros, sed convallis sapien orci convallis felis. Curabitur nec sapien arcu. Ut molestie gravida facilisis. Proin pharetra varius consectetur. Nullam adipiscing felis a elit pulvinar dignissim. Nam tempor adipiscing elit non varius. </p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed id mauris eu nulla feugiat sagittis nec vel nulla. Suspendisse lobortis, augue at ornare tincidunt, dui erat ultrices eros, sed convallis sapien orci convallis felis. Curabitur nec sapien arcu. Ut molestie gravida facilisis. Proin pharetra varius consectetur. Nullam adipiscing felis a elit pulvinar dignissim. Nam tempor adipiscing elit non varius. </p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed id mauris eu nulla feugiat sagittis nec vel nulla. Suspendisse lobortis, augue at ornare tincidunt, dui erat ultrices eros, sed convallis sapien orci convallis felis. Curabitur nec sapien arcu. Ut molestie gravida facilisis. Proin pharetra varius consectetur. Nullam adipiscing felis a elit pulvinar dignissim. Nam tempor adipiscing elit non varius. </p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed id mauris eu nulla feugiat sagittis nec vel nulla. Suspendisse lobortis, augue at ornare tincidunt, dui erat ultrices eros, sed convallis sapien orci convallis felis. Curabitur nec sapien arcu. Ut molestie gravida facilisis. Proin pharetra varius consectetur. Nullam adipiscing felis a elit pulvinar dignissim. Nam tempor adipiscing elit non varius. </p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed id mauris eu nulla feugiat sagittis nec vel nulla. Suspendisse lobortis, augue at ornare tincidunt, dui erat ultrices eros, sed convallis sapien orci convallis felis. Curabitur nec sapien arcu. Ut molestie gravida facilisis. Proin pharetra varius consectetur. Nullam adipiscing felis a elit pulvinar dignissim. Nam tempor adipiscing elit non varius. </p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed id mauris eu nulla feugiat sagittis nec vel nulla. Suspendisse lobortis, augue at ornare tincidunt, dui erat ultrices eros, sed convallis sapien orci convallis felis. Curabitur nec sapien arcu. Ut molestie gravida facilisis. Proin pharetra varius consectetur. Nullam adipiscing felis a elit pulvinar dignissim. Nam tempor adipiscing elit non varius. </p>
</main>
<footer>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed id mauris eu nulla feugiat sagittis nec vel nulla. Suspendisse lobortis, augue at ornare tincidunt, dui erat ultrices eros, sed convallis sapien orci convallis felis. Curabitur nec sapien arcu. Ut molestie gravida facilisis. Proin pharetra varius consectetur. Nullam adipiscing felis a elit pulvinar dignissim. Nam tempor adipiscing elit non varius. </p>
</footer>
</body>
</html>
I suppose you could set up some judicial media queries for your fixed height header/footer and anticipate that the height may be increased at smaller widths. If the content in the header and footer is always the same then you should be able to increase the height of the footer at certain breakpoints and change the padding as shown in Ron’s example.
roughly like this:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Sticky Header and Footer</title>
<style type="text/css">
body {
margin:0;
padding:0;
}
#header_container {
background:#eee;
border:1px solid #666;
height:60px;
left:0;
position:fixed;
width:100%;
top:0;
}
#header {
margin:0 auto;
max-width:940px;
text-align:center;
}
#content_container {
margin:0 auto;
overflow:auto;
padding:60px 0;
width:100%;
}
#footer_container {
background:#eee;
border:1px solid #666;
bottom:0;
height:60px;
left:0;
position:fixed;
width:100%;
}
#footer {
margin:0 auto;
max-width:940px;
text-align:center;
}
@media screen and (max-width:650px) {
#header_container { height:90px }
#content_container { padding-top:90px }
}
@media screen and (max-width:500px) {
#header_container { height:120px }
#content_container {
padding-top:120px;
padding-bottom:90px
}
#footer_container { height:90px }
}
</style>
</head>
<body>
<div id="header_container">
<div id="header">Start Header Content Header Content Header Content Header Content Header Content Header Content Header Content Header Content Header Content Header Content Header Content Header Content Header Content Header Content Header Content Header Content Header Content End </div>
</div>
<div id="content_container">Start contents<br>
contents<br>
contents<br>
contents<br>
contents<br>
contents<br>
contents<br>
contents<br>
contents<br>
contents<br>
contents<br>
contents<br>
contents<br>
contents<br>
contents<br>
contents<br>
contents<br>
contents<br>
contents<br>
contents<br>
contents<br>
contents<br>
contents<br>
contents<br>
contents<br>
contents<br>
contents<br>
contents<br>
contents<br>
contents<br>
contents<br>
contents<br>
contents<br>
contents<br>
contents<br>
contents<br>
contents<br>
contents<br>
contents<br>
contents<br>
contents<br>
contents<br>
contents<br>
contents<br>
contents<br>
contents<br>
contents<br>
contents<br>
contents<br>
contents<br>
contents<br>
contents<br>
contents<br>
contents<br>
contents<br>
contents<br>
contents<br>
contents<br>
contents<br>
contents<br>
contents End<br>
</div>
<div id="footer_container">
<div id="footer"> Start Footer Content Footer Content Footer Content Footer Content Footer Content Footer Content Footer Content Footer Content Footer Content Footer Content End</div>
</div>
</body>
</html>
Of course if the content is dynamic in the header or footer then you can’t really account for it like this. It will also break on zoom unless you leave a little extra room.