Cela me dérange depuis un certain temps, et je me demande s'il existe un consensus sur la manière de procéder correctement. Lorsque j'utilise une liste HTML, comment puis-je inclure sémantiquement un en-tête pour la liste?
Une option est la suivante:
<h3>Fruits I Like:</h3>
<ul>
<li>Apples</li>
<li>Bananas</li>
<li>Oranges</li>
</ul>
mais sémantiquement l'en- <h3>tête n'est pas explicitement associé au<ul>
Une autre option est la suivante:
<ul>
<li><h3>Fruits I Like:</h3></li>
<li>Apples</li>
<li>Bananas</li>
<li>Oranges</li>
</ul>
mais cela semble un peu sale, car l'en-tête n'est pas vraiment l'un des éléments de la liste.
Cette option n'est pas autorisée par le W3C:
<ul>
<h3>Fruits I Like:</h3>
<li>Apples</li>
<li>Bananas</li>
<li>Oranges</li>
</ul>
comme <ul>« s ne peuvent contenir un ou plusieurs <li>s »
L'ancien "en-tête de liste" <lh>est le plus logique
<ul>
<lh>Fruits I Like:</lh>
<li>Apples</li>
<li>Bananas</li>
<li>Oranges</li>
</ul>
mais bien sûr, cela ne fait pas officiellement partie du HTML
J'ai entendu dire que nous <label>utilisions comme un formulaire:
<ul>
<label>Fruits I Like:</label>
<li>Apples</li>
<li>Bananas</li>
<li>Oranges</li>
</ul>
mais c'est un peu étrange et ne validera pas de toute façon.
Il est facile de voir les problèmes sémantiques en essayant de styliser les en- têtes de ma liste, où je finis par avoir besoin de mettre mes <h3>balises dans le premier <li>et de les cibler pour le style avec quelque chose comme:
ul li:first-of-type {
list-style: none;
margin-left: -1em;
/*some other header styles*/
}
horreurs! Mais au moins de cette façon, je peux contrôler l'ensemble <ul>, l'en-tête et tout, en stylisant l' ulétiquette.
Quelle est la bonne façon de procéder? Des idées?