5568 sujets

Sémantique web et HTML

je cherche un moyen de représenter sémantiquement une table des matières. J'ai un article qui va sur plusieurs pages, et j'aimerais l'exprimer en HTML

Hors j'ai l'impression que ça n'est même pas possible en HTML5 :

- <header> sert à grouper des méta données relatives à l'<article> parent
- <hgroup> sert pour grouper en un seul
par exemple

<hgroup>
  <h2>Amélie Poulain</h2>
  <h3>Paris comme vous ne l'avez jamais vu</h3>
</hgroup>

signifie que le titre de la section est le H2, et que le H3 peut être ignoré, ça c'est qu'un complément de titre
- <hx> servent toujours à baliser les sous titres de l'article et donner une hiérarchie

bref, dans tout ça je ne vois pas comment marquer une série de Hx comme étant la table des matières de mon article ?

une idée ?
Une liste ou un formulaire avec un select ne suffirait pas? Ou alors j'ai mal compris. Smiley sweatdrop
Modifié par Patidou (27 Aug 2010 - 15:50)
justement 3arly3F, regarde bien les réponses de HTML5 doctor dans les liens que tu m'as fourni : <header> ne sert qu'à grouper des meta données, avec entre autre le titre de l'article, mais aussi la date avec <time> ou l'auteur, bref, ça n'a rien à voir avec une table des matières

et dans mon cas, le <header> est déjà plein avec toutes ces infos


et je croyais que hgroup servait à ça mais pas du tout : relis bien leur article et tu verras que ça permet de zapper un sous titre, mais le h1 reste le titre de l'article

@patidou : je cherchais un bout de sémantique pour dire : ceci est une table des matières. Dedans je mettrais des liens ou un select mais ce qui m'importe là, c'est vraiment la sémantique
Ok. Bon, en imaginant que le sommaire se trouve sur toutes les pages c'est de la navigation, donc <nav> en dehors de <article>. Éventuellement, si il n'est pas déjà utilisé avec le role="complementary".

Sinon une page à part… Smiley smile
<nav> dans <article>, pas mal, j'aime beaucoup l'idée
et visiblement c'est même recommandé par l'excellenthttp://html5doctor.com/nav-element/ HTML5 doctor pour faire une table des matières, et d'après les specs on a le droit de l'imbriquer dans <article>

et ben voilà, quand on veut Smiley smile

par contre pour le complementary, pas sur : ça n'est pas pour donner du contenu autour du thème de l'article, c'est pour linker directement dans l'article lui même
Modifié par jpvincent (27 Aug 2010 - 17:05)
Hello,

jpvincent a écrit :
je cherchais un bout de sémantique pour dire : ceci est une table des matières

Rien de prévu spécifiquement pour ça. Mais utiliser NAV dans ARTICLE est une piste intéressante, par ailleurs donnée comme deuxième exemple de l'utilisation de NAV dans la spec.

Petite question: pourquoi baliser spécialement une table des matières? Utiliser UL suffit largement, non? Pourquoi alourdir le code en rajoutant un <nav>...</nav> autour, par exemple?

Je vois deux objectifs possibles:
1. Pour que l'UA puisse extraire une table des matières d'un article. Une table des matières «en dur» avec un balisage spécial me semble être une mauvaise solution pour ça. L'UA devrait pouvoir extraire automatiquement la table des matières d'un ARTICLE (il s'agit simplement d'isoler une branche du plan du document).
2. Pour que l'UA puisse omettre la table des matières dans la restitution de l'article, ou propose à l'utilisateur de l'omettre (dans un lecteur d'écran, une fonction «passer la table des matières»).

Le premier objectif ne me semble pas intéressant. Le deuxième l'est déjà plus, mais reste à voir si des UA en feront quelque chose ou pas (et vérifier si il n'y a pas un rôle ARIA intéressant pour ça).

À la rigueur, ça peut servir de convention d'intégration web. «Ça n'est pas capital, mais on fait comme ça.» Et, côté CSS, ça permet de faire un sélecteur sympa: article > header + nav {}.
Modifié par Florent V. (28 Aug 2010 - 22:05)
ça pourrait intéresser un browser, mais il peut déjà la fabriquer lui même après tout, sauf si l'article est sur plusieurs pages
je me disais que pour un moteur de recherche, ça pouvait servir à "ignorer" cette section qui n'est qu'une redite des titres à venir, et de lier différentes pages au même article.

mais on est d'accord qu'on est largement dans le théorique Smiley smile

à priori pas de rôle ARIA pour ça
jpvincent a écrit :
je cherche un moyen de représenter sémantiquement une table des matières. J'ai un article qui va sur plusieurs pages, et j'aimerais l'exprimer en HTML


comme ça, là, j'aurais tendance à refléter la hiérarchie du document dans la table des matières au sein d'un <hgroup> dans une liste ordonnée enveloppée éventuellement d'une <nav> puisqu'on peut y mettre un h1 afin d'avoir un outline qui se respecte.

Sinon, j'aime bien cette idée : http://www.jeremyselier.com/diveintohtml5/table-of-contents.html

Sinon (bis) une simple liste ordonnée devrait le faire Smiley cligne
br1o a écrit :
comme ça, là, j'aurais tendance à refléter la hiérarchie du document dans la table des matières au sein d'un<hgroup> dans une liste ordonnée enveloppée éventuellement d'une <nav> puisqu'on peut y mettre un h1 afin d'avoir un outline qui se respecte.

br1o les tuyaux percés. Smiley cligne
Non sérieusement, si tu veux dire par là que tu veux réutiliser des HN comme éléments de ta table des matières, c'est une très mauvaise idée. Bonjour le plan du document dédoublé! Et utiliser un tas d'éléments HN dans un HGROUP (qui n'a pas grand chose à faire dans une table des matières...), ça n'est à priori pas possible vu la définition de cet élément.
Seule idée à retenir: annoncer la table des matières par un titre.

Pour baliser le contenu de la table des matières, une liste ou des listes imbriquées (suivant jusqu'à quel niveau on veut aller dans la table des matières), c'est pas mal. C'est même un des rares cas où les listes imbriquées sont intéressantes.
À priori plutôt des listes ordonnées.

br1o a écrit :
Sinon, j'aime bien cette idée : http://www.jeremyselier.com/diveintohtml5/table-of-contents.html

L'emploi des OL imbriqués est bon.
L'utilisation de DL pour les numéros est lamentable:
- Strictement aucun intérêt à surcharger la sémantique du contenu avec des DL. La sémantique HTML c'est sensé être simple, en mettre cinq couches à chaque fois c'est contreproductif (et c'est perdre son temps).
- La numérotation ne devrait pas être un contenu HTML. Dans l'absolu elle devrait être générée en CSS (les compteurs CSS font ça très bien, de mémoire ça marche aussi dans IE8). Si on ne peut pas se permettre de faire ça en full-CSS (genre parce qu'on doit assurer le support d'IE7), on met l'info dans un SPAN et on n'en fait pas tout un plat. Donc pas:
<dl>
  <dt>
    <a>Bonjour, bonsoir</a>
  </dt>
  <dd>ix</dd>
</dl>

Mais:
<span>ix</span>
<a>Bonjour, bonsoir</a>


br1o a écrit :
Sinon (bis) une simple liste ordonnée devrait le faire Smiley cligne

Amen.
Florent V. a écrit :

br1o les tuyaux percés. Smiley cligne


héhé, mais c'est que les bons tuyaux, c'est surtout sur mon compte Twitter (et encore quand je suis en forme) Smiley lol
Article+nav me paraît être une bonne idée. Je vois bien ça comme ça :

<article>
<header>
<h1>Titre principal</h1>
<p>Introduction / résumé / chapeau / quatrième de couverture</p>
<nav>
<h2>Table des matières</h2>
<ol>
<li>...</li>
<li>...</li>
<li>...</li>
</ol>
</nav>
</header>
<h2>Chapitre 1 : ... </h2>
<p>...</p>
<p>...</p>
<h2>Chapitre 2 : ... </h2>
<p>...</p>
...
</article>


Ensuite, s'il y a un role à mettre, ce n'est pas complementary mais plutôt navigation. Complementary, normalement c'est pour des informations complémentaires: date, auteurs, tags, etc. et une table des matières, c'est bien de la navigation, pas une information complémentaire.