<C²: webløg />

Courriel - email address

Avatar Denis

mardi 09 septembre 2003
par Denis Boudreau

On en apprends tous les jours...

Innondé par le flot de courriels que je reçois tous les jours provenant d'une demi-douzaine de listes de discussions auxquelles je suis inscrit, je n'arrive jamais à tout lire. Je fais donc un tri très arbitraire des discussions que j'entends suivre et ce faisant, j'imagine que je passe souvent à côté de messages importants. Malgré cela, par chance ou par hasard, j'en attrappe parfois un au passage qui me permet de repousser un peu les limites de mes connaissances. Ce fut un peu le cas ce matin sur la liste du validateur W3, point de rencontre par excellence pour tout ce qui touche à la validation du code (x)HTML.

Poursuivons un peu dans la série des mythes et fausses croyances entourant le XHTML, telle qu'amorcée la semaine dernière dans le carnet "Les mythes entourant XHTML". Il y a une forte croyance à l'effet qu'en XHTML, tous les éléments de balisage doivent être fermés. Si c'est tout à fait vrai, par contre, il y a une zone grise souvent ignorée des développeurs, entourant l'utilisation de la barre oblique pour fermer les balises célibataires. Nous savons tous maintenant qu'un élément HTML ne comportant pas de balise de fin doit obligatoirement se fermer par lui-même avec la barre oblique (<br> devenant <br />). Mais ce que la majorité d'entre nous ignorons, c'est qu'en vrai XHTML (c'est en dire en XHTML servi avec le bon type mime), toutes les balises peuvent se fermer en elles-mêmes (dans la mesure du respect des règles de la sémantique), malgré le fait qu'elles possèdent d'office une balise de fermeture, et ce, simplement parce qu'elles sont régies par les normes XML du application/xhtml+xml plutôt que celles du HTML avec text/html.

Ainsi donc, bien que nous soyons tout à fait en droit de nous attendre à retrouver pour l'élément HTML <script> ce code [1] dans un document XHTML valide, dans le contexte d'un document XHTML servi avec le type mime application/xhtml+xml, nous pourrions tout aussi bien retrouver ceci [2] et le validateur ne souleverait aucune erreur de syntaxe :

[1] <script type="text/javascript" src="popup.js"></script>
[2] <script type="text/javascript" src="popup.js" />

Il est donc tout à fait légal d'utiliser la syntaxe des éléments vides pour tous les éléments XHTML. Vous ne devriez pas utiliser cette syntaxe si vous livrez votre document en text/html, mais le validateur ne vérifiera pas si votre document rencontre les contraintes de l'Appendix C du XHTML 1.0.

Denis Boudreau | 2003.09.09 @ 13:12

Alors, qu'en pensez-vous ?

Voici ce que vous aviez à en dire... vos impressions, recueillies à vif.

2003.09.09 @ 16:21 par Bobe

J'ajoute que l'espace avant le backslashe de fermeture n'est pas nécessaire, il est simplement là pour assurer la compatibilité ascendante avec les navigateurs périmés.

Haut retour au début de la page

2003.09.09 @ 20:13 par CYBERcodeur

Tout juste. D'ailleurs, ceux qui s'intéressent à la question devrait peut-être aller lire l'article que j'avais écrit à ce sujet sur OpenWeb : 'Passer du HTML au XHTML' (petite plogue honteuse)

http://cybercodeur.net/we...

Haut retour au début de la page

2003.09.09 @ 20:32 par Jerotito

Si je comprends bien, comme je viens de le tester, cela fonctionne aussi par exemple :
- avec un <div><object classid='' /></div>,
- avec un bloc *vide* <div style='background-image:url()' />.

C'est l'absence de contenu entre la balise d'ouverture et celle de fermeture qui implique la faculté de se passer de balise de fermeture ???

Haut retour au début de la page

2003.09.09 @ 20:37 par Jerotito

Rectification : <object> est déjà une balise sans fermeture, non ? Il est tard, j'écris n'importe quoi et ne le vois que quand il est trop tard... Mais pour le <div> avec une image d'arrière-plan, ça marche, l'observation reste sensée. ;-)

Elles ne doivent quand même pas se bousculer les portillon, les balises auxquelles on peut appliquer cette construction ?

Haut retour au début de la page

2003.09.09 @ 22:28 par CYBERcodeur

Et bien, selon toutes vraisemblances, tous les éléments XHTML peuvent passer à la moulinette XML dans un contexte de type mime application/xhtml+xml et ce, tout à fait légalement. Cependant, dans un dessein de respect de la sémantique, certains éléments ne devraient jamais subir ce sort. C'est le cas par exemple de la plupart des balises qui contiennent du texte (<p>, <ul>, <li>. <cite>, etc.) et qui perdraient leur raison d'être si elles étaient utilisées sans englober un contenu quelconque. La même réflexion s'applique également aux éléments <b>, <i>, <strong> ou <em> par exemple, qui deviendraient bien inutiles s'ils n'englogaient pas un contenu à modifier.

Mais cela n'empêcherait en rien de servir un <em /> valide et conforme, peu importe combien inutile celui-ci serait. :)

Par contre, il ne faut pas généraliser puisque cette règle pourrait très bien s'appliquer aux éléments HTML <hx>, comme dans l'exemple suivant, où le titre d'un <h1> serait un image et où le texte ne serait pas forcément indispensable, mais en théorie présent :

<h1 style='background: url(titre.png); width: 225px; height: 100px;' alt='titre' />

Il y a très certainement d'autres exemples, comme pour le DIV dont tu parlais précédemment, ainsi que pour les éléments <a />, <span />, <option /> ou encore <script /> bien entendu.

Haut retour au début de la page

2003.09.10 @ 07:44 par Jerotito

Vu l'heure tardive, je n'avais pensé à une utilisation éventuelle avec <a>, <span> et <option>. Et j'ai encore dit une ânerie un peu plus haut à propos d' <object> (balise que je n'ai jamais utilisée depuis 2 ans 1/2), car en potassant la spec, j'ai vu qu'elle *pouvait* avoir un contenu, donc elle entre aussi dans ce cas de figure *lorsqu'* elle est vide.

Mais est-ce que ce serait « sémantiquement » bien correct de l'utiliser avec des <hx> ? On est quand même censé fournir un texte, donc du contenu ?

Haut retour au début de la page

2003.09.10 @ 11:47 par CYBERcodeur

Bonne question pour l'aspect sémantique du hx... il me semble que oui, dans la mesure ou le alt et les CSS assurent un affichage de contenu associé à l'élément concerné.

Haut retour au début de la page

2003.09.10 @ 11:57 par Jerotito

[perplexe] On trouve ça à quel endroit l'attribut 'alt' pour un <hx> ??? Tu ne pensais pas plutôt à un 'title' ?

Haut retour au début de la page

2003.09.10 @ 12:03 par CYBERcodeur

Désolé, mon erreur... je me rends compte que je pensais à une image dans le h1 et donc, de l'utilisation du alt pour compenser textuellement au graphisme. Dans le cas qui nous occupe, avec un <h1 /> effectivement, pas de contenu, donc pas d'images (sauf en background) = l'attribut à utiliser serait title. :)

Merci pour la remarque. :)

Haut retour au début de la page

2003.09.10 @ 16:49 par Bobe

je préfère privilégier l'image de fond avec non affichage du span englobant le texte du titre :

<h1 id='titre'><span>titre</span></h1>

et

#titre {
background: white url('image.png') top left no-repeat;
width: [longueur de l'image]px;
height: [hauteur de l'image]px;
}

#titre span { visibility: hidden; }

Haut retour au début de la page

2003.09.10 @ 17:07 par CYBERcodeur

Oui, c'est très bien ça aussi, très propre comme façon de faire. :)

Cependant, cela demande de mettre un contenu dans l'élément H1, chose qui n'est pas nécéssaire avec l'autre approche.

Haut retour au début de la page

2003.09.10 @ 23:01 par Bobe

'Cependant, cela demande de mettre un contenu dans l'élément H1, chose qui n'est pas nécéssaire avec l'autre approche.'

serait-ce sémantique et accessible de faire cela ? je ne pense pas :)

Haut retour au début de la page

2003.09.10 @ 23:09 par CYBERcodeur

:) Bobe

Permets-moi de répéter ce que j'ai dis plus tôt ce matin :

'Bonne question pour l'aspect sémantique du hx... il me semble que oui, dans la mesure ou le alt et les CSS assurent un affichage de contenu associé à l'élément concerné.'

Je t'accorde que ce ne serait pas l'approche la plus sémantique en ville, mais à mon sens, c'est quand même encore très viable. Comparativement à d'autres éléments XHTML moins flexibles que celui-ci dans le cas qui nous occupe, le h1 a le mérite de pouvoir 'vivre' sans un contenu textuel intégré entre ses balises grâce aux images de fond par CSS et au texte alternatif.

100% respectueux de la sémantique Web ? Non, bien sûr. Mais sémantique tout de même ? Je crois que oui. Je ne demande qu'à être confondu. :)

Haut retour au début de la page

2003.09.11 @ 06:33 par Bobe

'Bonne question pour l'aspect sémantique du hx... il me semble que oui, dans la mesure ou le alt et les CSS assurent un affichage de contenu associé à l'élément concerné.'

Tu veux dire l'attribut 'title' ?

Haut retour au début de la page

2003.09.11 @ 06:39 par CYBERcodeur

Argghhh !!! Oui, pardonne-moi, l'attribut title, pas alt !

Ça fait deux fois que je me mélange dans ce thread en oubliant que je fais référence à une image qui est en background, et non DANS l'élément h1.

Je crois que je vais retourner me coucher avant de dire d'autres bêtises. ;)

Haut retour au début de la page

2003.09.11 @ 10:14 par Bobe

L'info-bulle contenant le titre pourra t-elle apparaitre si le titre h1 est vide et qu'aucun style n'est appliqué à la page?

Au passage, je n'ai vu aucune option pour visualiser le contenu des attributs title sous lynx. Est-ce possible?

Haut retour au début de la page

Les commentaires et trackbacks sont désormais fermés. Pour toute remarque, vous pouvez toujours nous contacter.

Pisteur (Trackback)