Hi Welcome to Sitepoint 
I'm afraid that your design has a number of logic errors and the main one is that you can't use 100% height on your inner elements like that as it restricts the content to 100% only and no more. Just add content to go below the fold and see what I mean
Read the CSS faq on 100% for a full understanding as it is more complex than you may think. Also have a look at the sticky footer css faq as that covers all the techniques I will show below.
You only have one shot at 100% and that has to be done with min-height:100% based on a 100% high html and body. No other nestings can carry the 100% height so you have one shot to do it all.
The easiest way to do this is to use the sticky footer approach combined with a modified version of my absolute overlay technique to create a full length background as required.
Here is the code:
Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Sticky Footer at Bottom</title>
<style type="text/css">
* {/* for demo only*/
margin:0;
padding:0
}
html, body {
height:100%;/* needed to base 100% height on something known*/
text-align:center;
}
/*Opera sticky footer Fix*/
body:before {
content:"";
height:100%;
float:left;
width:0;
margin-top:-32767px;
}
#outer:after {
clear:both;
display:block;
height:1%;
content:" ";
}
h1, h2, p { padding:0 10px; }
#outer {
width:960px;
background:#ccc;
margin:auto;
min-height:100%;
margin-top:-160px;/* header height - this drags the outer up to the top of the monitor */
text-align:left;
clear:both;
position:relative;
z-index:1;
}
* html #outer { height:100% }
#header, #footer {
width:100%;
min-width:960px;
background:#000;
color:#fff;
clear:both;
position:relative;
z-index:2;
}
#header { height:160px; }
#footer {/* footer now sits at bottom of window*/
height:90px;
margin-top:-90px;/* drag into viewport*/
clear:both;
}
.inner {
width:960px;
margin:auto;
position:relative;
z-index:2;
}
#outer .inner {
padding:190px 20px 120px; /* soak up negative margins */
width:920px;
}
.bg1 {
position:absolute;
top:180px;
margin-left:20px;
bottom:110px;
background:gray;
width:920px;
z-index:1;
}
</style>
</head>
<body>
<div id="header">
<div class="inner">
<h1>Sticky Footer</h1>
</div>
</div>
<div id="outer">
<div class="inner">
<h2>Ultimate Sticky footer that works in ie5/6/7/8, Opera 9 and 10, Firefox 2+, Chrome, Safari 3+ probably every other modern browser</a>)</h2>
<p>test</p>
<p>test</p>
<p>test</p>
<p>test</p>
<p>test</p>
<p>test</p>
</div>
<!-- bg1 just hold the background and no content -->
<div class="bg1"></div>
</div>
<div id="footer">
<div class="inner">
<p>Footer</p>
</div>
</div>
</body>
</html>
This assumes that the header and footer are a fixed height because you need to account for their dimensions. That is one of the drawbacks of a sticky footer approach.
Bookmarks