Navigation überspringen

Der »DOCTYPE-Switch« und seine Auswirkungen

Was ist der DOCTYPE-Switch?

Moderne Browser besitzen einen so genannten »DOCTYPE-Switch«. Durch unterschiedliche Angaben im Code eines HTML-Dokumentes können die Browser in unterschiedliche Darstellungsmodi geschaltet werden. Dieses kann zu weitreichenden Konsequenzen führen, vor allem in Bezug auf die Darstellung von »Cascading Style Sheets« (CSS). Zum einen gibt es einen Modus, in dem die Browser sehr tolerant gegenüber Fehlern im HTML- und CSS-Code sind oder veraltete bzw. proprietäre Konzepte bei der Code-Interpretation benutzen. Dieser so genannte »Quirks Mode« soll verhindern, dass bestehende HTML-Dokumente, die nicht standardkonform bzw. für alte Browsergenerationen erstellt wurden, nicht mehr wie gewünscht dargestellt werden. Zum anderen gibt es den »Standards Mode« (in manchen Beschreibungen auch »Standards Compliance Mode« oder »Strict Mode« genannt). In diesem Darstellungsmodus ist die Interpretation des Codes mehr oder weniger streng an den Spezifikationen des World Wide Web-Konsortiums (W3C) ausgerichtet.

Viele Autoren von HTML-Dokumenten sind sich nicht des DOCTYPE-Switches und seiner Auswirkungen bewusst und halten die veraltete, nicht-standardkonforme Darstellungsweise des Quirks Mode für richtig. So kommt es bei der Erstellung von HTML-Dokumenten häufig zu Gestaltungsproblemen, da mit einem formal korrekten Code unter Umständen nicht das gewünschte Ergebnis erzielt wird. Dieser Artikel soll daher erklären, wie der DOCTYPE-Switch funktioniert und welche Unterschiede zwischen den einzelnen Darstellungsmodi bestehen.

Aber eine Anmerkung vorneweg: Viele Autoren von HTML-Dokumenten behelfen sich, indem sie die Browser im Quirks Mode belassen. Dieses Vorgehen sollte aber nicht als Lösung des Problems betrachtet werden, da es nur die Symptome (ungewolltes Aussehen der Webseite), nicht aber die Ursachen (fehlerhafter oder unvollständiger Code) beseitigt. Außerdem kann das Verhalten der verschiedenen Browser im Quirks Mode sehr unterschiedlich sein, so daß Darstellungsunterschiede im Quirks Mode sehr viel wahrscheinlicher sind als im Standards Mode. Insbesondere fließen Fehlerbereinigungen und Funktionserweiterungen zukünftiger Internet-Explorer-Generationen nur in den Standards Mode ein. Damit man sich also halbwegs sicher sein kann, dass HTML-Dokumente auch in zukünftigen Browsergenerationen noch wie gewünscht dargestellt werden, sollte man sich bei deren Erstellung gleich um standardkonformen Code bemühen.

Ein wichtiger Schritt auf dem Weg zur Standardkonformität ist die Überprüfung des HTML- und CSS-Codes mit dem HTML-Validator und dem CSS-Validator des W3C.

Browser mit DOCTYPE-Switch

Die meisten modernen Browser haben den DOCTYPE-Switch mittlerweile implementiert. Dazu gehören:

(*) Bitte beachten: Ab Netscape 8 kann im Browser gewählt werden, welche Rendering Engine zur Darstellung von Webseiten verwendet werden soll, entweder die Gecko-Engine oder die Engine des Internet Explorers. Sollten bei der Entwicklung von Webseiten Probleme bei der Darstellung in Netscape 8 auftreten, so überprüfen Sie zunächst, welche Rendering Engine vom Browser gerade verwendet wird.

Zum Testen der hier vorgestellten Beispiele wurden folgende Browser mit DOCTYPE-Switch verwendet: Mozilla Firefox 1.0.7, 1.5.0.7 und 2.0, Opera 7.54, 8.02, 8.54, 9.02 und 9.10, Microsoft Internet Explorer 6.0. Für die Tests mit Konqueror wurden verschiedene Versionen des von CD lauffähigen Linux-Systems Knoppix eingesetzt. In Ermangelung eines Macs wurde für die Überprüfung der Beispiele in Safari der Screenshot-Service iCapture von Daniel Vine benutzt.

Was ist ein DOCTYPE?

Zu einem vollständigen HTML-Dokument gehört eine so genannte Dokumenttyp-Deklaration, englisch Document Type Declaration bzw. Doctype Declaration. Darin wird auf eine Document Type Definition (DTD) verwiesen. Sie gibt an, nach welcher (X)HTML-Version das Dokument erstellt wurde, und legt somit fest, welche HTML-Elemente und Attribute in dem Dokument vorkommen dürfen. Ohne diese Angabe ist ein HTML-Dokument unvollständig und daher nicht »valide«.

Die Dokumenttyp-Deklaration steht am Beginn des HTML-Dokumentes vor dem einleitenden <html>-Tag:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
  "http://www.w3.org/TR/html4/strict.dtd">
<html lang="de">
<head>
  <title>Dokument-Titel</title>
</head>
<body>
<!-- Dokument-Inhalt -->
</body>
</html>

Zwar kann vor der Dokumenttyp-Deklaration noch weiterer Code stehen, zum Beispiel ein Kommentar oder eine XML-Deklaration bei XHTML-Dokumenten, allerdings sollte dies unbedingt vermieden werden, wie etwas weiter unten noch erklärt wird.

Die unterschiedlichen Darstellungsmodi

Die Browser entscheiden anhand der Dokumenttyp-Deklaration am Anfang des HTML-Dokumentes in welchen Darstellungsmodus sie schalten. Die gängigsten Dokumenttyp-Deklarationen sind im folgenden genannt, unterteilt in die drei Darstellungsmodi, die sie bewirken: »Full Standards Mode«, »Almost Standards Mode« und »Quirks Mode«. Die nicht genannten »Frameset«-Varianten verhalten sich dabei genauso wie die entsprechenden »Transitional«-Varianten.

Die Unterscheidung zwischen Full und Almost Standards Mode tritt in Mozilla ab Version 1.0 (Netscape 7.0), Opera ab Version 7.5 und Safari ab Version 0.9 auf. Alle anderen Browser mit DOCTYPE-Switch schalten bei Verwendung der unter »Almost Standards Mode« genannten Dokumenttyp-Deklarationen in den Standards Mode. Wenn in den Beispielen nur der Standards Mode erwähnt ist, dann besteht kein Darstellungsunterschied zwischen dem Full Standards Mode und dem Almost Standards Mode.

Das genaue Verhalten der verschiedenen Browser kann man auf den Internetseiten der Browserhersteller nachlesen, die im Literaturverzeichnis genannt sind.

Full Standards Mode

In Mozilla findet der DOCTYPE-Switch nur Anwendung, wenn das Dokument mit dem MIME-Type text/html ausgeliefert wird. Bei Verwendung von XML-MIME-Types (text/xml, application/xml, oder application/xhtml+xml) wird generell der Full Standards Mode verwendet.

Die Doctype-Deklaration für HTML 4.01 Strict ohne URI der DTD (*) löst im Internet Explorer 5 für Mac den Quirks Mode aus.

Almost Standards Mode

Quirks Mode

Das Fehlen einer Doctype-Deklaration oder die Verwendung einer älteren HTML-Version als HTML 4 schaltet alle Browser in den Quirks Mode.

Wenn in einem XHTML-Dokument nicht UTF-8 als Zeichenkodierung verwendet werden soll, so kann es notwendig werden, eine XML-Deklaration mit der entsprechenden Zeichenkodierung anzugeben:

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

Allerdings erwartet der Internet Explorer 6 die Dokumenttyp-Deklaration am Beginn des HTML-Codes. Dies führt dazu, dass der Internet Explorer 6 bei Verwendung einer XHTML-Dokumenttyp-Deklaration mit XML-Deklaration in den Quirks Mode schaltet. Opera hat diesen Bug in den Versionen 7.0 bis 7.03 imitiert. Ab Version 7.1 verhält sich Opera richtig und schaltet in den Standards Mode. Im Internet Explorer 7 wurde dieser Bug teilweise beseitigt. Dieser Browser schaltet bei Angabe einer XML-Deklaration nur dann in den Quirks Mode, wenn vor der XML-Deklaration bzw. zwischen XML-Deklaration und Doctype-Deklaration ein Kommentar steht.

Wenn die Zeichenkodierung bereits im Header der HTTP-Antwort des Webservers genannt wird, so kann auf die Nennung der Zeichenkodierung im XHTML-Code verzichtet werden. Die Verwendung der für den Internet Explorer problematischen XML-Deklaration kann somit vermieden werden.

In welchem Modus befindet sich ein Browser gerade?

Es würde den Rahmen dieses Artikels sprengen, alle möglichen Varianten der Dokumenttyp-Deklaration aufzulisten, zumal ein Dokumenttyp in den verschiedenen Browsern unterschiedliche Darstellungsmodi auslösen kann. Um trotzdem schnell feststellen zu können, in welchem Modus ein HTML-Dokument angezeigt wird, kann in einigen Browsern mit JavaScript der »Kompatibilitätsmodus« ausgegeben werden. Dazu dient die Eigenschaft compatMode des document-Objektes. Der Wert der Eigenschaft lässt sich z. B. über die write()-Methode direkt auf der Seite ausgeben:

<script type="text/javascript">
document.write("Darstellungsmodus:" + document.compatMode);
</script>

Im Quirks Mode erhält man als Wert BackCompat oder QuirksMode, im Standards Mode CSS1Compat. Eine Unterscheidung zwischen Full Standards Mode und Almost Standards Mode ist hierbei nicht möglich. Browser, die keinen DOCTYPE-Switch besitzen, kennen die Eigenschaft compatMode nicht und liefern somit den Wert undefined. Netscape 6 (Mozilla-Versionen älter als Version 1.0) und Safari unterstützen trotz DOCTYPE-Switch compatMode nicht und liefern daher ebenfalls den Wert undefined. In Konqueror ist es seit Version 3.3 implementiert, bis Version 3.3.1 allerdings fehlerhaft. Unabhängig vom Darstellungsmodus liefert der Browser den Wert CSS1Compat. Nur wenn die Doctype-Deklaration fehlt, ergibt sich der Wert BackCompat. Erst ab Version 3.3.2 gibt Konqueror den korrekten Wert zurück.

Durch Eingabe der folgenden Zeile in die Adress-Zeile des Browsers kann man sich den Kompatibilitätsmodus auch als JavaScript-Alert-Box im Browserfenster anzeigen lassen. Diese Zeile kann auch als »Bookmarklet« in den Lesezeichen abgelegt werden, so dass sie jederzeit verfügbar ist.

javascript:alert(document.compatMode);

Im Mozilla kann der Darstellungsmodus auch über die Seiteneigenschaften (Menüpunkt »Page Info«) abgerufen werden. Der Darstellungsmodus steht unter »Render Mode« im Karteireiter »General«: »Quirks mode« bzw. »Standards compliance mode«.


Letzte Änderung dieser Seite: 11.05.07