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?
la source
Réponses:
Comme Felipe Alsacreations l'a déjà dit, la première option est bonne.
Si vous voulez vous assurer que rien en dessous de la liste n'est interprété comme appartenant à l'en-tête, c'est exactement à quoi servent les éléments de contenu de coupe HTML5. Donc, par exemple, vous pouvez faire
la source
<h1>
à l'intérieur du<section>
car c'est l'en-tête de niveau supérieur dans ces balises.<h1>
là-bas, bien sûr. Mais<h3>
ça va aussi. Tant que vous n'utilisez pas un titre de niveau supérieur dans la même section.Dans ce cas, j'utiliserais une liste de définitions comme suit:
la source
Votre première option est la bonne. C'est la moins problématique et vous avez déjà trouvé les bonnes raisons pour lesquelles vous ne pouvez pas utiliser les autres options.
Au fait, votre rubrique EST explicitement associée au
<ul>
: il est juste avant la liste! ;)edit: Steve Faulkner, l'un des éditeurs de W3C HTML5 et 5.1 a esquissé une définition d'un
lt
élément . C'est un brouillon non officiel dont il discutera pour HTML 5.2, rien de plus pour le moment.la source
<p>
. Mais j'aimerais encore quelque chose d'un peu plus explicite, quelque chose comme l'for
attribut pour un<label>' or the
<th> `pour les tables. Je pense que l'<lh>
option aurait le plus de sens si elle était réellement prise en charge par le W3C.un <div> est une division logique dans votre contenu, sémantiquement ce serait mon premier choix si je voulais grouper l'en-tête avec la liste:
alors vous pouvez utiliser le css suivant pour tout styliser ensemble comme une seule unité
la source
Vous pouvez également utiliser l'
<figure>
élément pour lier un en-tête à votre liste comme ceci:Source: https://www.w3.org/TR/2017/WD-html53-20171214/single-page.html#the-li-element (Exemple 162)
la source
Essayez de définir une nouvelle classe, ulheader, en css. p.ulheader ~ ul sélectionne tout ce qui suit immédiatement Mon en-tête
la source
Selon w3.org (notez que ce lien se trouve dans le brouillon de spécification HTML 3.0 expiré depuis longtemps ):
la source
HTML 3.0
Whoa c'est un très vieux document.J'ai mis le titre à l'intérieur du ul. Aucune règle n'indique que UL doit contenir uniquement des éléments LI.
la source