Dynamic Drive Blog Here
CSS Equal Columns Height script (v1.01)

A common pitfall of a CSS based columns layout is that the columns do not share a common height. Unlike a table based layout where the height of the table itself dictates the height of all of its columns, CSS columns are independent of one another in that respect. Now, this can be problematic (from a design standpoint) when you wish to style one of your CSS columns in a way that should extend all the way down to the end of the layout, such as giving a side column an explicit background color, a surrounding border etc.
This is a generic "CSS Equal Columns Height" script that will dynamically set the participating columns' heights to that of the tallest column's height, creating a uniform columns height layout. Use this script on any of our CSS Layouts for example. It's a matter of plug and play! To use this script, just insert this line of code into the HEAD section of your CSS layout page:
<script src="equalcolumns.js" type="text/javascript"></script>
As you can see, it references the external .js file "equalcolumns.js", which you should download (right click and select "Save As") and then upload to your own site.
This script is configured by default to automatically work with all of the layouts in our CSS Layouts section, whether 2 columns or 3 columns, fluid or fixed. Just add the script to the HEAD of any of these pages, and that's it!
If you wish to use this script to equalize the columns of your own custom CSS layout, open up "equalcolumns.js", and refer to the line:
ddequalcolumns.columnswatch=["leftcolumn", "rightcolumn", "contentwrapper"]
Change "leftcolumn", "rightcolumn" etc to the IDs of the CSS columns you wish to equalize. The script will do a check first to see if each corresponding column actually exists.
Comment Pages 3 of 21 pages < 1 2 3 4 5 > Last »
Change:
var tallest=0;
to:
var tallest=document.body.clientHeight;
If your content extends past the screen height, then tallest is replaced with the height of that div.
I'm making a second post to extend the script further to subtract out header & footer height and body padding so the footer doesn't unnecessarily extend past the bottom of the screen when your content is minimal.
After:
ddequalcolumns.columnswatch=["leftcolumn", "rightcolumn", "contentwrapper"]
Insert:
//Input IDs of Top and Bottom rows (Header and Footer)
ddequalcolumns.rowswatch=["top", "footer"]
After:
ddequalcolumns.setHeights=function(reset){
Insert:
//Calculate total height of header and footer save in variable t, why t?. Good Question.
t=0;
for (var j=0; j<this.rowswatch.length; j++){
if (document.getElementById(this.rowswatch[j])!=null){
var ptop = document.getElementById(this.rowswatch[j]).offsetHeight;
var t = t + ptop;
}
}
//Get padding (top and bottom) set for the body in stylesheet
pad=0
var RefDiv = document.body;
if( window.getComputedStyle ) {
var tpad = getComputedStyle(RefDiv,null).getPropertyValue("padding-top");
var bpad = getComputedStyle(RefDiv,null).getPropertyValue("padding-bottom");
} else if( RefDiv.currentStyle ) {
var tpad = RefDiv.currentStyle.paddingTop;
var bpad = RefDiv.currentStyle.paddingBottom;
}
bpad=parseInt(bpad);
tpad=parseInt(tpad);
pad = bpad+tpad;
//Set tallest to screen height minus header, footer, and any body padding (top and bottom)
Replace:
var tallest=0;
With:
var tallest=document.body.clientHeight-t-pad;
Works in IE, FF, Opera, FF(Mac)
If someone has a better way, post it. Since I'm not much of a javascript guy, I'm sure it can be improved upon.
Enjoy
Where ever you have your stateChanged function that passes your information back to populate the columns. ie:
document.getElementById("column1").innerHTML=xmlHttp.responseText
add this afterwards:
ddequalcolumns.setHeights();
It works for me.
I still can't understand javascript, forgive me.

