views:

172

answers:

1

I have an h2 within a div. Both of them have borders. The h2 has a height attribute and a margin. When I view my page in IE6, IE7, or IE8 compatibility view, the h2 is all the way at the top of the div as if the margin is 0. However, if I view it in any other browser, the h2 has some space above it like I would expect.

Can anyone tell me why this is happening and what to do about it. I am trying to make the page render in IE like it does in Firefox, without setting the height to auto.

Here is a page you can test to show the problem. Try viewing it in IE6 or IE7, then try it in any other browser:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&gt;
<html><head>
<title>CSS margin test</title>
<style type="text/css">
div {
    border: solid blue 1px}
h2 {
    height:33px; margin:80px 0 0; border: solid red 1px}
</style>
</head>
<body>
<div>
    <h2>test</h2>
</div>
</body></html>
+1  A: 

Use the "zoom: 1" CSS property to force proper layout in IE. This is a common solution for IE bugs. Putting it on the div fixes your issue:

div {
    border: solid blue 1px;
    zoom: 1;
}

A general-purpose fix is also possible:

* {
    zoom: 1;
}

Google "hasLayout" for more info.

Justin Kramer
Thank you. It worked. I have read lots of articles about zoom and hasLayout, but somehow it didn't occur to me that it would fix this bug.
mikez302
Is this exaclty what you were looking for? Don't forget to mark this answer as accepted, so other people may benefit from it directly!
GmonC
Note that giving hasLayout to all elements with the wildcard selector can cause other bugs. I only ever give hasLayout when an element is misbehaving.
CalebD