This is simple.
First we have a containing div called #wrap.
<div id="wrap">
</div>
Inside that go the header, and an #inner-wrap div containing the right sidebar and #main.
<div id="wrap">
<div id="header">Header</div>
<div id="inner-wrap">
<div id="right">Right</div>
<div id="main">Main Content</div>
</div>
</div>
To make the columns look right, we use a background image. The image is 1px high and 200px wide. It goes in the #wrap div - repeat-y, like so :
html {height:100%;}
body {
margin:0;
padding:0;
height:100%;
background-color:#ffffff;
font-family:arial, serif;
}
#wrap {
background:url(bg200.gif) top right repeat-y;
min-height:100%;
margin:auto;
position:relative;
}
* html #wrap {height:100%}
The header obviously covers this at the top. Something else which might also be obvious is that the #wrap div is set to min-height:100% so that the page is, well, at least 100% high. The other bit after that is for IE, which is a bit stupid. IE doesn't understand 'min-height', but it treats 'height' in the same way as a good browser would treat 'min-height' so we're OK. When you tell the browser 'height:100%' though, it needs to know 100% of what? To make it clear, html and body are both set to 100% too.
The #inner-wrap div contains the floated right column and has 80px of bottom padding to make space for the footer.
<div id="wrap">
<div id="header">Header</div>
<div id="inner-wrap">
<div id="right">Right</div>
<div id="main">Main Content</div>
</div>
<div id="footer">Footer</div>
</div>
The footer is 100% wide and absolutely-positioned at the bottom of the #wrap div in the space left by the bottom padding of the inner-wrap.
#inner-wrap {
padding-bottom:80px;
}
#inner-wrap:after {
content:" ";
display:block;
clear:both;
}
#footer {
position:absolute;
bottom:0;
width:100%;
height:80px;
background-color: #333333;
color:#FF00FF;
text-align:center;
}
The right column is 200px wide (the same as the coloured part of the background image) and float:right, while the #main div is position:relative with a 200px right-margin so we have two sections.
#right {
float:right;
width:200px;
text-align:center;
}
#main {
position:relative;
margin-right:200px;
}
And that's about it really......except for the IE hack we need...
<!--[if IE]>
<style type="text/css">
#content,
#main,
#inner-wrap,
#wrap {
zoom:1;
}
</style>
<![endif]-->