FortySeven Media

Kick Awesome Web Design, Graphic Design & Media Creation

Making Your Footer Stay Put With CSS

Monday, January 14, 2008 ~ 11:50 pm

One problem I run into pretty frequently when coding a site in to XHTML and CSS is making my footer dock to the bottom of the screen. It’s especially annoying if you have a page that’s short on content and the footer, which happens to be a different color that the body background doesn’t stay at the bottom of the browser window. I can hear you say, “But why don’t you just do a fixed position on it. That’s easy enough.” True, but if you do that then it’s always at the bottom of the screen no matter how tall the window is. So if I have a page with a lot of content that footer shouldn’t show up until the content is done. How do we fix this? Let me show you. Here’s what the problem looks like:

Footer is broken

This tutorial assumes a few things: 1. That you know basic HTML formatting, and 2. That you have a pretty good understanding of CSS.

So first we need to make sure that everything except the footer is inside a container div. So your code would look something like this:

<div id="container">
<div id="header">Header</div>
<div id="nav">
<ul>
<li><a href="#">Home</a></li>
<li><a href="#">Page 1</a></li>
<li><a href="#">Page 2</a></li>
</ul>
</div>
<div id="content">Content Here.</div>
</div><!--End Container-->
<div id="footer">Footer Here.</div>

Now that you’ve got your basic HTML set up, let’s head over to the CSS and see what we need to do there to get it to work. First, we want to give the html and body tags a height of 100%:

html, body {
height: 100%;
}

Next, we need to set the container div to position:relative, min-height: 100% and negative margin the bottom the height of the footer. What? A fixed height footer you say? Yes, I haven’t quite figured out the best way to do it otherwise:

#container {
min-height: 100%;
margin-bottom: -330px;
position: relative;
}

Now, onto the footer. Make sure the height on the footer matches the height of the negative margin on the container and set the position to relative:

#footer {
height: 330px;
position: relative;
}

What’s that? Yes, I know it doesn’t work yet. There’s still a bit of magic to be done. See it turns out we need a div to help separate the footer from the container. We’re going to call it clearfooter. So jump back to your HTML and add the div class right inside the closing div of the container. That’s very important. Inside the closing div:

<div id="container">
<div id="header">Header</div>
<div id="nav">
<ul>
<li><a href="#">Home</a></li>
<li><a href="#">Page 1</a></li>
<li><a href="#">Page 2</a></li>
</ul>
</div>
<div id="content">Content Here.</div>
<div class="clearfooter"></div>
</div><!--End Container-->
<div id="footer">Footer Here.</div>

Head back over to your CSS file and add this to the clearfooter div. Notice the height again:

.clearfooter {
height: 330px;
clear: both;
}

Alright! So for those of us using browsers that aren’t stupid, this should work great. But 80% of use that one browser that is stupid, our friend Internet Explorer 6. Thankfully, it’s a pretty simple fix. I know, how often does that happen? First of all, you should know that IE7 should work fine with what we’ve done up to this point. So all we need is an IE6 specific “hack.” In your header where you’re calling your external stylesheet put this:

<!--[if lt IE 7]>
<link rel="stylesheet" type="text/css" href="ie6.css" />
<![endif]-->

This is a conditional statement for IE6 so it will load the CSS file only in that browser. In the CSS file, all you have to put is:

#container {
height: 100%;
}

So there you have it! This works in IE 6 and 7, Firefox and Safari 2 and 3. I hope you’ve found this a useful tool in your CSS arsenal. If you know a better way, please let us know in the comments!

Footer fixed

  • Social Web
  • E-mail

Your Email:*  

Your Name:*

               To:*

Submit the word you see below*

Posted by in Design ~ Tutorials ~ (61) Comments ~ (0) Trackbacks

this is what i was looking for exactly…
thanks a lot..

selamlar

nice tutorial. thanks for sharing with us

The problem I’ve found with Ryan’s sticky footer is that it doesn’t take kindley to using margin’s within the content pane. I almost always always need to use margins AND padding, and hence can’t substitute the former for the latter as he suggests.

I’m going to try this method you’ve explained in your blog. Thanks.

Heyyy, this is great!  It’s the one thing I found that was easy to read and actually worked.  Thaaaanks. :D

Good tutorial and easy to understand, many thanks.

Thank you so much. I’ve been searching all morning to find a fix to my footer issue.
content height ? 100% thats right! Thank you thank you thank you

Got a nice blog site. keep blogging now.

Thanks much for the tip, this has always annoyed me as well.  CSS is nice, but definitely a few quarky things like this that make it difficult.

amazing. i spent several hours trying to figure this one out until i read your post. so helpful!!! thanks smile

Hi,

I have used this solution and it works well. However, i get the vertical scroll-bar no matter the size of the page is. I need to get this to work with no scroll bars on screens with smaller contents. Can you please suggest an alternative?

Thanks
Bindhu

Hey Bindhu, it doesn’t create scroll bars unless the content is long enough to do so. Double check you’ve set the same height in all three places: container (negative bottom margin), clearfooter and footer.

« First  <  1 2 3

Leave Your Thoughts Behind

Name*

Email*

Website

Smileys

  Remember my personal information

  Notify me of follow-up comments?

Submit the word you see below*

Live Preview

 
Separator
Stuff we Love

A beautiful, heartbreaking photo essay from Phillip Toledano.

Hahahaha, Vista sucks.

This is some crazy cool church projector stuff.

For all of us who hate voicemail trees.

Don’t break the rules to get ahead. Work hard and it’ll pay off.

CSS Tricks has a nice, plain english version of major CSS bugs in IE 6.

Number six in my article on Top 10 Tips for Web Design was to make awesome icons. PSDTUTS has a great article on how to design them effectively.

archives

Recommended

ExpressionEngine

Basecamp