L’Hypertext Markup Language, généralement abrégé HTML, est le format de données conçu pour représenter les pages web. C’est un langage de balisage qui permet d’écrire de l’hypertexte, d’où son nom. HTML permet également de structurer sémantiquement et de mettre en forme le contenu des pages, d’inclure des ressources multimédias dont des images, des formulaires de saisie, et des éléments programmables tels que des applets. Il permet de créer des documents interopérables avec des équipements très variés de manière conforme aux exigences de l’accessibilité du web. Il est souvent utilisé conjointement avec des langages de programmation (JavaScript) et des formats de présentation (feuilles de style en cascade). HTML est initialement dérivé du Standard Generalized Markup Language (SGML).
L’anglais Hypertext Markup Language est rarement traduit littéralement en langage de balisage d’hypertexte. On utilise généralement l’abréviation HTML, parfois même en répétant le mot « langage » comme dans « langage HTML ». Hypertext est parfois écrit HyperText pour marquer le T de l’abréviation HTML.
Le public non averti parle parfois de HTM au lieu de HTML, HTM étant l’extension de nom de fichier tronquée à trois lettres, une limitation qu’on trouve sur d’anciens systèmes d’exploitation de Microsoft.
HTML est un langage de description de document qui se présente sous la forme d’un langage de balisage dont la syntaxe vient du Standard Generalized Markup Language (SGML).
Jusqu’à sa version 4.01 comprise, HTML est formellement décrit comme une application du Standard Generalized Markup Language (SGML). Cependant, les spécifications successives admettent, par différents biais, que les agents utilisateurs ne sont pas, en pratique, des analyseurs SGML conformes. Les navigateurs web n’ont jamais été capables de déchiffrer l’ensemble des variations de syntaxe permises par SGML ; en revanche ils sont généralement capables de rattraper automatiquement de nombreuses erreurs de syntaxe, suivant la première partie de la « loi de Postel » : « Soyez libéral dans ce que vous acceptez, et conservateur dans ce que vous envoyez » (RFC 791). De fait, les développeurs de pages web et de navigateurs web ont toujours pris beaucoup de liberté avec les règles syntaxiques de SGML. Enfin, la Document Type Definition (DTD) de HTML, soit la description technique formelle de HTML, n’a été écrite par Dan Connolly que quelques années après l’introduction de HTML.
Malgré les libertés prises avec la norme, la terminologie propre à SGML est utilisée : document, élément, attribut, valeur, balise, entité, validité, application, etc. Grâce à la DTD, il est possible de vérifier automatiquement la validité d’un document HTML à l’aide d’un parseur SGML.
À l’origine, HTML a été conçu pour baliser (ou marquer) simplement le texte, notamment pour y ajouter des hyperliens. On utilisait un minimum de balises, comme dans le document HTML suivant :
Exemple de HTML Ceci est une phrase avec un hyperlien.Ceci est un paragraphe où il n’y a pas d’hyperlien.
Cet exemple contient du texte, cinq balises et une référence d’entité :
est la balise ouvrante de l’élément TITLE
.
est la balise fermante de l’élément TITLE
.Exemple de HTML
est le contenu de l’élément TITLE
.
est la balise ouvrante de l’élément A
, avec : HREF=cible.html
, l’attribut HREF
dont la valeur est cible.html
(les guillemets ne sont obligatoires autour de cette valeur que dans certains cas de syntaxes de cette dernière).
est la balise ouvrante de l’élément P
. Toutefois, elle est utilisée ici comme s’il s’agissait d’un séparateur de paragraphe, et c’est même ainsi qu’elle est souvent présentée dans les plus anciennes documentations de HTML. Il s’agit de la balise ouvrante du paragraphe dont le contenu est Ceci est un paragraphe où il n’y a pas d’hyperlien.
La balise fermante de l’élément P
, qui est optionnelle, est ici omise. L’élément P
est implicitement terminé lorsqu’un nouveau paragraphe commence ou que l’élément parent est fermé (cas présent).ù
est une référence d’entité représentant le caractère « ù ».Un document HTML valide est un document qui respecte la syntaxe SGML, n’utilise que des éléments et attributs standardisés, et respecte l’imbrication des éléments décrite par le standard. Il ne manque qu’une déclaration de type de document à l’exemple précédent pour qu’il soit un document HTML 2.0 valide [1].
Un document valide n’est cependant pas suffisant pour être conforme à la spécification HTML visée. En effet, outre l’exigence de validité, un document conforme est soumis à d’autres contraintes qui ne sont pas exprimées par la définition de type de document (DTD), mais qui le sont par la spécification elle-même. C’est notamment le cas du type de contenu de certains attributs, comme par exemple celui de l’attribut datetime
: pour être conforme à HTML4.01, celui-ci doit être lui-même conforme à un sous-ensemble de la norme ISO 8601. Un parseur strictement SGML tel que le validateur HTML du W3C ne peut donc déterminer la conformité d’un document HTML.
Dans les premières années, les documents HTML étaient souvent considérés comme des structures plates, et les balises comme des commandes de style. Ainsi la balise
était considérée comme un saut de ligne, et la balise
document.forms
et document.links
.
Avec l’introduction des Cascading Style Sheets et du Document Object Model, il a fallu considérer que les documents HTML ont une véritable structure en arbre, avec un élément racine contenant tous les autres éléments. Les balises ouvrantes et fermantes de ces éléments restent d’ailleurs optionnelles. Cependant, aujourd’hui, on a tendance à baliser chaque élément et à indiquer la DTD. Chaque élément fait partie du contenu d’exactement un autre élément ; cet « arbre du document » est notamment utilisé par la structure de formatage qui en est dérivée pour l’application des feuilles de style en cascade où chaque élément peut avoir un fond, un bord et une marge propres.
Source HTML | Modèle du document |
---|---|
> > | html head title texte body texte a texte texte p texte |
La version 4 de HTML décrit 91 éléments. En suivant la spécification de HTML 4, les fonctionnalités implémentées par HTML peuvent être réparties ainsi :
Les attributs permettent de préciser les propriétés des éléments HTML. Il y a 188 attributs dans la version 4 de HTML.
Certains attributs s’appliquent à presque tous les éléments :
id
(identificateur unique) et class
(identificateur répétable) destinés à permettre l’application de traitements externes, tels que l’application de styles de présentation ou de manipulation de l’arbre du document via un langage de script. Il s’y ajoute l’attribut style
permettant de définir le style de présentation de l’élément (généralement en CSS), et l’attribut title
apportant une information complémentaire de nature le plus souvent libre (L’exception majeure est l’utilisation du title
pour déterminer le style permanent et les éventuels styles alternatifs appliqués à un document via des éléments link
).dir
et lang
spécifiant la direction d’écriture et la langue du contenu ;onclick
, ondblclick
, onkeydown
, onkeypress
, onkeyup
, onmousedown
, onmousemove
, onmouseout
, onmouseover
, onmouseup
, qui capturent les évènements générés dans l’élément pour appeler un script.D’autres attributs sont propres à un élément unique, ou des éléments similaires. Par exemple :
img
, object
, iframe
.label
des étiquettes des contrôles de formulaire et son attribut for
désignant le contrôle concerné : c’est, en HTML, et avec les attributs usemap
et ismap
des images, l’une des très rares associations explicites et formalisées entre des éléments, indépendamment de leur ordre linéaire dans le code source.La plupart des attributs sont facultatifs. Quelques éléments ont cependant des attributs obligatoires :
img
est obligatoirement doté d’un attribut src
spécifiant l’URI de la ressource graphique qu’il représente. Il en est de même de tous les éléments dits « vides » et « remplacés » qui, au prix d’une entorse aux règles SGML, n’ont pas de contenu propre. C’est également le cas d’éléments non vides pour des raisons fonctionnelles, comme l’élément form
dont l’attribut action
indique la cible serveur qui traitera les données après soumission ;alt
permettant d’indiquer un contenu textuel brut destiné à remplacer la ressource graphique dans les contextes de consultation où elle ne peut pas être restituée ou perçue.Le type de contenu des attributs HTML échappe pour partie au champ d’application de cette norme, et sa validation relève de normes tierces telles que les URI, les types de contenu ou les codes de langages.
Certains attributs sont enfin de type booléen. Ce sont les seuls attributs dont la syntaxe peut être validement implicite en HTML : l’attribut selected
d’un contrôle de formulaire peut ainsi être raccourci sous la forme selected
remplaçant la forme complète selected="selected"
. Cette forme particulière est un des points différenciant HTML de la syntaxe des documents « bien formés » au sens XML.
Les pages Web peuvent être rédigées dans toutes sortes de langues et de très nombreux caractères peuvent être utilisés, ce qui requiert soit un jeu de caractères par type d’écriture, soit un jeu de caractères universel. Lors de l’apparition de HTML, le jeu de caractères universel Unicode n’était pas encore inventé, et de nombreux jeux de caractères se côtoyaient, notamment ISO-8859-1 pour l’alphabet latin et ouest-européen, Shift-JIS pour le japonais, KOI8-R pour le cyrillique. Aujourd’hui, le codage UTF-8 de Unicode se répand.
Le protocole de communication HTTP transmet le nom du jeu de caractères. L’en-tête HTML peut comporter le rappel de ce jeu de caractères, qui devrait être identique, sauf erreur de réglage. Enfin, suite à un mauvais réglage, le jeu de caractères réellement utilisé peut encore différer du jeu annoncé. Ces mauvais réglages causent généralement des erreurs d’affichage du texte, notamment pour les caractères non compris dans la norme ASCII.