CSS, HTML und Javascript mit {stil}

DOCTYPE - HTML-Version

HTML Doctype und ValidatorDOCTYPEHTML

<!DOCTYPE> legt die Document Type Definition (DTD) des Dokuments fest. Die DTD bestimmt die Grammatik und die Syntax der HTML-Sprache (HTML5 hingegen basiert nicht auf SGML und braucht darum keinen Verweis auf externe DTDs).

Kurz gesagt: Der Dokumententyp am Anfang einer HTML-, XHTML, XML, MathML oder SVG-Datei gibt an, um welchen Typ von Dokument es sich handelt.

Die HTML-Standards brachten im Laufe der Jahre Versionen hervor, die dem heutigen Wunsch nach einer sauberen Struktur entgegenlaufen. Ohne !DOCTYPE könnte der Browser eine Webseite trotz validem HTML fehlerhaft darstellt, weil er sich an seine alte Darstellung eines Elements hält. Andererseits müssen alte Webseiten auch in der neuen Browsergeneration bestehen.

Anhand des DOCTYPE erkennen Browser (und andere Typen von Parsern), wie sie eine Webseite rendern sollen: Mit DOCTYPE nach dem Standard, ohne DOCTYPE in ihrem »Quirks-Modus«, in dem sie ihre alten Fehler simmulieren.

!Doctype kann nur in die erste Zeile des HTML-Codes gesetzt werden (aber es gibt doch noch eine Ausnahme: die XML-Deklaration <?xml version="1.0" encoding="utf-8"?> siehe unten) und weist weitere Besonderheiten auf:

  • !DOCTYPE ist kein HTML-Tag. Darum gibt es auch kein schließendes !DOCTYPE-Tag.
  • !DOCTYPE ist das einzige, was vor dem <HTML>-Tag stehen kann.
  • Das Ausrufezeichen "!" gehört dazu.
  • DOCTYPE ist nicht case-sensitiv, darf also auch als Doctype oder doctype geschrieben werden.

HTML5 DOCTYPE

Man beachte, dass der Doctype einfach »!DOCTYPE html« und nicht »!DOCTYPE html5« heißt.

<!DOCTYPE html>

HTML5 basiert nicht mehr auf SGML und braucht darum die langatmigen Erklärung – die DTD – der HTML-Doctypes nicht mehr.

Ein DOCTYPE ist zwar nicht zwingend erforderlich, aber das W3C (World Wide Web Consortium), das den Standard für das Web herausgibt, empfiehlt, das <!DOCTYPE>-Tag trotzdem an den Anfang der HTML-Datei zu setzen.

Obwohl kein DOCTYPE gesetzt werden muss: wer seine Webseiten beim Validator prüft, muss den Doctype angeben, damit keine Fehler ausgeworfen werden.

Doctype für ePub

Neben Webseiten benutzen auch eBooks nach dem ePub-Standard XHTML-Dokumente mit einem Doctype. Das HTML für EPUB 2 ist XHTML 1.1 strikt.

Doctype für striktes XHTML
   
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
        "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

ePub3 setzt bereits auf HTML5, und da HTML nicht mehr durch DTDs definiert wird, hat auch EPUB 3 die Verweise auf externe Elemente aus dem Doctype entfernt.

Doctype für SVG

Das wäre ein Doctype für ein SVG-Dokument:

<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">

Weil die DTDs (Document Type Definitions) in SVG eine Quelle von Missverständnissen und Fehlern waren, hat sich die SVG WG entschlossen, mit SVG 1.2 keine DTD mehr zu verwenden und empfiehlt, auch in SVG 1.0 and 1.1 keine DOCTYPE Declaration zu setzen. Stattdessen sollen "version" und "baseProfile" Attribute in das SVG-Tag geschrieben werden.

<svg xmlns="http://www.w3.org/2000/svg"
     xmlns:xlink="http://www.w3.org/1999/xlink"
     version="1.1"
     baseProfile="full">

xmlns:svg sollte nicht benutzt werden, um den SVG-Namespace einzubinden (Inkscape setzt z.B. grundsätzlich noch xmlns:svg="http://www.w3.org/2000/svg" vor den SVG-Namespace).

Statt SVG als default Namespace zu proklamieren, bindet xmlns:svg den Präfix "svg" ein, und das ist so gut wie immer Unsinn.

Wenn SVG inline in HTML-Dokumente gesetzt wird, kann der Namespace auch weggelassen werden.

Der Markup Validation Service validiert auch SVG-Grafiken.

Doctype und Quirks-Modus

Der Doctype hat nicht nur Auswirkungen auf die Darstellung des Markups und die Anwendung von CSS-Stilen, sondern auch Skripte werden ja nach Doctype unterschiedlich interpretiert.

Auf der Basis des Doctypes sind Validatoren in der Lage, das Dokument auf Syntaxfehler zu prüfen – zu validieren. Gerade wenn Skripte auf dem DOM aufbauen, ist ein korrektes Markup die Basis für ein reibungsloses Skript ohne gefährliche Stolperfallen. Darüber hinaus benutzen moderne Browser die Angabe des Doctypes, um ihr Verhalten zu ändern: Im Modus strict verhalten sie sich standardkonform, im Modus loose (Quirksmodus) simulieren sie die Fehler ihrer Vorgängerversionen, um alte HTML-Dokumente nicht ins Unglück zu stürzen.

Elemente des Doctype-Tags

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">

DOCTYPE HTML PUBLIC
bedeutet, dass sich das Dokument auf die öffentlich verfügbare HTML-DTD bezieht.
"-//W3C//DTD HTML 4.01//EN"
kennzeichnet das W3C als maßgeblichen Herausgeber des Dokumententyps "HTML", der in der Version 4.01 im Dokument benutzt wird. EN ist die Sprachangabe (Englisch) und bezieht sich nicht auf den Inhalt des Dokuments, sondern auf die Notation von HTML-Elementen und -Attributen.
Die URL http://www.w3.org/TR/1999/REC-html401-19991224
erlaubt dem User Agent (Browser), die DTD und darin enthaltene Regeln und Elemente zu laden, wenn sie benötigt werden. Theoretisch wäre es einem Browser dadurch möglich, auch neuere Versionen von HTML, die nach dem Erscheinen des Browsers veröffentlicht werden, korrekt zu interpretieren. In der Praxis ist wohl kaum ein Browser in der Lage, tatsächlich neuere Regeln nachträglich zu adaptieren. Die Adresse ist demzufolge auch nicht erforderlich.
strict
schließt aus, dass die Darstellung des Dokuments Elemente und Attribute benutzt, die das W3C als Aufgabe von Stylesheets ansieht. Auch die Benutzung der HTML-Elemente innerhalb des Dokuments wird bei strict sehr eng gesehen. So müssen alle Elemente innerhalb des body-Elements in Blockelementen stehen. Ein Text, der ohne umschließende <p>-Tags direkt zwischen das öffnende und schließende <body>-Tag geschrieben wird, wird bereits als Verletzung der Syntaxregeln angesehen. Webautoren sind angehalten, strict DTD so weit wie möglich anzuwenden, es bleibt Ihnen aber überlassen, transitional zu nutzen, wenn für die Präsentation des Dokuments bestimmte Elemente und Attribute erforderlich sind.
transitional
kennzeichnet ein Dokument, in dem Elemente (z.B. font-Tags) und Attribute (z.B. bgcolor) benutzt werden, die als unerwünscht gelten. Wer seine Dokumente auch für Browser, die Stylesheets noch nicht beherrschen (z.B. Netscape 3), grafisch und typografisch aufbereiten möchte, wird diese Variante sicherlich bevorzugen.
frameset
kennzeichnet ein Dokument, das Frames (nicht iframe) benutzt.
HTML 4.01 - Strict, Transitional, Frameset
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
    "http://www.w3.org/TR/html4/strict.dtd">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
    "http://www.w3.org/TR/html4/frameset.dtd">
XHTML 1.0 - Strict, Transitional, Frameset
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
XHTML 1.1 - DTD
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
MathML 2.0 - DTD
<!DOCTYPE math PUBLIC "-//W3C//DTD MathML 2.0//EN" "http://www.w3.org/TR/MathML2/dtd/mathml2.dtd">
XHTML + MathML + SVG Profile (XHTML als Host-Sprache) - DTD
<!DOCTYPE html PUBLIC
"-//W3C//DTD XHTML 1.1 plus MathML 2.0 plus SVG 1.1//EN"
"http://www.w3.org/2002/04/xhtml-math-svg/xhtml-math-svg.dtd">
XHTML + MathML + SVG Profile (Nutzt SVG als Host) - DTD
<!DOCTYPE svg:svg PUBLIC
"-//W3C//DTD XHTML 1.1 plus MathML 2.0 plus SVG 1.1//EN"
"http://www.w3.org/2002/04/xhtml-math-svg/xhtml-math-svg.dtd">

Auch wenn das <!DOCTYPE>-Tag das erste Tag des Dokuments sein soll – vor dem <!DOCTYPE>-Tag kann die XML-Deklaration erscheinen. Diese Zeile gibt die XML-Version und den verwendeten Zeichensatz an. Die XML-Deklaration wird vom W3C empfohlen, ist aber eine freiwillige Leistung. Da sie zu Problemen mit einigen Browsern führen kann, ist es in der Praxis meistens angebracht, wie nicht zu setzen. Internet Explorer fällt in den Quirksmode, wenn der xml-Prolog gesetzt wird und simmuliert wieder seine alten Fehler. 2G i-mode-Handys spielen den XML-Prolog zudem als flachen Text auf dem Display aus.

Wenn die XML-Deklaration nicht gesetzt wird, muss der Dateityp des Dokuments und der verwendete Zeichensatz in einem <meta>-Tag angegeben werden.

Nur nicht beides setzen: XML-Prolog und <meta>-Tag.