Ich glaube ja manchmal, dass die meisten Leute da draußen gar keine Ahnung davon haben, wie verranzt der Internet Explorer tatsächlich ist. Und mit „Leute“ meine ich nicht nur Otto Normalnutzer, sondern auch manchen Webentwickler – mich eingeschlossen. Dass der IE ob seines biblischen Alters manches Feature nicht unterstützt und CSS manchmal kreativer als nötig interpretiert, ist hinreichend bekannt, aber man findet immer wieder etwas Neues.
Als ich vor ein paar Tagen über Tag-Auslassung in HTML schrieb bezog ich mich mitnichten auf eine Erfindung jüngerer Zeit, sondern auf ein Feature, das HTML seit Anbeginn der Zeiten hatte. In den Beispielen der ersten HTML-Version werden grundsätzlich Tags ausgelassen und in Version 2 der Spezifikationen heißt es explizit: Some elements only have a start-tag without an end-tag.
Das ist also alles nichts Neues und HTML-Parser wissen seit jeher mit den fehlenden Tags umzugehen. Aber mit den Browsern ist es wie mit den gallischen Dörfern – irgendwer leistet immer Widerstand und das gern auch mehrere Epochen lang. Man nehme einmal folgenden hamlos aussehenden HTML-Schnipsel:
<!DOCTYPE html>
<head>
<title>Hallo</title>
<div><form>Welt</form></div>
Was hier passieren soll, ist logisch: nach dem </title>
-Tag müsste der Browser merken, dass das nun folgende <div>
nichts für das Head-Element ist und entsprechend ein Body-Element einfügen. Genau das machen auch alle Browser, inklusive der IE-Familie, doch letztere macht auch noch ein bisschen mehr als das:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML Strict//EN">
<html>
<head>
<title></title>
<form>
<body>
<div>
Welt
</div>
</body>
</form>
</head>
<body>
<div>
Welt
</div>
</body>
</html>
Ich bin mir noch nicht ganz darüber im klaren, was hier genau passiert, aber richtig ist dieses Ergebnis sicher nicht. Dass der Title nicht in der DOM-Ansicht des IE erscheint ist (so wie ich das sehe) normal, ebenso das Austauschen des Doctypes. Der folgende Elementsalat ist es definitiv nicht. Und sobald man an der richtigen Stelle ein <body>
-Tag einfügt, macht der IE alles richtig:
<!DOCTYPE html>
<head>
<title>Hallo</title>
<body>
<div><form>Welt</form></div>
Ergebnis:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML Strict//EN">
<html>
<head>
<title></title>
</head>
<body>
<div>
<form>
Welt
</form>
</div>
</body>
</html>
So lange man also dem IE sagt, wo genau das Body-Element beginnen soll, passiert nichts schlimmes. Mir war diese Problematik bisher immer deshalb entgangen, weil ich immer ein Body-Starttag plus Conditional Comments verwende um CSS-Fehler im Internet Explorer auszubügeln. Ich danke Francesco für den sachdienlichen Hinweis auf diesen Internet-Explorer-Facepalm du jour.