Hi,
You may want to look at this layout as it has all the elements you are looking for (sticky footer, equal columns, different column colours).
You have a few errors in your layout as you cannot use 100% height anywhere in a fluid page. The main wrapper can be min-height:100% but no other elements can inherit that height. You have one shot at having a 100% high container and it must be the first container on the page (read the faq on 100% height for more info).
Suffice to say equal columns and 100% heights are not something that css does easy unless you want to use the display:table-properties (ie8+). It’s best to design around these issues as most of the time designs look better without all things being equal.
Also you should be aiming at 960px width rather than the 1024px as that is a bit wide (and indeed some mobile devices expect a 960px width and scale to that size unless told differently).
You have too many width and too many min-widths for such a simple layout and really all the column min-widths should be controlled by the main wrapper min-width. there shouldn’t be a need to apply min-width to each of the internal columns.
Your left and right columns are very narrow and really should be a fixed width anyway as it is pointless making them expand and shrink for such a narrow range.
There are also too many percentage widths and then pixel padding added which is never going to be consistent. You should make the containers just have a width and then add padding and to inner elements and then you always know how wide the container will be. I prefer to have fixed width side columns and then basically the middle column just fills the available space without needing a width although that usually means the middle column must be last in source. However in my example above there is a technique to keep logical html order that allows the middle column to just fill the gap.
Don’t give everything a percentage width when they are already inside a percentage container. You can just let them fill the space and add padding and margin to space them out.
Your sticky footer method is missing some key elements to work cross browser and indeed as I mentioned before you can’t use the 2 100% heights that you have used and removing them breaks your footer although it would have been broken anyway because content would have spilled out of the 100% height because the element can never grow. The footer needs to be outside the page wrapper to work properly as in my link above.
I’m a bit rushed at the moment so this is very rough but at least the footer is working.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Untitled Page</title>
<style type="text/css">
ul {
margin:0;
padding:0;
list-style:none
}
/*Opera Fix*/
body:before {
content:"";
height:100%;
float:left;
width:0;
margin-top:-32767px;
}
#ContentHolder:after {
clear:both;
display:block;
height:1%;
content:" ";
}
html, body {
margin:0;
padding:0;
}
html, body { height: 100%; }
h1 {
margin:0;
padding:0
}
body {
font-family:Verdana;
font-size:10px;
}
#ContentHolder {
margin-left:auto;
margin-right:auto;
min-height:100%;
margin-top:-72px;
min-width:960px;
}
* html #ContentHolder { height:100% }
#TopContainter { border-top:72px solid #fff; }
#TopNav {
border-bottom:1px solid black;
padding:10px 1%;
margin-bottom:10px;
overflow:auto;
zoom:1.0;
}
#LeftNav {
float:left;
width:15%;
margin-bottom:10px;
border-left:1px solid #6e6e6e;
margin-right:-1px;/* offset border*/
}
#Container {
float:left;
width:70%;
}
.inner {
padding:10px;
border:1px solid #6e6e6e;
zoom:1.0;
margin:l0px;
}
#RightNav {
float:right;
width:13%;
margin-bottom:10px;
min-width:70px; /* 130 */
border-left:1px solid #6e6e6e;
margin-left:-1px;/* offset border*/
}
.inner2 {
padding:10px;
margin:10px;
}
#Footer {
padding:10px 1%;
border-top:1px solid black;
clear:both;
height:51px;
}
input {
font-family:Verdana;
font-size:9px;
border:Solid gray 1px;
}
a {
text-decoration:none;
color:#6e6e6e;
}
/*-------------------------*/
#TopHeading {
width:50%;
float:left;
background: url(../Images/logo.gif);
background-repeat : no-repeat;
text-indent:-999px;
height:60px;
}
#LoginBlock { float:right; }
/*-------------------------*/
#LeftNav ul { list-style:none; }
#LeftNav ul li {
border-top:solid black 1px;
padding:3px;
}
#LeftNav ul li ul {
padding:8px;
border-bottom:solid black 1px;
border-right:solid black 1px;
}
#LeftNav ul li a {
display:block;
padding:3px;
text-decoration:none;
}
#LeftNav ul li a:hover {
display:block;
padding:3px;
color:orange;
}
/*-------------------------*/
.ProductList { list-style:none; }
.ProductList li {
float:left;
border:solid #e6e6e6 1px;
padding:10px;
margin:15px;
text-align:center;
}
.prodtitle {
margin-top:5px;
text-align:center;
border-top:solid #9f9f9f 1px;
}
.ProductHeader {
font-weight:bold;
border:solid #9f9f9f 1px;
background-color:#e3e3e3;
padding:5px;
}
.ProductList img {
width:160px;
height:150px;
}
.Container h2 { border:solid #9f9f9f 1px; }
#RightNav Div {
border:solid #9f9f9f 1px;
margin-bottom:15px;
}
</style>
</head>
<body>
<div id="ContentHolder">
<div id="TopContainter">
<div id="TopNav">
<h1 id="TopHeading">Header</h1>
<div id="LoginBlock"> User Name :
<input name="ctl00$UserId" type="text" id="ctl00_UserId" />
Password :
<input name="ctl00$UserPassword" type="text" id="ctl00_UserPassword" />
<input type="submit" name="ctl00$btnSubmit" value="Login" id="ctl00_btnSubmit" />
</div>
</div>
<div id="LeftNav">
<div class="inner2">
<ul>
<li>Category 1
<ul>
<li><a href="#">L Item 1</a></li>
<li><a href="#">L Item 1</a></li>
<li><a href="#">L Item 1</a></li>
<li><a href="#">L Item 1</a></li>
</ul>
</li>
</ul>
<ul>
<li>Category 2
<ul>
<li><a href="#">L Item 1</a></li>
<li><a href="#">L Item 1</a></li>
<li><a href="#">L Item 1</a></li>
<li><a href="#">L Item 1</a></li>
</ul>
</li>
</ul>
</div>
</div>
<div id="Container">
<div class="inner">
<h2>Main Page Display</h2>
<div class="ProductHeader">Featured Products</div>
<div class="ProductHeader">Featured Products</div>
<ul class="ProductList">
<li>
<div><img src="ProductImages/p0.png" border="0" alt="Image" /></div>
<div class="prodtitle"><a href="#">Product Info</a></div>
</li>
<li>
<div><img src="ProductImages/p1.png" border="0" alt="Image" /></div>
<div class="prodtitle"><a href="#">Product Info</a></div>
</li>
<li>
<div><img src="ProductImages/p2.png" border="0" alt="Image" /></div>
<div class="prodtitle"><a href="#">Product Info</a></div>
</li>
</ul>
</div>
</div>
<div id="RightNav">
<div class="inner2">
<div> This is a right Block</div>
<div> This is a right Image <img src="" width="80px" height="80px" alt="" border="1"/> </div>
</div>
</div>
</div>
</div>
<div id="Footer">Footer</div>
</body>
</html>
The elements called .inner and .inner2 hold all the padding and margins which leaves the containers able to us percentage with without problems and make them all add up although you should always allow some breathing space as percentages are rounded up and 50% + 50% sometimes make 51% and won’t fit.