Prevent Double Margin & Padding In IE6 When Using CSS Float

Written by David Walsh on Wednesday, November 28, 2007


My thoughts on Internet Explorer have been well documented; for those that don’t already know, I think IE hinders the internet’s progress and represents another embarrassment for Microsoft. That said, a majority of users still browse with Internet Explorer 6 so it’s important to make sure our customers’ websites look good in the browser.

One of IE6’s glaring mistakes is producing double padding and/or double margin when using the respective property on two floating DIVs that fall next to each other. Since I build websites using all DIVs, I run into this problem with every framework I create.

The Problem

The above title is misleading, as my code isn’t the problem — IE6 is. That said, the following code alone isn’t good enough:

#global-column-1			{ margin:0 0 0 33px; padding:0 20px 0 0; width:255px; float:left; }
#global-column-2			{ margin:0 0 30px 30px; width:250px; float:left; }

The above code will result in double padding in IE6.

The Solution

Use IE6-only CSS code to fix the problem in that browser.

#global-column-1			{ margin:0 0 0 33px; padding:0 20px 0 0; width:255px; float:left; } * html #global-column-1 { display:inline; }
#global-column-2			{ margin:0 0 30px 30px; width:250px; float:left; }

The “* html #global-column-1″ declaration is only viewed by IE6. The”display:inline;” code actually corrects the double spacing.

Shouldn’t developers and the browser creators be working together? Apparently not, as Microsoft never fixed this issue.


Epic Discussion

Commenter Avatar December 10 / #
John says:

Excellent! Step 1) bang my head against desk for 2 hours. Step 2) find this site, fix works perfectly. Step 3) I’m on break.

Commenter Avatar December 20 / #
Underscore says:

There’s no need to add a new selector since the float automatically triggers display block and therefore ignores the display inline.

To signify that this is just a fix for IE I much prefer to use the underscore hack and just add _display:inline; in the same selector. Before someone points it out, validation doesn’t matter to me.

Lastly, double padding? Don’t think that’s a bug introduced by float.

Commenter Avatar May 13 / #
missy says:

Hmm… hacks galore. Clearing the containing float – or at least giving it a value that triggers hasLayout often works, as does display:inline (without the unecessary underscore hack).

If more people coded to validating standards, fewer IE6 bugs would manifest themselves and more could be resolved with additional attributes as opposed to hacks.

Commenter Avatar June 04 / #
Hayata says:

Fixed it. Bang! Thank you, thank you, just…thank you. You wrote the only description of this hack that is actually understandable by people.

Commenter Avatar June 12 / #
Kristy says:

This worked like a charm. Thank goodness I found your site before I started getting gray hairs from this problem. Thank you!

Commenter Avatar November 05 / #
Dan says:

Thanks for this. It’s such a hassle making sites work for IE6 and this saved me some time.

I use conditional comments to load IE stylesheets, which means no hacks in my main stylesheet – well, one for safari ;)

Commenter Avatar December 15 / #
Spark says:

Ahhh! Thank you so much! Even though IE7 is so much better still a lot of people are on 6 so this makes a great solution.

Thanks again!

Commenter Avatar February 03 / #

Hey man ,many thanx for this, i didn’t had to think twice to see what you meant, it was really crystal clear explained!
Keep up the great work and wil for helping people.

Commenter Avatar March 17 / #

I’m really sick of comments like this:
“I think IE hinders the internet’s progress and represents another embarrassment for Microsoft.”

Lets just have a little recap here and go back before Firefox existed and run down the list of things that IE invented.

1) The Document Object Model in IE3, remember that? Or do you still want to use Netscape’s Layer tag and not be able to access every object correctly?

2) AJAX. Yes it was MS that first had the XMLHTTP object, and eveyone else copied it.

3) Dynamic page flow, good old DHTML, IE again was the first to allow it.

Yes I know it’s showing it’s age, but just look at what we’re discussing now, this is a triffling little border issue, and for those of us that can remember back before Firefox when the browsers were truly broken as in the Netscape 4 page refresh bug, you’ll see how ridiculous this statement is.

IE invented the modern web browser, Firefox just made it better.

Commenter Avatar April 15 / #
Adam90 says:

what about double padding and margin in footer???

Commenter Avatar August 26 / #
Jonathan says:

Thanks this is what I was looking for.

Commenter Avatar November 26 / #
dude says:

Thanks David. BTW display:inline-block worked for me as opposed to display:inline. Cheers

Commenter Avatar February 22 / #
kates says:

Thanks a lot ! It worked for me

Be Heard!

I want to hear what you have to say! Share your comments and questions below.

Name*:
Email*:
Website:  


© David Walsh 2007-2010. Contact David Walsh. Powered by the remarkable MooTools javascript framework.