192 votes

Quels sont tous les éléments valides de fermeture automatique dans XHTML (tel qu'implémenté par les principaux navigateurs)?

Quels sont tous les éléments auto-fermants valides (par exemple
) dans XHTML (tel qu'implémenté par les principaux navigateurs) ?

Je sais que XHTML permet techniquement à n'importe quel élément d'être auto-fermé, mais je recherche une liste de ces éléments pris en charge par tous les principaux navigateurs. Voir http://dusan.fora.si/blog/self-closing-tags pour des exemples de certains problèmes causés par des éléments auto-fermants comme

.

7 votes

Ne cela ne contredit-il pas l'un des buts de XHTML? Je pensais qu'un des avantages de XHTML était que vous pouviez utiliser un générateur XML pour générer du HTML. Pourquoi un générateur XML serait-il au courant des balises autorisées à se fermer automatiquement? Trop bizarre.

6 votes

La raison pour laquelle la réponse "faible", "incorrecte" a été acceptée est parce qu'elle répondait à la question que kamens posait évidemment. Il voulait savoir quels éléments pouvaient être auto-fermés lors de la fourniture de XHTML en tant que texte/html sans causer de problèmes de rendu dans les navigateurs. Beaucoup de pages sont écrites en XHTML et servies en tant que texte/html même si c'est techniquement incorrect. La question pourrait être améliorée avec cette clarification, mais répondre à une question différente (ce qui se passe lorsque vous servez en tant que application/xml, ou si les balises uniques en texte/html doivent avoir un / de fermeture) n'est pas utile dans ce cas.

185voto

porneL Points 42805

Chaque navigateur qui prend en charge XHTML (Firefox, Opera, Safari, IE9) prend en charge la syntaxe d'auto-fermeture sur chaque élément.

, </code>, <code><br></br></code> devraient tous fonctionner parfaitement. S'ils ne le font pas, alors vous avez du <em>HTML</em> avec une DOCTYPE XHTML inappropriée.</p> <p><strong>La DOCTYPE ne change pas la façon dont le document est interprété. <a href="http://www.webdevout.net/articles/beware-of-xhtml#content_type" rel="noreferrer">Seul le type MIME le fait</a></strong>.</p> <p><a href="https://lists.w3.org/Archives/Public/www-html/2000Sep/0024.html" rel="noreferrer">Décision du W3C concernant l'ignorance de la DOCTYPE</a>:</p> <blockquote> <p>Le HTML WG a discuté de cette question : l'intention était de permettre aux anciens navigateurs (HTML uniquement) d'accepter les documents XHTML 1.0 en suivant les directives et de les servir en tant que text/html. Par conséquent, les documents servis en tant que text/html doivent être traités comme du HTML et non comme du XHTML.</p> </blockquote> <p>C'est une erreur très courante, car le Validator du W3C ignore largement cette règle, mais les navigateurs la suivent religieusement. Lisez <a href="https://webkit.org/blog/68/understanding-html-xml-and-xhtml/" rel="noreferrer">Comprendre HTML, XML et XHTML</a> du blog de WebKit :</p> <blockquote> <p>En fait, la grande majorité des documents supposément XHTML sur internet sont servis en tant que <code>text/html</code>. Ce qui signifie qu'ils ne sont pas du tout XHTML, mais en réalité du HTML invalide qui passe grâce à la gestion des erreurs des parseurs HTML. Tous ces liens "XHTML 1.0 valide !" sur le web disent en réalité "HTML 4.01 invalide !".</p> </blockquote> <hr /> <p>Pour tester si vous avez du vrai XHTML ou du HTML invalide avec la DOCTYPE de XHTML, mettez ceci dans votre document :</p> <pre><code><span style="color:green"><span style="color:red"/> Si c'est en rouge, c'est du HTML. En vert, c'est du XHTML. </span> </code></pre> <p>Cela est valide, et en vrai XHTML cela fonctionne parfaitement (voir : <a href="https://kornel.ski/1" rel="noreferrer">1</a> vs <a href="https://kornel.ski/2" rel="noreferrer">2</a>). Si vous ne pouvez pas croire vos yeux (ou ne savez pas comment définir les types MIME), ouvrez votre page via un <a href="https://schneegans.de/xp/" rel="noreferrer">proxy XHTML</a>.</p> <p>Une autre façon de vérifier est de voir le code source dans Firefox. Il affichera les barres obliques en rouge lorsqu'elles sont invalides.</p> <p>En HTML5/XHTML5, cela n'a pas changé, et la distinction est encore plus claire, car vous n'avez même pas de <code>DOCTYPE</code> supplémentaire. <code>Content-Type</code> est roi.</p> <hr /> <p>Pour information, la spécification XHTML permet à n'importe quel élément d'être auto-fermant en faisant de XHTML une <a href="https://www.w3.org/TR/REC-xml/#sec-starttags" rel="noreferrer">application XML</a> : [soulignement de ma part]</p> <blockquote> <p>Les balises d'élément vide peuvent être utilisées pour <strong>n'importe quel élément qui n'a pas de contenu</strong>, qu'il soit ou non déclaré en utilisant le mot-clé EMPTY.</p> </blockquote> <p>C'est également explicitement indiqué dans la <a href="https://www.w3.org/TR/xhtml1/#h-4.6" rel="noreferrer">spécification XHTML</a>:</p> <blockquote> <p>Les éléments vides doivent <strong>soit</strong> avoir une balise de fin, soit la balise de début doit se terminer par <code>/></code>. Par exemple, <code><br/></code> ou <code><hr></hr></code></p> </blockquote></x-turndown>

7 votes

Pas correct à ma connaissance, car l'utilisation des versions auto-fermantes de </code> ou <code><div></code> entraîne un rendu/interprétation différent.</x-turndown>

14 votes

@ZeissS seulement en text/html. En XHTML réel, envoyé en tant que application/xhtml+xml, cela fonctionne parfaitement. Veuillez lire l'article que j'ai lié (ou l'annexe C de la spécification XHTML) avant de voter négativement.

0 votes

@porneL pouvez-vous élaborer en termes de (X)HTML5? Quelles différences devrions-nous prendre en compte avec les navigateurs modernes qui prennent en charge ces balises ?

41voto

Erik van Brakel Points 7589

Un élément auquel il faut faire très attention sur ce sujet est l'élément >. Si vous avez un fichier source externe, cela CAUSERA des problèmes lorsque vous le fermez vous-même. Essayez :

`</code></pre>

<p>Cela fonctionnera dans Firefox, mais se cassera dans IE6 au moins. Je sais, car j'ai rencontré ce problème en fermant de manière excessive tous les éléments que je voyais ;-)</p></x-turndown>`

0 votes

Affecte toutes les versions de MSIE: webbugtrack.blogspot.com/2007/08/…

4 votes

Ne se ferme pas automatiquement dans Firefox 3.</x-turndown>

0 votes

Eh bien, cela fonctionnait dans Firefox quand je l'ai rencontré. Semble que cela ne fonctionne dans aucun navigateur maintenant. Cela pourrait aussi ne fonctionner que en mode de compatibilité peut-être?

36voto

hsivonen Points 5133

La syntaxe auto-fermante fonctionne sur tous les éléments en application/xhtml+xml. Elle n'est pas prise en charge sur aucun élément en text/html, mais les éléments qui sont "vides" en HTML4 ou "vid" en HTML5 n'ont de toute façon pas de balise de fin, donc si vous mettez une barre oblique sur ceux-ci, il semble que la syntaxe auto-fermante soit prise en charge.

34voto

ConroyP Points 24021

7 votes

w3schools.com/tags/default.asp Je vois 12 balises se terminant par /> : "area", "base", "basefont", "br", "col", "frame", "hr", "img", "input", "link", "meta", "param"

96 votes

Veuillez noter que W3schools n'est pas affilié à W3C, et ne répond même pas aux corrections envoyées par les membres du W3C.

2 votes

Comme si souvent, w3schools a presque raison. Une façon précise de trouver les éléments vides est d'exécuter grep EMPTY xhtml1-strict.dtd | sort ou grep EMPTY xhtml1-transitional.dtd | sort

32voto

Dmitry Osinovskiy Points 5420

Une meilleure question serait : quelles balises peuvent être auto-fermantes même en mode HTML sans affecter le code ? Réponse : seulement celles qui ont un contenu vide (sont void). Selon les spécifications HTML, les éléments suivants sont void :

area, base, br, col, embed, hr, img, input, keygen, link, menuitem, meta, param, source, track, wbr

Une ancienne version de la spécification listait également command. De plus, selon diverses sources, les balises obsolètes ou non standard suivantes sont void :

basefont, bgsound, frame, isindex

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X