If you haven't clued in by now I suggest reading this amazing document found online called "On Having Layout". In it several web developers have worked together to document this magickal hasLayout property that's part of IE's layout engine and its effects.
What it boils down to is this: an element with hasLayout set is responsible for drawing it's child elements on the screen. And sometimes elements will ignore this responsibility. When that happens, either the element isn't drawn at all or it's drawn by an ancestor element that will use the wrong reference points for placement of the element on screen.
You can sometimes fix this by applying other rules that sort of "wake elements up" to their
duties. Rules like position: relative
do wonders for getting lazy hasLayout elements
to do their job.
Even with hasLayout and position: relative
set on every
block element you still run into trouble. There are other implications that come with
hasLayout such as collapsing margins and containing floated child elements. These
"side-effects" can find ways to disrupt your otherwise correct layout.
It's amazingly frustrating to develop layouts using CSS under any version of Internet Explorer for Windows. There are many more bugs associated with hasLayout than the few I've covered here. Elements not being drawn correctly, missing backgrounds, ghost elements remaining where there should be none, and z-index/overlapping issues to name a few.
Sometimes you can hack your way around these bugs. Other times you can't. And who wants to spend hours trying to find a workaround only to discover there isn't one except to start your layout over and organize your layout slightly differently to avoid some of the pitfalls you've discovered.
Is it any wonder why adoption of more semantically correct HTML documents (read: not using table elements for layout purposes) and the use of CSS as the sole means of presentation logic has been next to dead for the past several years? How can we expect developers to work around every single browser bug? Especialy ones as widespread as Internet Explorer. We can't simply say "fuck IE, I'll design only for Firefox" because doing so ignores almost two-thirds of the internet population. Maybe a personal website can get away with that, but professional websites? No way. No way in hell.
And it's not as if we can take the case to "the people" because "the people" don't give a fuck HOW that text, that image, that color, or that table get on their computer screen; they only care that they can use it.
Does Microsfot care? Not really. Many of the bugs associated with hasLayout have been around since IE4. They've had many many chances to correct them, but failed to do so. I'd been contacted by a person from Microsoft's IE development team about a blog post I made ranting about a beta copy of IE7 and its inadequacies. I pointed out several bugs that still existed. His response? IE7 would ship with the bugs. Would they ever be fixed? I never got a response.
I think the problems run deeper. I think IE's rendering/layout engine can't be patched to resolve these issues; I think it needs to be rewritten from scratch. I think Microsoft has no intention of investing that kind of time and effort in their product. I think we, web developers, are properly fucked. At least for now.