See: http://jsfiddle.net/thirtydot/kBHCR/
As you can see, when setting width and height of .Window everything changes.
This will work in IE7 + and in all modern browsers.
This clearly does not work in IE6. If you need to support IE6, you can use JavaScript only for IE6, or you can stick with <table> . If you want to support IE6, it's worth the pay.
CSS
.Window { width: 600px; height: 500px; background-color: rgb(0,0,0); position: relative; } .Window-Top { height: 50px; position: absolute; top: 0; left: 0; right: 0; background-color: rgb(128,128,128); background-image: -webkit-linear-gradient(bottom, rgb(167,167,167) 25%, rgb(208,208,208) 78%); background-image: -moz-linear-gradient(bottom, rgb(167,167,167) 25%, rgb(208,208,208) 78%); background-image: -o-linear-gradient(bottom, rgb(167,167,167) 25%, rgb(208,208,208) 78%); background-image: -ms-linear-gradient(bottom, rgb(167,167,167) 25%, rgb(208,208,208) 78%); } .Window-Bottom { height: 50px; position: absolute; bottom: 0; left: 0; right: 0; background-color: rgb(0,128,128); } .Window-Content { position: absolute; top: 50px; bottom: 50px; left: 0; right: 0; } .Window-Content-Left { width: 150px; position: absolute; top: 0; bottom: 0; left: 0; background-color: rgb(255,0,0); } .Window-Content-Right { width: 150px; position: absolute; top: 0; bottom: 0; right: 0; background-color: rgb(0,0,255); } .Window-Content-Content { position: absolute; top: 0; bottom: 0; left: 150px; right: 150px; background-color: rgb(0,255,0); }