Aller au contenu

<h1> dans des <a> ?


Sujets conseillés

Posté

bonjour

j'ai un code du style :

<div id="conteneur">
<div id="gauche">
<a href="...."><h1>titre</h1></a>
<div class="texte">texte</div>
<a href="...."><h1>titre</h1></a>
<div class="texte">texte</div>
<a href="...."><h1>titre</h1></a>
<div class="texte">texte</div>
</div>
</div>

en validant ce code j'ai une erreur :

document type does not allow element "h1" here; missing one of "object", "applet", "map", "iframe", "button", "ins", "del" start-tag

The mentioned element is not allowed to appear in the context in which you've placed it; the other mentioned elements are the only ones that are both allowed there and can contain the element mentioned. This might mean that you need a containing element, or possibly that you've forgotten to close a previous element.

One possible cause for this message is that you have attempted to put a block-level element (such as "<p>" or "<table>") inside an inline element (such as "<a>", "<span>", or "<font>").

cette erreur n'apparait jamais sur les premeir h1 de lapage mais uniquement sur les suivants... je ne voit pas de problème... une idée ?

Posté (modifié)

C'est simple : <a> est une balise en-ligne, elle ne peut pas contenir d'éléments blocs de type <h1>.

Il n'affiche que la première erreur, mais c'est le même problème pour les suivants.

Quelques infos :

http://www.openweb.eu.org/articles/initiation_display/

http://www.yoyodesign.org/doc/w3c/css2/visuren.html

http://www.alsacreations.com/articles/blocinline/

Modifié par Sibelius
Posté

Je confirme, c'est aussi simple que ça.

<div id="conteneur">
<div id="gauche">
<h1><a href="....">titre</a></h1>
<div class="texte">texte</div>
<h1><a href="....">titre</a></h1>
<div class="texte">texte</div>
<h1><a href="....">titre</a></h1>
<div class="texte">texte</div>
</div>
</div>

Serait parfaitement valide... Maintenant, il y aurait plusieurs petits éléments à améliorer dans ce code, à commencer par l'utilisation de plusieurs h1... je suis de ceux qui soutiennent qu'on ne devrait utiliser qu'un seul h1 par page, pas plusieurs. De plus, je remplacerais les <div class="texte"> par de simples paragraphes, beaucoup plus appropriés et sémantiques...

Posté (modifié)
je suis de ceux qui soutiennent qu'on ne devrait utiliser qu'un seul h1 par page, pas plusieurs.

Voilà qui ouvre une discussion intéressante :rolleyes:

Ma petite cogitation personnelle sur le sujet:

A heading element briefly describes the topic of the section it introduces. Heading information may be used by user agents, for example, to construct a table of contents for a document automatically.

( http://www.w3.org/TR/html401/struct/global.html#edef-H1 )

Autrement-dit, la question posée est: un document HTML :

- a-t-il nécessairement une section unique titrée par un <h1>, pour l'ensemble de son contenu ?

- ou peut-il avoir plusieurs sections d'égale importance, chacune titrée par un <h1> ?

On ne peut guère répondre que: "tout dépend du contenu".

Attention ! Nous parlons de titre de section, et non du titre du document.

Le titre du document lui-même, ce qu'on pourrait appeler le titre de la ressource, relève de l'élément <title>:

<!-- The TITLE element is not considered part of the flow of text.

       It should be displayed, for example as the page header or

       window title. Exactly one title is required per document.

    -->

(...)

Every HTML document must have a TITLE element in the HEAD section.

Authors should use the TITLE element to identify the contents of a document.

( http://www.w3.org/TR/html401/struct/global.html#edef-TITLE )

Ce qui est intéressant ici, c'est le It should be displayed, for example as the page header : il se trouve qu'aucun navigateur graphique n'exploite <title>pour afficher le titre de la page dans l'affichage du document lui-même. Ils se contentent de l'afficher comme titre de fenêtre, d'onglet, etc... Mais la spécification, contrairement à ce qu'on dit souvent, n'interdit en rien à un navigateur de restituer <title> comme titre du document en tête de celui-ci. Et d'ailleurs, c'est exactement ce que font les navigateurs textes et les navigateurs vocaux (Opera), qui exploitent beaucoup mieux cet élément ;)

Nous sommes donc devant le problème suivant:

- le titre du document ne devrait être indiqué qu'à l'aide de <title>, et non avec <h1> qui est un simple titre de section.

- Mais nos navigateurs graphiques n'exploitent pas <title> pour afficher le titre du document dans celui-ci.

- donc nous nous rabattons sur un <h1>... qui, du coup, devient abusivement unique.

En fait, c'est sans doute un choix tout à fait acceptable... Mais il ne doit pas conduire à déformer l'utilisation de <h1>, et à proscrire sa véritable utilisation comme titre de section, dans laquelle il peut très bien y avoir plusieurs sections de même importance, et donc, plusieurs <h1>.

<edit> Notons en passant que rien n'empêche, dans un navigateur graphique supportant correctement CSS2, de rectifier le comportement du navigateur. Le non affichage du <title> dans le document vient simplement... de la feuille de style par défaut appliquée aux éléments HTML. Il suffit de supplanter celles-ci à l'aide de display: block...)

Modifié par LaurentDenis
Posté

La lecture des recommandations donne toujours matière à discussions :)

Comme tu l'as dis, nous nous "rabattons" sur une utilisation mutatis mutandis de l'élément h1 : si rien n'interdit de l'utiliser plusieurs fois, alors il est possible de l'utiliser une seule fois en lieu et place du titre de la page, pour combler une lacune (quoique ça dépende des points de vue) d'implémentation.

Je suis de l'avis d'utiliser plusieurs H1 par page si le besoin s'en fait sentir. En effet :

<!ENTITY % heading "H1|H2|H3|H4|H5|H6">

<!--

  There are six levels of headings from H1 (the most important)

  to H6 (the least important).

-->

(...)

A heading element briefly describes the topic of the section it introduces.

La spécification dans son ensemble parle de titre de rubriques ou sections, et pas de titre de (la) page. Les éléments hx devraient servir à baliser la structure "didactique" du document (en faire un plan), sans déborder en son niveau le plus haut sur la nature du document lui-même (c'est le rôle du titre d'indiquer ce dont parle, globalement, le document).

Seulement, pour le moment ce n'est pas très pratique...

Posté (modifié)
La spécification dans son ensemble parle de titre de rubriques ou sections, et pas de titre de (la) page.

Si: title.

Les éléments hx devraient servir à baliser la structure "didactique" du document (en faire un plan), sans déborder en son niveau le plus haut sur la nature du document lui-même (c'est le rôle du titre d'indiquer ce dont parle, globalement, le document).

Seulement, pour le moment ce n'est pas très pratique...

<{POST_SNAPBACK}>

Rien n'interdit de "déborder en son niveau le plus haut sur la nature du document lui-même, s'il y a coïncidence en raison du contenu précis de cette page.

En considérant qu'il ne faudrait pas déborder etc. , on quitte la problématique de ce qui est conforme ou non à une norme, pour entrer dans le domaine de ce qui relèverait d'une pratique recommandable.

Cela peut paraître une nuance excessive, mais la plus grande partie du problème est là: la norme est une convention forcément restrictive pour établir un langage commun afin que tout contenu soit compréhensible. Au-delà, il y a la question de savoir si on s'exprime selon <edit:supprimé>telle ou telle convention beaucoup plus subjective</edit> tel ou tel choix structurel.

Modifié par LaurentDenis
Posté (modifié)

Mes excuses, par "spécification dans son ensemble", je parlais de la partie concernant les éléments hx (ayant tronqué ma citation). Nous sommes d'accord sur ce point.

Je suis bien d'accord aussi sur la nuance déterminante entre recommandation appliquable et appliquée (convention). Mais quant à choisir de parler selon telle ou telle convention, je ne sais pas si c'est exactement un choix : les limitations techniques réduisent ce qu'il pourrait y avoir de subjectif. Je m'explique :

Pour le problème qui nous intéresse, on se rend compte qu'il y a grosso modo deux approches :

* non-confusion entre le document dans son ensemble et ses parties

* confusion entre le document et ses parties (parce qu'il n'y en a pas d'explicites, par exemple)

(La solution que tu proposais (faire s'afficher le 'title' comme titre du document, dans le document) ne fonctionnera pas non plus partout.)

Mais en-dehors de cet aspect technique, je pense qu'utiliser h1 avec la même idée que title (titre du document), c'est tout aussi subjectif que de ne pas le faire :) C'est également une liberté prise avec la spécification (et plus généralement avec la description d'un Document), en considérant qu'un document organisé en une section unique revient à parler d'un document sans section - alors qu'en définitive, il y a d'abord ce qu'est le document, puis ce qu'a le document. On ne fait pas l'amalgame pour un livre papier, on est parfois obligé de le faire pour un document virtuel. Je ne dis pas qu'il faudrait qu'un document virtuel soit "comme" un document papier, non, mais sur ce plan-là, ..oui, car la description d'un document, quelque soit sa nature, ne change pas.

Le must serait - selon moi - de pouvoir choisir simplement si on souhaite rappeller le titre du document, dans le corps du document, avant de passer à un/des éventuel(s) titre de section(s).

C'est pour ça que je dis qu'il ne faudrait pas faire l'amalgame entre titre du document et titre de section, quand bien même ce serait l'ensemble du contenu du document : je parle au conditionnel, en pensant à une meilleure implémentation de la norme... et en n'oubliant pas que c'est difficile pour le moment :)

Donc je pense à ça comme un problème qui concerne le contenu du document et pas ce qu'on en voit au final. C'est un point important de la description des documents, non ?

Modifié par jd_
Posté (modifié)
Mes excuses, par "spécification dans son ensemble", je parlais de la partie concernant les éléments hx (ayant tronqué ma citation). Nous sommes d'accord sur ce point.

Nous sommes d'accord sur bien davantage, mais je me suis manifestement mal exprimé à mon tour ;)

Pour le problème qui nous intéresse, on se rend compte qu'il y a grosso modo deux approches :

* non-confusion entre le document dans son ensemble et ses parties

* confusion entre le document et ses parties (parce qu'il n'y en a pas d'explicites, par exemple)

Oui, tout à fait d'accord. Sauf si le document n'a qu'une partie principale. Et mon avis mal exprimé était de limiter l'usage du <h1> comme réplique du titre de document à ce cas.

(La solution que tu proposais (faire s'afficher le 'title' comme titre du document, dans le document) ne fonctionnera pas non plus partout.)

Nous sommes encore d'accord, et je me suis encore mal exprimé : Solution signalée, mais pas "proposée" au sens de recommandable, pour l'excellente raison que tu explicites.

...en considérant qu'un document organisé en une section unique revient à parler d'un document sans section - alors qu'en définitive, il y a d'abord ce qu'est le document, puis ce qu'a le document.

Ceci mérite d'être creusé. Je crois qu'il faudrait avant tout chercher simplement un point d'appui à la réflexion du côté des langages basés sur RDF (FOAF, RSS1.0). En sachant qu'HTML ne fera jamais ce que XML pourra faire.

Le must serait - selon moi - de pouvoir choisir simplement si on souhaite rappeller le titre du document, dans le corps du document, avant de passer à un/des éventuel(s) titre de section(s).

un must, en effet... C'est actuellement la tentation du title et de CSS. Mais avec les défaut d'implémentation soulignés plus haut. (C'est une pure question de présentation: l'information est là, de toute façon).

C'est pour ça que je dis qu'il ne faudrait pas faire l'amalgame entre titre du document et titre de section

Nous sommes bien d'accord.

Peut-être ai-je été plus clair dans le billet qui a suivi ce post (mais poursuivons plutôt la discussion ici svp): http://blog-and-blues.org/weblog/2004/11/0...t-le-malentendu

Modifié par LaurentDenis
Posté

Bonjour,

La lecture des recommandations donne toujours matière à discussions :)

<{POST_SNAPBACK}>

Oui... et une des causes de confusion, c'est le mélange de recommandations destinées aux auteurs (webmasters) et aux agents utilisateurs (logiciels de lecture/affichage d'une page Web) auxquelles s'ajoutent des commentaires à propos des utilisateurs (internautes).

Pour l'élément title

Les auteurs devraient utiliser l'élément TITLE pour identifier le contenu d'un document. Étant donné que les utilisateurs consultent souvent les documents hors de leur contexte, les auteurs devraient fournir des titres en fonction du contexte.

...

Pour des questions d'accessibilité, les agents utilisateurs doivent toujours rendre le contenu de l'élément TITLE disponible aux utilisateurs (y compris les éléments TITLE qui apparaissent dans les cadres). Les mécanismes pour ce faire dépendent de l'agent utilisateur (par exemple, une légende, un titre sonore).

Pour les éléments hn (la distinction n'est pas aussi claire)

Un élément de titre décrit brièvement le sujet de la section qu'il introduit. Les agents utilisateurs peuvent utiliser les informations des titres pour, par exemple, construire automatiquement la table des matières du document.

Pour en revenir à h1, il faudrait déjà s'entendre sur ce que l'on entend par section.

Pour un site de type classique, cela me semble assez simple. On peut considérer qu'une section correspond à un chapitre (avec le plus souvent une page par chapitre), logiquement le contenu de h1 "résume" le contenu des informations données sous ce titre.

En suivant cette logique pour un blog, pourquoi ne pas utiliser l'élément h1 pour le titre de chaque billet ?

Posté

Je pense que ça revient ni plus ni moins qu'à une question d'école de pensée... je suis d'avis que le <title> et le <h1> devraient tenir des informations complémentaires sans pour autant être les mêmes (pour se compléter tout simplement). Je crois aussi qu'il y a toujours un titre pour le contenu (à ne pas confondre avec un titre pour la page) de manière globale - dès lors, le h1 - ce qui implique automatiquement dans ma tête que les sections d,un document sont automatiquement des h2.

Posté (modifié)
Je crois aussi qu'il y a toujours un titre pour le contenu (à ne pas confondre avec un titre pour la page) de manière globale

<{POST_SNAPBACK}>

Hum... Si je te suis, tu raisonnes en termes de contenu unique.

Que fais-tu d'une page simplement bilingue :

<div lang="en">
  <titre>Web Standards</titre>
  ...
</div>

<div lang="fr">
  <titre>Les Standards Web</titre>
  ...
</div>

Comment ne pas se fâcher avec les anglophobes ou avec les francophobes en optant pour un titre unique ? ;)

Mon exemple relève plus du gag que d'autre chose (quoique...). Mais tous les contenus ne me semblent pas pouvoir recevoir un titre unique.

(Dans nos blogs, un titre unique de page = le titre du billet et un titre <h2> de menu sont déjà plutôt abusifs.)

Modifié par LaurentDenis
Posté
Que fais-tu d'une page simplement bilingue :

<div lang="en">
  <titre>Web Standards</titre>
  ...
</div>

<div lang="fr">
  <titre>Les Standards Web</titre>
  ...
</div>

Comment ne pas se fâcher avec les anglophobes ou avec les francophobes en optant pour un titre unique ? ;)

La situation ne se poserait pas puisqu'au pire, j'aurais un script qui afficherait dans un h1 le contenu dynamiquement... donc soit l'un ou l'autre, mais pas les deux et encore moins une duplication comme tu le proposes... MAis ça c'est moi et je détourne volontairement ta question. Pour être de bonne foi, dans une page statique qui aurait du contenu dupliqué dans les deux langues, alors oui je concède que d'avoir deux h1 ferait sens... mais un sens amoindri par le fait qu'à la base, fonctionner ainsi releverait du non-sens. ^_^

Posté

Bonjour,

pour ce qui est de mes <div class="texte"> il ne s'agit pas de paragraphes... donc pas de <p>, les paragraphes sont dans les div. l'apellation pouvait paraitre trompeuse, mais le div sert bien de conteneur.

le resultat

Posté

Je viens de regarder ton site et je ne suis pas d'accord.

<div class="texte">New-concept est un systeme avancé de gestion de site internet.<br />
Le but étant de ne pas avoir de code redondant, et de gagner du temps sur le développement en réutilisant le même code d'un site à l'autre. Pour avoir un maximum d'éfficience et de portabilité, le site est entièrement codé en respectant les standard du W3C, CSS2.0 et XHTML1.0strict. Les standard de code PHP sont également respectés. La séparation du design, du code et du contenu à également été respectée de manière à pouvoir intervenir sur l'un de ces composants sans modifier les autres.</div>

Il s'agit ni plus ni moins que d'un paragraphe, donc si tu veux être plus sémantique (mais rien ne t'y oblige), tu devrais utiliser la balise <p>

Posté (modifié)

En fait pour cette page oui, mais clea dépends des pages... certaines contiennent des formulaires, commela page contact, d'autre des listes ou des tableaux... voire plusieurs sous titres et plusieurs paragraphes...

regarde la page contact par exemple. ;-)

Modifié par martin
Posté

Cela ne t'empêche en rien de traiter ceux qui s'avèrent être des paragraphes comme des paragraphe. Pourquoi devrais-tu tous les traiter de la même manière s'ils ne remplissent pas tous le même rôle ?

Posté
Les éléments hx devraient servir à baliser la structure "didactique" du document (en faire un plan), sans déborder en son niveau le plus haut sur la nature du document lui-même (c'est le rôle du titre d'indiquer ce dont parle, globalement, le document).

Entièrement d'accord avec toi sur le fond, je me pose cependant une question: qu'est-ce que ce "niveau le plus haut" lié à la nature du document lui-même ? Comment l'inscrirais-tu dans un contenu(X) HTML ?

Posté (modifié)

Je te remercie pour ta question :)

Je vais reprendre mon exemple du livre - quand bien même il est sujet à critique, ce sera plus simple pour exposer l'idée.

Quand je prend un livre dans ma bibliothèque, j'en observe d'abord l'allure générale, soit pour faire vite, la couverture. Au minimum (exceptions rares mises à part), elle comporte le titre du livre, pour pouvoir l'identifier (oublions les considérations de tranche, recto, verso). C'est ce qui me semble être le "niveau le plus haut" pour un document de type livre - le premier contact en sorte, qui donne un renseignement nécessairement et volontairement étiolé, mais crucial.

Ensuite, j'ouvre le livre. Dans la majorité des cas (encore une fois, hors exceptions rares et propres au support du livre), j'ai successivement et au minimum : un rappel du titre mentionné sur la couverture (parfois précisé d'un sous-titre), puis se déroule à mes yeux l'ensemble du contenu du livre avec des séparations en chapitres, sous-chapitres, (...), paragraphes.

Le titre (title) d'un document web me semble jouer le même rôle que le titre inscrit sur la couverture du livre : il fait partie d'un ensemble de méta-donnée (encore que le terme ne soit pas exact, mais il est parlant). C'est aussi ce titre-là que je souhaiterais pouvoir rappeler (ou non, pour un aspect pratique propre au web) dans le contenu du document (ie. les pages du livre), au même niveau que le reste du "plan didactique" (entendre par là la "structure" qui permet de s'y retrouver une fois entré dans le livre/le document).

Une objection : le titre inscrit sur la couverture n'est-il pas déjà un élément du livre, du contenu ? Bien sûr que si, mais tout de même : ce titre de couverture n'en est pas moins à part, et physiquement (il n'est pas inscrit dedans, mais dehors), et de part sa fonction (ce qu'il dit caractérise le livre).

Evidement, cette approche est assujettie aux réserves déjà soulignées, et surtout celle-ci : un document web ne permet pas aisément de distinguer ce qui serait "titre en tant que métadonnée" et "titre rappelé en tant que contenu" - parce que le premier title apparaît en même temps que le contenu, notament !

En fait, on a la tentation de considérer le premier title au même rang que ce qui sert à "baliser" (mettre des marques visibles) le contenu du document, parce que c'est pratique. A mon avis, c'est lui faire un grand déshonneur :)

Utiliser un h1 en ce sens, peut être une bonne initiative, donc - mais souvent, elle ne l'est pas car elle vient comme une information caractéristique par défaut. Pour le problème de la redondance des h1, je pense qu'on a fait le tour.

Enfin, un autre problème : on remarque que pour un livre, il y a nette séparation entre le titre de la couverture, le titre rappelé dans les pages, et un éventuel identifiant générique du livre (ISBN...). Pour un document web, c'est beaucoup plus complexe : les deux premières informations (de nature différente) viennent en même temps, un identifiant n'est pas toujours requis (quoique l'url en joue le rôle, et s'y ajoute alors la confusion en identifiant et nom du document !).

Tout ça est un peu tiré par les cheveux, mais on voit comment un problème technique peut cacher un vrai problème de définition de ce qu'est un document virtuel :)

En tout cas, ça me semble être dans la logique "séparation contenu/présentation", avec présentation ici qui rime avec information ;)

edit: je n'ai pas répondu à la deuxième question. En fait, je n'en sais rien. Actuellement il n'y a aucun moyen de faire la distinction entre les deux niveaux d'abstraction, si je puis dire, du document. A vrai dire, je crois qu'il n'y aura jamais aucun moyen de le faire parce que ça n'a pas de sens. Pourtant, ce pourrait être pratique, par exemple pour une impression d'un document, ou son envoi par mail...

Ceci mérite d'être creusé. Je crois qu'il faudrait avant tout chercher simplement un point d'appui à la réflexion du côté des langages basés sur RDF (FOAF, RSS1.0). En sachant qu'HTML ne fera jamais ce que XML pourra faire.

La voie à suivre, tu l'as indiqué en disant ça :)

C'est un problème vraiment complet et complexe, parce que ça ne concerne pas que le document en tant que bidule figé...

Modifié par jd_
Posté

denis > ceux qui sont des paragraphes sont traités comme tels, mais dans la balise div. Car au moment dela création de la "boite" je ne sais pas encore ce qu'il y aura dedans, vu que cela dépends d'une inclusion de fichier txt ou bdd.

J'ai choisi cette méthode générale qui permet d'accepter tout les cas auxquels je me confronte et d'être assurément compatible, même si parfois il y à ue balise div qui paraît superflue.

Posté
ceux qui sont des paragraphes sont traités comme tels, mais dans la balise div. Car au moment dela création de la "boite" je ne sais pas encore ce qu'il y aura dedans, vu que cela dépends d'une inclusion de fichier txt ou bdd.

Qu'entends-tu par "traités comme tels, mais dans la balise div" ? Que tu remplaces le <p> par un <div> ou que tu inclus un <p> dans un <div> lorsque le contenu est de type paragraphe ? Parce que de mémoire, dans le cas que nous avons observé, il s'agissait bel et bien d'un paragraphe, mais les <p></p> étaient absents.

Posté

il est possible qu'ilmanque les <p> sur certains paragraphes, le site étant en fait un laboratoire pour mes recherches et développement... donc en perpétuel mouvement ;-)

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...