Doctype - Ein weiterer Erklärungsversuch
Gerade gestern hatte ich eine hitzige Diskussion über den Sinn oder Unsinn von der Verwendung eines DOCTYPE header bei einer HTML Seite. Um die Spannung aus der Geschichte zu nehmen - ja, ich bin massiv für die Verwendung des DOCTYPE.
Viel wurde schon über den DOCTYPE geschrieben und gesagt - viel Richtiges und einiges an Falsches. Aussagen von mir bekannten Entwicklern gingen von “total unsinnig” bis “Braucht man nur, wenn man nicht deutsche Seiten erstellt”. Es scheinen immernoch Missverständnise vorzuliegen.
Nun, dass heutige Gespräch hat mich dazu bewogen mir ein paar Gedanken zu diesem Thema zu machen und mal gepflegt darüber zu reflektieren ;)
Gehen wir die Sache von Vorne an - was ist dieser DOCTYPE überhaupt? Als erstes sollte in Erfahrung gebracht werde was denn mit dem DOCTYPE gemeint ist. Der DOCTPYE steht für “document type definition” bzw. der “Dokumenten Typen Definition”.
Wie der lange Name schon vermuten lässt, teilt er DOCTYPE dem Parser (also das Teil, dass den HTML Code analysiert) mit, welcher HTML Dialekt in dem aktuellen Dokument Verwendung findet.
Verwendet die Webseite HTML 2.0, HTML 3.2 oder XHTML 1.0? Das W3C stellt eine kleine Liste der Definitionen bereit.
Die Steuerung, wie der Browser auf den DOCTYPE reagiert ist im Grunde einfach:
Dokumente die keine, alte oder Transitional Types haben, versetzen den Browser in den sogenannten Quirks-Modus. In diesem Modus wird der Browser versuchen die Bugs, die in seinen Vorgänger Versionen eingebaut waren, zu simulieren - ja richtig gelesen, er baut die Bugs tatsächlich nach. Und es gab (und gibt) viele Bugs.
Beispielsweise folgender Code:
<body style="font: large sans-serif; color: purple;">
<table>
<tr><td>Hey, table!</td></tr>
</table>
Wie wird der Text “Hey, table” bei einem nicht gesetzen DOCTYPE dargestellt?
Bei alten Browsern wird der Text in der Tabelle weder Gross (large) noch als Sans-Serif dargestellt. Alte IE Versionen würden nicht einmal den Text in Lila darstellen.
Der Quirks-Mode sorgt dafür, dass dieses Verhalten erhalten bleibt. Weiter hat der DOCTYPE auch eine Auswirkung auf die Gross-/Kleinschreibung der Tags und Attribute. So das die CSS Klasse p.WichtigerText nicht gleich der Klasse p.wichtigertext ist.
Ich könnte noch Stunden lang drüber schreiben aber andere haben das schon getan und ich habe auch deren Texte hier in erster Linie übersetzt und übernommen.
Der letzte Teil ist quasi eine Übersetzung eines Artikels von Eric Meyer. Der unter der Adresse http://www.ericmeyeroncss.com/bonus/render-mode.html gefunden werden kann. Dieser Artikel ist in Englisch geschrieben - aber auf Wunsch werde ich den gesamten Artikel auf Deutsch zusammen fassen :)