XHTML 1.0 jest przedstawieniem HTML 4.01 za pomocą XML. Zbiór elementów w obu językach jest taki sam, ale różnice występują w składni.
Najważniejsze różnice:
1. Typ zawartości dla XHTML to application/xhtml+xml (dla HTML to text/html).
2. W XHTMLu znaczniki dla elementów niepustych muszą być koniecznie zamykane (w kolejności odwrotnej do ich otwierania), np. <p> tekst</p>. Elementy puste muszą mieć albo znacznik zamykający albo ich znacznik otwierający musi kończyć się />.
3. Nazwy znaczników i atrybutów muszą być pisane małymi literami. W HTMLu wielkość liter nie miała znaczenia.
4. Wartości atrybutów muszą być zapisywane w cudzysłowach, np. <td rowspan=”2”>.
5. W XHTMLu muszą być zawsze atrybuty z wartością, np. <input checked=”checked”/>. HTML pozwalał na skrócone atrybuty, np. <input checked>
6. XHTML jako zgodny z XML może być łączony z innymi XML-owymi językami, np. MathML.
7. Skrypty i arkusze stylów w XHTMLu należy osadzać w następujący sposób:
<script type="text/javascript">
<![CDATA[
zawartość skryptu
]]>
</script>
8. W XHTMLu nie wolno zagnieżdżać następujących znaczników:
- a - nie może zawierać innych elementów a.
- pre - nie może zawierać elementów: img, object, big, small, sub, sup.
- button - nie może zawierać elementów: input, select, textarea, label, button, form, fieldset, iframe, isindex.
- label - nie może zawierać innych elementów label.
- form - nie może zawierać innych elementów form.