Avant d’aborder les règles de bon usage, qui ne sont pas obligatoires, voyons les règles de syntaxe qui déterminent si un code HTML est correctement écrit ou non. Ces règles sont édictées par le W3C, l’organisme chargé de normaliser et de promouvoir les langages du web. Actuellement la version majeure qui fait référence est la version HTML 5, qui apporte de nombreuses améliorations et un cap clair par rapport à HTML 4.
Attribut HTML
Nous avons vu comment écrire du texte et des balises. Il nous manque, pour les balises, une façon de préciser des informations ou d’affecter leur comportement par un attribut.
Attributs HTML
Par exemple , pour définir la langue dans laquelle un paragraphe est écrit, on utilise <p lang="fr">...</p>
.
Chaque balise a des attributs qui lui sont spécifiques et qui sont définis par la norme HTML. Par exemple la balise meta
a un attribut content
qui lui est propre et n’existe pour aucune autre balise. A l’inverse, certains attributs sont universels au sens où on peut les mettre sur n’importe quelle balise. Voici les principaux que nous utiliserons tout le temps, mais que nous verrons plus tard :
lang
: langue du texte contenu dans la balise, utile pour les moteurs de recherche et pour la traduction automatiqueid
: identifiant unique de l’élément, utile pour les CSSstyle
: style CSS donné directementclass
: classe CSS
Il est possible d’écrire plusieurs attributs dans une balise comme ceci : <p lang="fr" id="para1">...</p>
.
Hiérarchie
Les éléments HTML peuvent avoir du contenu fait de texte et de balises. Il y a donc des éléments contenant d’autres éléments « enfants ». Cette imbrication d’éléments fait qu’une page HTML peut être vue comme une hiérarchie d’éléments et de bouts de texte (on parle aussi en informatique d’arborescence).
Par exemple, le code <p>Ceci est <b>important</b><br/></p>
est interprété par le navigateur comme cette hiérarchie :
Nous verrons dans le chapitre consacré aux CSS en quoi cette façon de voir la structure d’une page est utile. Nous emploierons désormais ces termes de racine, enfant, parent, descendant et ascendant qui ont le même sens intuitif qu’en généalogie.
Disons pour l’instant, pour les questions de syntaxe, que l’imbrication parent/enfant doit être bien faites. Le parent englobe bien ses enfants délimités par la balise ouvrante et la balise fermante : <parent><enfant></enfant></parent>
.
Structures conformes
Les balises HTML de contenu comme <p>
ou <b>
ne s’écrivent pas directement dans un document HTML. Il est nécessaire de respecter une certaine forme.
Structure simple
Prenons ce simple code HTML qui affiche un titre et un paragraphe :
<h1>Maison en centre-ville</h1> <p>Maison de 105 m<sup>2</sup> idéalement située.</p>
Vérifions ce code avec le validateur HTML du W3C :
- Ouvrez dans le navigateur l’adresse https://validator.w3.org
- Allez dans l’onglet
Validate by Direct Input
, puis copier coller le code dans la grande zone de saisie - Dans les options (ouvrez
More Options
), devantUse Doctype:
, choisissezHTML 5 (experimental)
, en laissant bien cochéeValidate Full Document
- Lancez la vérification par le bouton
Check
Le validateur nous signale deux erreurs, alors que ce code HTML est correct. Notre code devrait être écrit de la sorte pour passer le test :
<!DOCTYPE html> <title>Annonce</title> <h1>Maison en centre-ville</h1> <p>Maison de 105 m<sup>2</sup> idéalement située.</p>
La première ligne est indispensable pour déclarer que le document est écrit en HTML 5. Dans les versions précédentes, notamment la 4.01, le « Doctype » était assez lourd à écrire. Désormais, en écrivant <!DOCTYPE html>
au début, vous dites au navigateur que votre document respecte la norme HTML 5.
La deuxième indique le titre de votre page tel qu’affiché par le navigateur dans un onglet. Cela paraît indispensable pour l’utilisateur !
Structure classique
La forme que nous venons de voir est simplifiée mais elle n’est pas suffisante pour donner toutes les informations utiles au navigateur pour bien interpréter la page.
La structure générale d’une page est la suivante :
<!DOCTYPE html> <html> <head> <title>Ma page</title> </head> <body> <!-- ici votre texte et vos balises à afficher --> </body> </html>
Détaillons la :
- le
DOCTYPE
déjà vu - l’élément html qui est le premier juste après
DOCTYPE
- le premier enfant essentiel est
head
qui représente l’entête informatif sur le document ; on y placera les « méta » (par exemple des mots-clés pour les moteurs de recherche), le titre et toutes les liens vers des ressources importées comme les feuilles de style - le deuxième et dernier enfant est toujours
body
dans lequel vous mettez tout le contenu qui devra s’afficher dans le navigateur.
Notez au passage comment insérer un commentaire dans le code HTML : <!-- commentaire -->
. Le texte à l’intérieur ne sera jamais affiché par le navigateur.
Structure recommandée
Ajoutons deux choses à notre page type :
- le langage du texte à indiquer par l’attribut
lang
surhtml
, de façon à ce qu’il soit valable pour tout le document - l’encodage des caractères, couramment
utf-8
, à indiquer dans une balisemeta
, qui sera amplement abordé dans la prochaine leçon
Finalement voici la structure type que nous vous recommandons, et que nous utiliserons systématiquement par la suite.
<!DOCTYPE html> <html lang="fr"> <head> <title>Ma page</title> <meta charset="utf-8"> </head> <body> </body> </html>
Conformité
Le passage du validateur oblige à respecter toutes les règles de la norme HTML 5 qui est particulièrement longue. A ce propos, la voici HTML 5 W3C, et ce n’est que le plan ! Il y a beaucoup de règles, mais ne fuyez pas elles sont assez intuitives et vous les maîtriserait aisément à l’issue de ce cours. Pour résumé, ce qu’il faut savoir :
- il y a des règles de pure syntaxe, comme bien écrire une balise <balise> par exemple et non <balise > avec un espace
- d’autres règles imposent ou interdisent certains contenus, nous verrons cela petit à petit mais ces règles relèvent du bon sens ; par exemple :
- il n’est pas possible de mettre un paragraphe (niveau paragraphe) dans une mise en forme en gras (niveau caractère), il faut faire l’inverse :
<b><p>Fort</p></b>
impossible, mais<p><b>Fort</b></p>
OK - un
<ul>
ne peut contenir que des<li>
(normal c’est une liste !)
- il n’est pas possible de mettre un paragraphe (niveau paragraphe) dans une mise en forme en gras (niveau caractère), il faut faire l’inverse :
De toute façon, pour vous contrôler et apprendre, n’hésitez pas à passer votre code au validateur W3C.
Bons usages
Terminons cette leçon par les bonnes pratiques d’écriture en HTML.
Le respect des règles de syntaxe que nous venons de voir est sanctionné par une validation qui vous répond « ok le document est conforme » ou non. Le W3C encourage également à adopter des pratiques d’écriture communes à tous les développeurs, avec deux principaux objectifs :
- faciliter le traitement automatique des pages, notamment par les moteurs de recherche, pour que vos pages soient bien référencées, classées, traduites, etc
- permettre à d’autres développeurs de lire et comprendre votre code et donc faciliter la maintenance et l’évolution de votre site web
Voyons quelques unes de ces règles qui vous paraîtront bien vite évidentes. Nous donnons ici les règles très générales, qui correspondent à la progression de ce cours. D’autres règles plus spécifiques, comme donner un texte alternatif pour une image, viendront plus tard dans le cours.
Règles de syntaxes
Informations recommandées
Il y a deux informations qu’il est fortement souhaitable de donner dans tout code HTML :
- le langage du texte à indiquer par l’attribut lang sur html, de façon à ce qu’il soit valable pour tout le document, utilisé par les moteurs de recherche
- l’encodage des caractères, couramment utf-8, à indiquer dans une balise meta (ce principe technique sera amplement abordé dans la prochaine leçon), utilisé par le navigateur
Le code suivant montre comment les fournir et nous permet aussi de conclure sur la structure de page recommandée, que nous utiliserons systématiquement par la suite.
<!DOCTYPE html> <html lang="fr"> <head> <title>Ma page</title> <meta charset="utf-8"> </head> <body> </body> </html>
Nom | Adresse | Description |
Validateur w3c | https://validator.w3.org | Vérifie la syntaxe d’un document HTML, fourni par copier-coller ou par un fichier, et signale toutes les erreurs |