Pourquoi un DOCTYPE ?
Selon les spécifications du HTML et du XHTML, un DOCTYPE (contraction pour Document Type Declaration) informe l’agent utilisateur (le navigateur) de la version de HTML ou XHTML que le document utilise, et doit apparaitre en première position dans chaque page web. Le DOCTYPE est une composante essentielle pour les pages conformes aux spécifications : ni le balisage, ni les CSS ne passeront une validation sans DOCTYPE.
Les DOCTYPEs sont essentiels pour que les documents web s’affichent et fonctionnent correctement dans des navigateurs conformes aux standards, comme Mozilla, IE5/Mac, IE6/Win, Safari, Firefox, Camino, Omniweb, etc.
Un DOCTYPE récent qui inclut une URI complète (une adresse web complète) commande à ces navigateurs d’afficher votre page en utilisant le mode conforme (standard compliant mode), traitant ainsi le document (X)HTML, CSS, et DOM (Document Object Model) d’une façon prévisible.
Utiliser un DOCTYPE incomplet ou obsolète - voire aucun DOCTYPE - déclenche dans ces navigateurs le mode Quirks (que l’on pourrait traduire par : « imprévisible ») qui va considérer le balisage comme invalide et/ou démodé, conforme seulement aux interprétation inconsistantes de l’industrie de la fin des années 90.
Dans ce mode, le navigateur va essayer de traiter la page en mode de rétro-compatibilité, affichant vos CSS comme IE4 aurait pu le faire, et retournant à un DOM propriétaire et spécifique au navigateur (IE retourne au DOM IE ; Mozilla et Netscape 6 retournent vers Dieu sait quoi) [1].
Parfois, c’est ce qui est désiré ; mais la plupart du temps, ce n’est pas souhaitable. Mais c’est souvent ce que nous obtiendrons, à cause de la prépondérance des informations erronées ou incomplètes sur le DOCTYPE. De là l’importance d’utiliser le DTD le plus approprié.
Les DTDs les plus courants
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"> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">Un exemple de gabarit minimal
Pour une liste complète des DTD disponibles, voir :
Quel DOCTYPE choisir ?
Utilisez de préférence XHTML1.0 Strict : c’est a priori le plus adapté à de nombreux besoins et c’est la plus facile à utiliser et à apprendre.
Si vous utilisez des iframe ou un attribut target, utilisez XHTML1.0 transitional.
Si vous voulez utiliser les frameset et frame : utilisez la DTD XHTML1.0 frameset.
Conclusion
En guise de conclusion [2], soulignons quatre constats sur lesquels les malentendus sont fréquents :
- XHTML1.0 ne sépare pas plus le contenu et la présentation qu’HTML4.01 : dans les deux cas, c’est en fait le choix entre tansitional et strict qui fait la différence, ce dernier exigeant une nette séparation du contenu et de la présentation ;
- Aucune de ces DTD n’apporte plus d’accessibilité a priori : XHTML1.0 n’est pas plus accessible qu’HTML4.01. C’est l’usage que vous en ferez qui fera la différence ;
- XHTML1.0 n’apporte aucun gain « sémantique » par rapport à HTML4.01, dont il reprend les éléments et la quasi-totalité des attributs. Là encore, ce sont les bonnes pratiques que vous adopterez qui fera la différence.
- XHTML1.0 n’est pas plus difficile à apprendre qu’HTML4.01, au contraire : la syntaxe rigoureuse limite les confusions et les risques d’erreurs.
