tags:

views:

2499

answers:

6
+3  A: 

Your HTML is a tad strange. For example, why does banner-bg wrap around everything?

That said, in order to use Sticky Footer technique you need to wrap everything but the footer into a single DIV. So your <body> tag would only contain two top DIVs - wrapper and footer. All the stuff you currently have would go inside that wrapper DIV.

Note that Sticky Footer may not work for you if background images you're using include transparent areas as it relies on wrapper background being covered by the header.

Update: Ok, here's the version that works. "Sticky Footer" style sheet is taken from cssstickyfooter.com and should work in all modern browsers. I've streamlined your HTML a bit (there's no need for separate background layers based on your picture) but you can modify it as you like so long as you keep the basic structure in place. Also, since I don't have your images I've added solid background colors for illustration purposes, you'll need to remove them.

<html>
<head>
 <style>
* {margin: 0; padding: 0} 
html, body, #wrap {height: 100%}
body > #wrap {height: auto; min-height: 100%}
#main {padding-bottom: 100px}  /* must be same height as the footer */
#footer {position: relative;
  margin-top: -100px; /* negative value of footer height */
    height: 100px;
    clear:both;
}
/* CLEAR FIX*/
.clearfix:after {content: "."; display: block; height: 0;   clear: both; visibility: hidden}
.clearfix {display: inline-block}
/* Hides from IE-mac \*/
* html .clearfix { height: 1%}
.clearfix {display: block}
/* End hide from IE-mac */ 

/* Do not touch styles above - see http://www.cssstickyfooter.com */

body {
  background-image: url("Images/img.gif");
  background: #99CCFF;
  color: #FFF;
  font-size: 13px;
  font-weight: normal;
  font-family: verdana;
  text-align: center;
  overflow: auto;
}

div#banner {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 9em;
  background: url("Images/img2.gif") repeat-x;
  background: #000;
}

div#wrap {
  background: #666;
  width: 84em;
  margin-left: auto;
  margin-right: auto;
}

div#header {
  height: 16em;
  padding-top: 9em; /* banner height */
  background: url("Images/header/header-bg.png");
  background: #333; 
}

div#footer {
  background: #000;
  width: 84em;
  margin-left: auto;
  margin-right: auto;
}

 </style>
</head>
<body>
 <div id="banner">Banner</div>
 <div id="wrap">
    <div id="main" class="clearfix">
     <div id="header">Header</div> 
     <div id="content">
     Content<br />
     Content<br />
     Content<br />
     Content<br />
     Content<br />
     Content<br />
     Content<br />
     Content<br />
     Content<br />
     Content<br />
     Content
   </div> <!-- end content -->
    </div> <!-- end main -->
 </div>
 <div id="footer">
  Footer
 </div>
</body>
</html>
ChssPly76
banner-bg needs to cover 100% of screen (width) and the rest of the site (inside the wrapper) should only cover a fixed width and be centered in the window. I couldnt think of any other way to do this.This is what I have and want:http://img43.imageshack.us/img43/5470/sitestructure.png
mdc
Thank you for the update, I will not be able to test this for a few days but I will write back when I did. If it works, you're the best :)
mdc
Sorry I didnt answer, I took a break from it all summer. I modified your code somewhat, and now it works - the div structure had to be made a bit ugly but it works. Thanks a million.
mdc
+1  A: 

Instead of modifying your existing styles (or using CSS Sticky Footer), its a lot easier for me to just redo it. So here goes:

<html>
<head>
<style type="text/css">
html, body {
    height: 100%;
}
#container {
    height: 100%;
    margin: 0 0 -200px 0;
    position: relative;
}
#footer {
    position: relative;
    height: 200px;  
}

</style>
</head>
<body>

<div id="container">
    <div id="header">Oh Beautiful Header</div>
    <div id="content">Lots of Content</div>
</div>
<div id="footer">Stay Put Little Footer</div>
</body>

Basically the negative margin should match the height of the footer, height 100% needs to be applied to html/body, and the position relative should be declared.

Also in reference to the xHTML, notice how the "footer" div is not INSIDE the "container" div, but rather, outside of it (so that there are 2 separate container-like divs, container and the footer).

If your still having trouble, the main problems with your markup IS:

  • 100% height needs to be declared for html and body tag.
  • negative margin is missing on the container div which is the #banner-bg
  • if footer is 100px tall, #banner-bg should have margin-bottom: -100px
  • position needs to be relative on both #banner-bg and the #footer

    html { height: 100%;}

    body { 
        color:                      #00FFFF;
        background-image:   url("Images/img.gif");
        font-size:                  1em;
        font-weight:        normal;
        font-family:        verdana;
        text-align:                 center;
        padding:                    0;
        margin:                     0;
        height: 100%;
    }
    
    
    #banner-bg {
        width:                      100%;
        height:                     100%;
        background-image:   url("Images/img2.gif"); background-repeat: repeat-x;
        position: relative;
        margin: 0 0 -200px 0;
    }
    
    
    #wrapper {
        width:                      84em;
        margin-left:        auto; 
        margin-right:       auto;
    }
    
    
    #header-bg {
        height:                     16em;
        background-image:   url("Images/header/header-bg.png"); 
    }
    
    
    #content-bg {
            background-image:       url("Images/img3.png"); background-repeat: repeat-y;
    }
    
    
    #content {
        margin-right:       2em; 
        margin-left:        2em;
    }
    #footer {
        position: relative;
        height: 200px;  
    }
    

and the rest:

    <body>
          <div id="banner-bg">
            <div id="wrapper">
              <div id="header-bg">
                <!-- header stuff -->
              </div> <!-- end header-bg -->
              <div id="content-bg">
                <div id="content">
                  <!-- content stuff -->
                </div> <!-- end content -->
              </div> <!-- end content-bg -->
            </div> <!-- end wrapper -->
          </div> <!-- end banner-bg -->
          <div id="footer">
          Footer Content
          </div>
        </body>
</html>
Jmb-Elite
First of all, your code does not work (at a minimum, it's missing `height: 100%` declaration for `html`). Secondly, the original question included a link to a page describing exactly how to implement sticky footer - **mdc** is asking how to apply it to _his_ scenario.
ChssPly76
Yes, thats right ChssPly76. I just added an image to illustrate what I have to work with.
mdc
ChssPly76, you are correct! I left out the html tag in the styles by accident (typed it in a hurry). Always good to ensure inherited styles apply! ALSO, I left out min-height (which is not recognized in IE6), but I would add it to ensure that the footer stays at the bottom regardless of little to no content.
Jmb-Elite
I still cant get it to work, if I do as in your code the footer overlaps the wrapper div and its not at the bottom of the screen.I you guys look at my image I posted, is it possible to fill that empty space with a background image? Because if it isnt its not much use in trying to get the footer to stay at the bottom.
mdc
A: 

I'm not sure what Sticky Footer meant to do when the content is actually longer than your page height... If it should be floating over the text while you are scrolling then I would use Javascript to calculate the bottom coordinates and place the footer on a new layer in the fixed position. This could be made quite cross-browser friendly as well...

G Berdal
or do what facebook does with their status bar - it is fixed to the bottom of the screen, and that doesnt require javascript.
Chii
A: 

Take the sticky footer out of your page wrapper and everything! I've done it, it works! Ask, if you need more assistance.

tharkun
A: 

why don´t you use a div with a position:fixed css value?

I think most modern browsers support this.

anyulled
that's not the aim. position:fixed fixes to the viewport, sticky footer fixes to the document.
tharkun
A: 

Can anybody explain me two thing about the ChssPly76 code (wich I thank for the good job)?

1.Why if I put a doctype declaration everything is wrong in IE. 2.Why if I remove the text-size attribute from body once again everything become a mess?

Cheers

Me on the web