La différence fondamentale, c'est que le XHTML est compatible XML, alors que le HTML, c'est du SGML.
A première vue, c'est pareil, mais :
- le SGML accepte les tags non fermés (eg. <br> ou <li>item)
- le SGML accepte les ", les ' ou même rien pour délimiter la valeur d'un attribut (eg. <img src='image.gif' border=0 title="titre de l'image"> )
- le SGML se moque de la casse (pas de différence entre majuscules et minuscules) pour les noms de tags et d'attributs (eg. <IMG src="image.gif" Title="titre"><img SRC="image.gif" titlE="titre"> )
Alors que le XML :
- Oblige à fermes les balises (eg. <br/> ou <li>item</li> )
- N'authorise que les " comme délimiteur d'attributs (eg. <img src='image.gif'/> plante)
- Est case sensitive (eg. <IMG Src="image.gif" title="titre"/> plante, car la DTD du XHTML n'autorise que les minuscules)
Ca, c'est pour les principes de base de la syntaxe.
Ensuite, le XHTML est une évolution du HTML. Un certain nombre de tags sont "deprecated" ou même plus supportés (<iframe>, <embed>, etc.)
Ensuite, le HTML préconise l'utilisation de balises adéquates en fonction de leur contenu. Sémantiquement, le XHTML l'impose -mais ce n'est pas vérifiable automatiquement)
<p style="size: 4em;">Mon titre</p>
<div>Mon paragraphe avec du texte dedans</div>
Ca c'est pas valide XHTML.
<h1>Mon titre</h1>
<p>Mon paragraphe avec du texte dedans</p>
Ca c'est valide.
A noter que le tag <h1> est obligatoire (une page ne peut pas ne pas avoir de titre)
Pour finir, alors que le HTML tolère la mise en forme dans le code (<font color="red" size="+2">gros texte rouge</font> ) le XHTML l'interdit, et demande à passer par les CSS à la place. Un certain nombre d'attributs de mise en forme on d'ailleurs été abandonnés ou jugés deprecated dans ce sens (color, size, width, height, etc.)
Voilà pour une petite introduction rapide.