Tips and Tricks – Pure CSS Sticky Footers
Posted by Cassandra Wolff in Development, Tips and TricksBy now, if you’ve seen my other blog posts, you know that I’m fascinated with how much JavaScript has evolved and how much you can do with jQuery these days. I’m an advocate of working smarter, not harder, and that maxim knows no coding language limits. In this post, I want to share a pure CSS solution that allows for “sticky” footers on a web page. In comparing several different techniques to present this functionality, I found that all of the other routes were overkill when it came to processing time and resource usage.
Our objective is simple: Make the footer of our web page stay at the bottom even if the page’s content area is shorter than the user’s browser window.
This, by far, is one of my *favorite* things to do. It makes the web layout so much more appealing and creates a very professional feel. I ended up kicking myself the very first time I tried to add this functionality to a project early in my career (ten years ago … already!?) when I found out just how easy it was. I take solace in knowing that I’m not alone, though … A quick search for “footer stick bottom” still yields quite a few results from fellow developers who are wrestling with the same frustrating experience I did. If you’re in that boat, fear no more! We’re going to your footers in shape in a snap.
Here’s a diagram of the problem:

Unfortunately, a lot of people try to handle it with setting a fixed height to the content which would push the footer down. This may work when YOU view it, but there are several different browser window heights, resolutions and variables that make this an *extremely* unreliable solution (notice the emphasis on the word “extremely” … this basically means “don’t do it”).
We need a dynamic solution that is able to adapt on the fly to the height of a user’s browser window regardless if the resize it, have Firebug open, use a unique resolution or just have a really, really weird browser!
Let’s take a look at what the end results should look like:

To make this happen, let’s get our HTML structure in place first:
<div id="page"> <div id="header"> </div> <div id="main"> </div> <div id="footer"> </div> </div>
It’s pretty simple so far … Just a skeleton of a web page. The page div contains ALL elements and is immediately below the
header div is going to be our top content, the main div will include all of our content, and the footer div is all of our copyrights and footer links.
Let’s start by coding the CSS for the full page:
Html, body { Padding: 0; Margin: 0; Height: 100%; }
Adding a 100% height allows us to set the height of the main div later. The height of a div can only be as tall as the parent element encasing it. Now let’s see how the rest of our ids are styled:
#page { Min-height: 100%; position:relative; } #main { Padding-bottom: 75px; /* This value is the height of your footer */ } #footer { Position: absolute; Width: 100%; Bottom: 0; Height: 75px; /* This value is the height of your footer */ }
These rules position the footer “absolutely” at the bottom of the page, and because we set #page to min-height: 100%, it ensures that #main is exactly the height of the browser’s viewing space. One of the best things about this little trick is that it’s compliant with all major current browsers — including Firefox, Chrome, Safari *AND* Internet Explorer (after a little tweak). For Internet Explorer to not throw a fit, we need concede that IE doesn’t recognize min-height as a valid property, so we have to add Height: 100%; to #page:
#page { Min-height: 100%; /* for all other browsers */ height: 100%; /* for IE */ position:relative; }
If the user does not have a modern, popular browser, it’s still okay! Though their old browser won’t detect the magic we’ve done here, it’ll fail gracefully, and the footer will be positioned directly under the content, as it would have been without our little CSS trick.
I can’t finish this blog without mentioning my FAVORITE perk of this trick: Should you not have a specially designed mobile version of your site, this trick even works on smart phones!
-Cassandra




November 7th, 2012 at 5:56 am
Nice trick, very useful, thank you!
Arvy, Sao Paulo, Brazil
November 21st, 2012 at 12:34 pm
worked like a charm! after trying others that didn’t~
November 27th, 2012 at 8:27 am
Really nice trick. Will used in live projects!
January 9th, 2013 at 3:34 pm
Excellent
January 11th, 2013 at 4:26 pm
Thanks, but still not good for responsive design (position absolute…). Regards.
January 11th, 2013 at 5:36 pm
What do you mean, Sasha? It’s “position:absolute” specifically because it’s supposed to stick to the bottom of the page … The bottom of the page is always at the bottom of the page, so why would “position:absolute” be a problem?
January 13th, 2013 at 9:46 pm
Can’t seem to make this work on Chrome -,- too bad for me :/
January 23rd, 2013 at 8:42 pm
kevin hazard, because there is a missing position:relative; on the #page
January 25th, 2013 at 9:11 am
Thanks for the tip, airtonix. As we put this together and tested it, the position:relative; didn’t appear to be necessary, but including it does appear to improve browser compatibility.
February 9th, 2013 at 12:27 am
I’m also running Chrome and wasn’t able to get this working properly. Were you guys able to get it working in Chrome correctly? Would love to know if the problem is on my end or not. Thanks.
February 19th, 2013 at 3:53 pm
[...] ryanfait.com/stickyfooter/, http://ryanfait.com/resources/footer-stick-to-bottom-of-page/, http://blog.softlayer.com/2012/tips-and-tricks-pure-css-sticky-footers/, and http://css-tricks.com/snippets/css/sticky-footer/ proved particularly useful. Many thanks to [...]
February 28th, 2013 at 11:28 am
Hi all! I’ve noticed an overwhelming positive response to this trick in particular, and have also noticed a lot of Chrome users having issues. I am re-evaluating this snippet to make it cross-browser friendly and will post an update soon!
March 7th, 2013 at 5:00 am
As someone mentioned earlier, position absolute is not a good solution for a sticky footer. If you add enough content in main that causes the page to scroll, the footer will remain in it’s location at the bottom of the screen (similar to a fixed footer) and the content will go behind. If you scroll the page, the footer will stay in its absolute position and actually move up the page, always blocking the same portion of main’s content.
Simply put, the footer will not be pushed down below the content if the content are is taller then the viewport height.
March 11th, 2013 at 4:29 pm
Here’s a good example:
http://mystrd.at/modern-clean-css-sticky-footer/
March 27th, 2013 at 8:30 am
Good Call Rockit! Much better!
April 4th, 2013 at 2:52 am
dosen’t work in IE10 standard mode..
April 4th, 2013 at 4:28 pm
[...] ryanfait.com/stickyfooter/, http://ryanfait.com/resources/footer-stick-to-bottom-of-page/, http://blog.softlayer.com/2012/tips-and-tricks-pure-css-sticky-footers/, and http://css-tricks.com/snippets/css/sticky-footer/. Many thanks to their authors! For a live [...]
April 8th, 2013 at 10:44 am
Nice tricks to stick with for pure CSS sticky footers. Thanks for sharing this with us!
Angel