Float and absolute bug - Test page

The following two test cases have the same CSS styling (you can check the code). The only difference is that in the the second test case the center element (.colMain) has enough content that its height gets bigger than the height of the left column (.colLeft).

The DOM tree of these test cases is:

You can find more details of the effect of float and absolute bug. The effects are varied (all browsers tested are under Windows):

 

The container has the following styling:

.wrap {
  width: 800px;
  overflow: hidden;
}

Test case I

Left column

.colLeft {
  float: left;
  width: 200px;
}

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean adipiscing consectetuer magna. Etiam ligula tellus, viverra vel, scelerisque et, egestas nec, neque. Donec imperdiet aliquet nunc. In hac habitasse platea dictumst. Etiam non wisi. Integer ornare feugiat ante. Nullam non massa. Pellentesque luctus, orci eu hendrerit euismod, sapien ligula fringilla nunc, in euismod enim nulla ac nulla. Morbi hendrerit lacinia enim. Proin porttitor pede quis mauris.

Main column

.colMain {
  display: block;
  margin-left: 200px;
  position: relative;
}

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean adipiscing consectetuer magna. Etiam ligula tellus, viverra vel, scelerisque et, egestas nec, neque. Donec imperdiet aliquet nunc. In hac habitasse platea dictumst. Etiam non wisi. Integer ornare feugiat ante. Nullam non massa. Pellentesque luctus, orci eu hendrerit euismod, sapien ligula fringilla nunc, in euismod enim nulla ac nulla. Morbi hendrerit lacinia enim. Proin porttitor pede quis mauris. Vivamus elementum posuere risus. Sed placerat dolor et odio. Donec iaculis. Nulla augue diam, volutpat quis, condimentum vel, eleifend eu, justo. Quisque et purus quis dolor consectetuer adipiscing. Aliquam erat volutpat. Pellentesque nec ante.

Right column

.colRight {
  position: absolute;
  right: 5px;
  top: 5px;
  width: 200px;
}

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean adipiscing consectetuer magna. Etiam ligula tellus, viverra vel, scelerisque et, egestas nec, neque. Donec imperdiet aliquet nunc. In hac habitasse platea dictumst. Etiam non wisi. Integer ornare feugiat ante.

Test case II

Left column

.colLeft {
  float: left;
  width: 200px;
}

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean adipiscing consectetuer magna. Etiam ligula tellus, viverra vel, scelerisque et, egestas nec, neque. Donec imperdiet aliquet nunc. In hac habitasse platea dictumst. Etiam non wisi. Integer ornare feugiat ante. Nullam non massa. Pellentesque luctus, orci eu hendrerit euismod, sapien ligula fringilla nunc, in euismod enim nulla ac nulla. Morbi hendrerit lacinia enim. Proin porttitor pede quis mauris.

Main column

.colMain {
  display: block;
  margin-left: 200px;
  position: relative;
}

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean adipiscing consectetuer magna. Etiam ligula tellus, viverra vel, scelerisque et, egestas nec, neque. Donec imperdiet aliquet nunc. In hac habitasse platea dictumst. Etiam non wisi. Integer ornare feugiat ante. Nullam non massa. Pellentesque luctus, orci eu hendrerit euismod, sapien ligula fringilla nunc, in euismod enim nulla ac nulla. Morbi hendrerit lacinia enim. Proin porttitor pede quis mauris. Vivamus elementum posuere risus. Sed placerat dolor et odio. Donec iaculis. Nulla augue diam, volutpat quis, condimentum vel, eleifend eu, justo. Quisque et purus quis dolor consectetuer adipiscing. Aliquam erat volutpat. Pellentesque nec ante.

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean adipiscing consectetuer magna. Etiam ligula tellus, viverra vel, scelerisque et, egestas nec, neque. Donec imperdiet aliquet nunc. In hac habitasse platea dictumst. Etiam non wisi. Integer ornare feugiat ante. Nullam non massa. Pellentesque luctus, orci eu hendrerit euismod, sapien ligula fringilla nunc, in euismod enim nulla ac nulla. Morbi hendrerit lacinia enim. Proin porttitor pede quis mauris. Vivamus elementum posuere risus. Sed placerat dolor et odio. Donec iaculis. Nulla augue diam, volutpat quis, condimentum vel, eleifend eu, justo. Quisque et purus quis dolor consectetuer adipiscing. Aliquam erat volutpat. Pellentesque nec ante.

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean adipiscing consectetuer magna. Etiam ligula tellus, viverra vel, scelerisque et, egestas nec, neque. Donec imperdiet aliquet nunc. In hac habitasse platea dictumst. Etiam non wisi. Integer ornare feugiat ante. Nullam non massa. Pellentesque luctus, orci eu hendrerit euismod, sapien ligula fringilla nunc, in euismod enim nulla ac nulla. Morbi hendrerit lacinia enim. Proin porttitor pede quis mauris. Vivamus elementum posuere risus. Sed placerat dolor et odio. Donec iaculis. Nulla augue diam, volutpat quis, condimentum vel, eleifend eu, justo. Quisque et purus quis dolor consectetuer adipiscing. Aliquam erat volutpat. Pellentesque nec ante.

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean adipiscing consectetuer magna. Etiam ligula tellus, viverra vel, scelerisque et, egestas nec, neque. Donec imperdiet aliquet nunc. In hac habitasse platea dictumst. Etiam non wisi. Integer ornare feugiat ante. Nullam non massa. Pellentesque luctus, orci eu hendrerit euismod, sapien ligula fringilla nunc, in euismod enim nulla ac nulla. Morbi hendrerit lacinia enim. Proin porttitor pede quis mauris. Vivamus elementum posuere risus. Sed placerat dolor et odio. Donec iaculis. Nulla augue diam, volutpat quis, condimentum vel, eleifend eu, justo. Quisque et purus quis dolor consectetuer adipiscing. Aliquam erat volutpat. Pellentesque nec ante.

Right column

.colRight {
  position: absolute;
  right: 5px;
  top: 5px;
  width: 200px;
}

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean adipiscing consectetuer magna. Etiam ligula tellus, viverra vel, scelerisque et, egestas nec, neque. Donec imperdiet aliquet nunc. In hac habitasse platea dictumst. Etiam non wisi. Integer ornare feugiat ante.

Apparently, IE behaves as it does because of its hasLayout bug. If we "give layout" to the main column in the first test case IE gets it correctly. For more on this subject read On having layout. (Thanks to Bruno for pointing this out to me)

Test case III - fixed in IE

Left column

.colLeft {
  float: left;
  width: 200px;
}

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean adipiscing consectetuer magna. Etiam ligula tellus, viverra vel, scelerisque et, egestas nec, neque. Donec imperdiet aliquet nunc. In hac habitasse platea dictumst. Etiam non wisi. Integer ornare feugiat ante. Nullam non massa. Pellentesque luctus, orci eu hendrerit euismod, sapien ligula fringilla nunc, in euismod enim nulla ac nulla. Morbi hendrerit lacinia enim. Proin porttitor pede quis mauris.

Main column

.colMain {
  display: block;
  margin-left: 200px;
  position: relative;
}
* html .colMain {
	height: 1px;
}

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean adipiscing consectetuer magna. Etiam ligula tellus, viverra vel, scelerisque et, egestas nec, neque. Donec imperdiet aliquet nunc. In hac habitasse platea dictumst. Etiam non wisi. Integer ornare feugiat ante. Nullam non massa. Pellentesque luctus, orci eu hendrerit euismod, sapien ligula fringilla nunc, in euismod enim nulla ac nulla. Morbi hendrerit lacinia enim. Proin porttitor pede quis mauris. Vivamus elementum posuere risus. Sed placerat dolor et odio. Donec iaculis. Nulla augue diam, volutpat quis, condimentum vel, eleifend eu, justo. Quisque et purus quis dolor consectetuer adipiscing. Aliquam erat volutpat. Pellentesque nec ante.

Right column

.colRight {
  position: absolute;
  right: 5px;
  top: 5px;
  width: 200px;
}

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean adipiscing consectetuer magna. Etiam ligula tellus, viverra vel, scelerisque et, egestas nec, neque. Donec imperdiet aliquet nunc. In hac habitasse platea dictumst. Etiam non wisi. Integer ornare feugiat ante.