Was unterscheidet XHTML von HTML?

Grundsätzlich: XHTML nimmt es "genauer" mit der Syntax, d.h. die "Wohlgeformtheit" eines XHTML-Dokuments erzwingt fehlerfreien Code.

1) Zwingende Angabe von Dokumententyp und Namensraum 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">

Wird die doctype-Angabe nicht eingetragen, schalten aktuelle Browser in einen anderen Darstellungsmodus (Quirks-Mode), der die Befehlsauswertung und -darstellung von Browsern aus den 90er Jahren emuliert und damit häufig zu massiven Darstellungsfehlern führt (besonders bei Einsatz von CSS).
mehr dazu

2) Alle Tags müssen klein geschrieben werden.
Während bei HTML Befehle mal <klein> und mal <GROSS> geschrieben werden konnten, ebenso die Attribute, müssen in XHTML alle Tags in Kleinbuchstaben geschrieben werden.
Richtig: <p> </p> | Falsch: <P> </P>

3) Befehle müssen immer geschlossen werden.
In HTML wurde toleriert, wenn z.B. ein Absatzbefehl nicht geschlossen wurde. Bei Öffnen des nachfolgenden Absatzes ging der tolerante Browser davon aus, dass der vorhergehende geschlossen werden soll. Diese "kompakte" Schreibweise wurde leider auch in diversen Publikationen empfohlen, um das Kilobytevolumen des HTML-Dokuments zu reduzieren, obwohl dies seit Definition der HTML-Sprache als fehlerhafter Stil klargestellt wurde.
Richtig: <p>...</p><p> ...</p> | Falsch: <P>...<P>...

4) Alleinstehende Befehle müssen auch geschlossen werden.
Scheint nicht möglich wird aber wie folgt formal gelöst: Tags wie <hr>, <br> oder <img> erhalten einen "/"-Slash innerhalb der Klammer. Um diese Schreibweise zu älteren Browsern kompatibel zu halten, sollte dem "/" ein Leerzeichen voran gestellt werden.
Richtig: <br />, <hr />, <img />, <frame />, <input />
Falsch: <br>, <hr>, <img>, <frame>, <input>

5) Alle Attributswerte stehen immer in Anführungszeichen.
Richtig: <p align="right"></p> | Falsch: <p align=right></p>

6) Allein stehende Attribute erhalten sich selbst als Wert
Beispiele:
compact="compact"
checked="checked"
noresize="noresize"
selected="selected"
noshade="noshade"

7) Skripte müssen maskiert werden
Bei Einsatz von Skripten (z.B. Javascript) erwartet XHTML eine besondere Kennzeichnung als charakter data (da in Skriptsprachen Sonderzeichen verwendet werden, die in Interpretationskonflikt mit XHTML stehen):
<script type ="text/javjascript">
<!--

// <! [CDATA[

...

// ]]>
-->

</script>

Es ist zu empfehlen, Skripte aus XHTML-Dokumenten in eine eigene Datei (ähnlich CSS) auszulagern.

8) Das Attribut name (z.B. bei <a> oder <frame>) wird ersetzt durch das Attribut id (zur besseren Kompatibilität sollten vorerst beide Attribute parallel verwendet werden).

 

 

 
Warum sollte XHTML an Stelle von HTML verwendet werden?

1) XHTML ist XML-konform
Dadurch ist es möglich, XHTML mit anderen aus XML abgeleiteten Sprachen (SVG {Scalable Vector Graphics} , SMIL {Synchronized Multimedia Integration Language}, WML {Wireless Markup Language} , MathML u.a.) zu verbinden, d.h. z.B. ineinander einzubetten. So ist es zum Beispiel möglich, mathematische Formeln, die mit XHTML nicht visualisiert werden können, als Dateninsel mit MathML in XHTML-Dokumente einzufügen, oder Grafiken, die mit SVG geschrieben wurden.

2) XHTML ist zukunftssicher
Durch die XML-Kompatibilität können neue XML-basierte Module (namespaces) erstellt werden, die völlig neue Möglichkeiten eröffnen. Langfristig wird die Browserentwicklung den HTML-Support reduzieren um ausschließlich XHTML unterstützen (aufgrund der unglaublichen Masse an publizierten - falsch geschriebenen - HTML-Dokumenten im WWW wird dies aber noch eine Weile dauern).

3) XHTML ist der aktuelle Standard
Inzwischen von allen aktuellen (und auch nicht mehr ganz so aktuellen) Browsern darstellbar gibt es keine rationale Begründung, nicht den veralteten HTML 4.x-Standard über Bord zu werfen und in XHTML zu produzieren.