Der Nachfolger von HTML 4.01 ist XHTML 1.0 (eXtensible HTML) - damit änderte sich die Basis von HTML grundlegend, auch wenn die Art und Weise, auf die es verwendet wird, nach wie vor sehr ähnlich ist. Die Basis von HTML ist SGML, die von XHTML ist XML.
Um dem Browser klarzumachen, dass es sich um ein XHTML-Dokument handelt, müssen bestimmte Dokumenttypen verwendet werden. Man unterteilt XHTML in 3 verschiedene Typen: Strict, Transitional, Frameset - Im Normalfall verwendet man Transitional, Frameset nur, wenn man Frames verwendet. Strict hingegen macht häufig zu strikte Vorschriften und streicht auch sinnvolle Tags und Attribute (z.B. das Öffnen eines Links in einem neuen Fenster).
Die Dokumenttypangabe von XHTML Transitional ist:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
Aufgrund des Umstiegs auf XML muss zusätzlich der XML-Namespace mit der verwendeten Sprache im <html>-Tag angegeben werden. Das sieht so aus:
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
Während es dem Entwickler in HTML 4.01 noch freigestellt war, „müssen“ (um ein valides Dokument zu erhalten - funktionieren wird es auch anders) in XHTML sämtliche Tags und Attribute kleingeschrieben werden.
XHTML verlangt, dass jeder Tag auch einen End-Tag hat. Während man bei HTML 4.01 in Listen bei den einzelnen Punkten oft nur <li>… geschrieben hat, also auf den schließenden Tag verzichtet hat, erfordert XHTML nun auch den End-Tag, also <li>…</li>.
Eine Element, welches keinen Inhalt zwischen den Tags hat, wie z.B. der <img>-Tag, kann auch direkt mit einem Schrägstrich am Ende geschlossen werden: <img src=„LINK“ />.
Dies gilt auch für „leere Elemente“, am wichtigsten ist hier <br />, welches nun den schließenden Tag hat.
Die Elemente müssen in XHTML korrekt verschachtelt werden, d.h., ein Element, welches innerhalb eines anderen Elements geöffnet wurde, muss auch wieder innerhalb von diesem Element geschlossen werden.
Attribute „müssen“ in XHTML einen Wert zugewiesen bekommen, die reine Angabe eines Attributs wie bei einer Checkbox das Attribut „checked“ ist nicht mehr erlaubt - stattdessen muss checked=„checked“ verwendet werden.
Während man in HTML das name-Attribute verwendete, um ein Element eindeutig zu identifizieren (z.B. für die Verwendung mit Javascript), wird dieses in XHTML mit dem Attribut id ersetzt.
CSS-Definitionen, JavaScript-Code, etc. müssen in XHTML in besondere „CDATA-Bereiche“ gesteckt werden, um sicherzugehen, dass der Browser den Inhalt nicht falsch versteht.
<style type="text/css"> /*<![CDATA[*/ CSS-CODE /*]]*/ </style>
Ja, das ist kompliziert, und die Chance, sich dieses Konstrukt fehlerfrei zu merken ist eher gering. Darum empfiehlt es sich, es zu speichern und bei Bedarf einzufügen.