Divs Gap Demo

31 January 2006 · Last updated: 11 December 2006

Comments


The problem: how to put two floated divs inside a container div which expands to the same height. If you try this, something unexpected happens: the container div doesn't expand! So now you have two floats, which would make ideal columns in a two-column layout, but no obvious way to stretch the container div. So you can't add a border around the floats, put in a background image, and so on.

The solution: put in an extra div at the bottom, positioned relatively, which forces the container div to stretch down to include it. With a bit of extra work, you can hide the div so it appears like your two floats fit nicely into the container.

I got the solution from Alex Robinson's One True Layout, which offers loads of solutions to achieving a decent three-column layout, including one where each column can be the same height. I actually ignored the code Alex used there and rewrote it to work for me.

But when I came to test my code in the main Windows browsers, something was wrong: it worked perfectly in Opera 9 (Preview 1) and Firefox 1.5, but not in Internet Explorer 6. Damn you IE6! Was it another bug? Would my layout ever work in this browser?

The problem centred around the first floated column on the left, and the div underneath it that stretches the container to the required height. I found there was a thin gap between the two divs. No matter what I tried, I couldn't remove it. There was only one thing to do: surf to Position Is Everything (PIE) and check their list of IE bugs.

Success! It turned out to be the mysterious 'hasLayout' to blame. I tried a fix that sets this property on an element and suddenly the gap between the divs disappeared. I would not have been able to work that one out myself, so many thanks to the guys at PIE!

The odd thing is, I applied the fix to the container div, not the floated divs. And yet it was those that had a gap. Well I guess the fix filters down to children of the container div too, but I'm no expert. And frankly I don't want to waste time trying to figure out the weird way IE works.

Divs Gap Demo

Here is a demo I made illustrating the problem. There are 3 sets of similar divs. Observe:

  1. The first set at the top is the ideal I was trying to achieve. It gives you two columns inside a container that fits the height. Set the height to 1% and don't put anything in the last div in order to hide it. (Sadly IE can't even get that right, but it's near enough.)

    I have added a right border to the first column and the extra div, which I've called the "brick", since it sits at the bottom, and holds the container down. The borders give the illusion of a central line between the two columns. Just like a table!

  2. The second set shows the divs with differently coloured borders indicating the construction. There should be no gap between the red and the blue horizontal lines.
  3. The third set is the same as the second, but without the IE fix applied. In IE, a gap appears between the left column and the brick. Agh!

I'm also seeing IE fail to draw the top border of the last set after switching to another window and back. I once gave up on a layout because IE couldn't draw the simple borders around the divs consistently. Maybe this demo works for you.

Extra

I also discovered something useful while working on the demo. It's possible to turn off the border edge around the main window in IE! Applying no border to the body element won't work, but strangely this works:

  1. html {border:0;}

Something to remember for future layouts.


Comments (3)

Comments are locked on this topic. Thanks to everyone who posted a comment.

  1. Dylan:
    That html border thing is really weird...the border actually extends out around the scrollbar and yet it's just a border applied to the html element, very strange.

    Posted on 1 February 2006 at 3:10 am
  2. Chris Hester:
    I just installed the IE Developer Toolbar, which works in similar ways to the Firefox Web Developer one. It even has a built-in DOM Explorer! Using this on a page, I see the HTML element has the following properties set in IE6:

    borderBottomStyle: inset
    borderLeftStyle: inset
    borderRightStyle: inset
    borderStyle: inset
    borderTopStyle: inset
    hasLayout: -1
    overflow: scroll
    overflowX: auto
    overflowY: scroll

    This sheds some light on the matter!

    BTW, you can get the IE toolbar from Microsoft:

    http://www.microsoft.com/downloads/details.aspx?
    FamilyID=e59c3964-672d-4511-bb3e-2d5e1db91038&displaylang=en


    Posted on 1 February 2006 at 11:31 am
  3. Dylan:
    I actually already have the toolbar but didn't think to use it. Interesting info nonetheless.

    Posted on 1 February 2006 at 8:35 pm

Useful Info

EMAIL: www.designdetector.com (replace the 1st dot with "@")

NEWSFEED: Subscribe to news of fresh posts and site updates. (RSS 2.0 compatible newsreader required.)

Disclaimer

Some links on this website lead to information provided by external services not under my control, therefore I am not responsible for the content or accuracy of the linked information.

All code examples are not guaranteed 100% free from bugs and/or mistakes. Use them at your own risk. I do not take any blame should a problem occur relating to use of code on this site given as an example for your own use. Such code has been tested and found to work for me, but I cannot vouch for other computer systems (existing now, or in the future) which it may be used on, or changes you introduce yourself based on my code.

This website is © 2008 Christopher Hester, except where separate authors are named. No part of this website may be reproduced or re-used in any way without my prior permission, except content added from separate authors (who retain the copyright on their material), examples of code, and any other content I explicity state is free to copy and make use of.

This page was last updated on 11 December 2006.

What's New

Recent Finds


View previous finds


Current Reading

The Suspicions Of Mr Whicher (Or The Murder At Road Hill House) by Kate Summerscale
5%
Genesis: Chapter & Verse by Tony Banks, Phil Collins, Peter Gabriel, Steve Hackett & Mike Rutherford
70%
Digital Photographer's Handbook by Tom Ang
70%