Après l’article Quelques notes sur la balise h1 avec HTML5 dans lequel j’ai abordé l’utilisation des niveaux d’en-tête `h1 — h6` pour savoir dans quelle mesure il est judicieux d’utiliser une ou plusieurs balises `h1` dans une même page Web, je continue sur ma lancée avec la notion d’Outline. Cette dernière fournit la liste des sections imbriquées impliquant les éléments de type Sectioning Content ou Sectioning Root. Chaque section peut être associée à un niveau d’en-tête et peut contenir autant de sections imbriquées que l’on veut. Notez que les sections dont on parle ne sont pas nécessairement l’élément `section` lui-même (même si ce dernier fait partie des éléments ayant une portée de Sectioning Content).
Balises h1, avec ou sans section ?
HTML5 Outliner est un outil qui permet de souligner la structure hiérarchique d’un document HTML en mettant en évidence les différents niveaux d’en-tête et de sections. En HTML5, les sections sont déterminées de deux manières :
- Explicite, avec les éléments ayant une portée de Sectioning Content (`article`, `aside`, `nav` ou `section`).
- Implicite, avec les élements d’en-tête (Headings) (`h1`, `h2`, `h3`, `h4`, `h5`, `h6` et `hgroup`).
Pour s’en convaincre, il suffit de jeter un oeil sur les deux exemples mis en ligne par @futomi qui tient un blog consacré à HTML5 (oui, c’est en japonais, mais le code n’a pas de frontière et Google Translate est toujours ton ami) :
Section implicite
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8" /> <title>outline1</title> </head> <body> <article> <h1>a</h1> <h1>b</h1> <h1>c</h1> </article> </body> </html>
Source : http://www.html5.jp/test/outline1.html
Section explicite
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8" /> <title>outline2</title> </head> <body> <section> <h1>a</h1> </section> <section> <h1>b</h1> </section> <section> <h1>c</h1> </section> </body> </html>
Source : http://www.html5.jp/test/outline2.html
La vérification avec HTML5 Outliner montre une hiérarchie similaire, même si le maquage HTML est différent. La section Untitled qui apparait au début n’est autre que la section introduite par la balise `body` qui a une portée de Sectioning Roots avec `blockquote`, `details`, `fieldset`, `figure` et `td`. Ce n’est pas très gênant dans la mesure où un document HTML5 reste valide sans `body` lorsqu’il n’est pas nécessaire, ce qui est le cas ici.
Outline, au pied !
Si l’on raisonne en terme de page Web et non plus uniquement en terme de document, on peut se trouver face à quelques problèmes de structure, notamment, si l’on désire que les en-têtes contenus dans une balise `aside` suivent la hiérarchie initiée plus haut dans la page. Par exemple :
<!DOCTYPE html> <html> <head><title>Test</title></head> <body> <article> <h1>Title 1</h1> <h2>Title 2</h2> <aside>Aside</aside> <h3>Title 3</h3> </article> </body> </html>
Est compris comme :
article h1 h2 aside h3
Alors que l’on voudrais que le `h3` contenu dans la balise `aside` descende de `h2` au lieu que la balise `aside` (suivant logiquement son statut de Sectioning Content) ne remette la hiérarchie des en-têtes `h1 — h6` à zéro, pour obtenir :
article h1 h2 aside h3
Pour cela, il est nécessaire d’utiliser des sections explicites, comme :
<!DOCTYPE html> <html> <head><title>Test</title></head> <body> <article> <h1>Title 1</h1> <section> <h2>Title 2</h2> <aside>Aside</aside> <section> <h3>Title 3</h3> </section> </section> </article> </body> </html>
Titre h1 et sous-titre h2 informatif
Il peut arriver que l’on désire utiliser envelopper un titre avec la balise `h1` et un sous-titre dans une balise `h2`. Si on utilise :
<section> <h1>Section and outlines of a document</h1> <h2>HTML, HTML5, Sections, Outlines</h2> </section>
On va se retrouver avec une structure qui risque de «décaler» la hiérarchie de notre document, comme :
1. Section and outlines of a document 1.1 HTML, HTML5, Sections, Outlines
Pour éviter que notre balise `h2` n’apparaisse dans l’outine, il suffit d’utiliser l’élément `hgroup` :
<section> <hgroup> <h1>Justine</h1> <h2>Les Malheurs de la vertu</h2> </hgroup> </section>
Qui nous donnera l’outline suivant :
1. Justine
Pour finir
Je vous laisse avec quelques liens triés sur le volet à propos de l’Outline des documents Web. N’hésitez pas à partager vos expériences heureuses ou non concernant le balisage des pages Web avec les nouvelles balises HTML5.
Linkographie
- HTML5 Outliner — Outil en ligne permettant de mettre en évidence la structure d’une page Web.
- HTML5 Outliner pour Google Chrome (via HISEO) — Extension Chrome/Chromium pour mettre l’Outline en évidence. Les éléments sélectionnés apparaissent dans la page en clignotant. Devient vite indispensable pour comprendre les sites web surchargés 😉
- Questioning the HTML5 outline algorithme
- Sections and outlines of an HTML5 document
- Conception d’une page Web avec HTML5 & CSS3
- Tous les articles taggués HTML5 sur CSS 4 Design
Je trouve dommage de mettre un
<
h2> dans un
alors que HTML5 prévoie qu’on puisse mettre un nouveau
<
h1> qui est bien d’un niveau inférieur dans l’outline. C’est tellement plus pratique quand on fait du dynamique.
argh, la balise « code » ne semble pas fonctionner… 🙁
Très instructif ce petit billet…
Le premier test avec la balise
aside
ne pose-t-il pas la question des limites l’utilisation de ce type de balise avec des titres ?