Siggi: IE7 falsch, IE8 richtig, IE9 falsch!

Beitrag lesen

Hi,
für mich wird das immer verworrener!
Hier das HTML:

  
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">  
<html>  
<head>  
<title></title>  
<style type="text/css">  
<!--  
#right {  
    margin-left: 100px;  
}  
*:first-child+html #right {  
    margin-left: 0;  
    position: absolute; left: 100px;  
}  
-->  
</style>  
</head>  
<body class="test">  
<div id="right">  
<fieldset>  
<legend>  
1111111111111  
</legend>  
1111111111111111 111111111111<br />1111111111  
</fieldset>  
<br>  
<fieldset>  
<legend>  
2222222222222  
</legend>  
2222222222222222 2222222222 2222222222 2222222222<br />  
1111111111111111 1111111111111111  
</fieldset>  
</div>  
</body>  
</html>  

Offensichtlich liegt es an dem Hack
     *:first-child+html #right { .....

Aber diesen Hack brauche ich wegen einem anderen Fehler im IE.
Und dann die Frage 1:

Warum wirkt der Hack auch im IE9?

Dann habe ich die DOCTYPE-Zeile weggelassen und dann hat es korrekt funktioniert -

warum?

Was muss ich im obigen Beispiel angeben?

Ich habe jetztin Selfhtml die Erläuterung der DOCTYPE-Definition nachgelesen.
Da werde ich allerdings nicht schlau, warum der Fehler damit zusammenhängt.
Heißt strict etwa auch, dass keine "Hacks" erlaubt sind?
Kennt Ihr eine umfangreichere (deutsche) Beschreibung, wann man welche Doctype-Angaben machen muss?