Quels sont tous les éléments valides à fermeture automatique (par exemple <br/>) en XHTML (tels qu'implémentés 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 à fermeture automatique tels que <div />.
html
xhtml
browser
cross-browser
les kamens
la source
la source
Réponses:
Chaque navigateur prenant en charge XHTML (Firefox, Opera, Safari, IE9 ) prend en charge la syntaxe de fermeture automatique sur chaque élément .
<div/>
,<script/>
,<br></br>
Tout devrait fonctionner très bien. Si ce n'est pas le cas, vous avez du HTML avec du DOCTYPE XHTML ajouté de manière inappropriée.DOCTYPE ne change pas la façon dont le document est interprété. Seul le type MIME le fait .
Décision du W3C d'ignorer DOCTYPE :
C'est un piège très courant, car W3C Validator ignore largement cette règle, mais les navigateurs la suivent religieusement. Lisez Comprendre HTML, XML et XHTML sur le blog WebKit:
Pour tester si vous avez du vrai XHTML ou du HTML invalide avec le DOCTYPE de XHTML, mettez ceci dans votre document:
Il valide, et en vrai XHTML cela fonctionne parfaitement (voir: 1 vs 2 ). Si vous n'en croyez pas vos yeux (ou ne savez pas comment définir les types MIME), ouvrez votre page via le proxy XHTML .
Une autre façon de vérifier est de voir la source dans Firefox. Il mettra en évidence les barres obliques en rouge lorsqu'elles sont invalides.
En HTML5 / XHTML5, cela n'a pas changé et la distinction est encore plus claire, car vous n'en avez même pas d'autres
DOCTYPE
.Content-Type
est le roi.Pour mémoire, la spécification XHTML permet à tout élément de se fermer automatiquement en faisant de XHTML une application XML : [c'est moi qui souligne]
Il est également explicitement indiqué dans la spécification XHTML :
la source
<script>
ou<div>
entraîne un rendu / interprétation différent.text/html
. En vrai XHTML, envoyé carapplication/xhtml+xml
il fonctionne très bien. Veuillez lire l'article auquel j'ai lié (ou l'annexe C des spécifications XHTML) avant de voter.application/xhtml+xml
type MIME, je peux garantir que<script/>
cela fonctionnera. Avec le type MIME. Seulement.Un élément avec lequel il faut être très prudent sur ce sujet est l'
<script
élément>. Si vous avez un fichier source externe, cela causera des problèmes lorsque vous le fermerez vous-même. Essayez-le:Cela fonctionnera dans Firefox, mais casse au moins dans IE6. Je sais, parce que je suis tombé sur ça quand j'ai fermé avec zèle chaque élément que j'ai vu ;-)
la source
La syntaxe à fermeture automatique fonctionne sur tous les éléments de application / xhtml + xml. Il n'est pris en charge sur aucun élément de texte / html, mais les éléments qui sont «vides» en HTML4 ou «void» en HTML5 ne prennent de toute façon pas de balise de fin, donc si vous mettez une barre oblique sur ceux-ci, il apparaît comme si la syntaxe à fermeture automatique était prise en charge.
la source
Depuis le site de référence des écoles W3 :
la source
/>
:"area", "base", "basefont", "br", "col", "frame", "hr", "img", "input", "link", "meta", "param"
grep EMPTY xhtml1-strict.dtd | sort
ougrep EMPTY xhtml1-transitional.dtd | sort
La meilleure question serait: quelles balises peuvent être auto-fermées même en mode HTML sans affecter le code? Réponse: seuls ceux qui ont un contenu vide (sont nuls). Selon les spécifications HTML, les éléments suivants sont nuls:
area, base, br, col, embed, hr, img, input, keygen, link, menuitem, meta, param, source, track, wbr
Ancienne version de la spécification également répertoriée
command
. En outre, selon diverses sources, les balises obsolètes ou non standard suivantes sont nulles:basefont, bgsound, frame, isindex
la source
J'espère que cela aide quelqu'un:
la source
Et
<meta>
et<link>
? Pourquoi ne figurent-ils pas sur cette liste?En règle générale, ne fermez pas automatiquement les éléments destinés à contenir du contenu, car cela causera certainement des problèmes de navigateur tôt ou tard.
Ceux qui se referment naturellement, comme
<br>
et<img>
, devraient être évidents. Ceux qui ne le sont pas ... ne les fermez pas vous-même!la source
La dernière fois que j'ai vérifié, les éléments suivants étaient les éléments vides / vides répertoriés dans HTML5.
Valable pour les auteurs: area, base, br, col, command, embed, eventsource, hr, img, input, link, meta, param, source
Non valide pour les auteurs: basefont, bgsound, frame, spacer, wbr
Outre les quelques nouveautés en HTML5, cela devrait vous donner une idée de celles qui pourraient être prises en charge lors de la diffusion de XHTML sous forme de texte / html. (Il suffit de les tester en examinant le DOM produit.)
Quant au XHTML servi en tant qu'application / xhtml + xml (ce qui le rend XML), les règles XML s'appliquent et tout élément peut être vide (même si la DTD XHTML ne peut pas l'exprimer).
la source
Vous devriez jeter un œil aux DTD xHTML , ils sont tous répertoriés. Voici un aperçu rapide de tous les principaux:
la source
Ils sont appelés éléments «vides» en HTML 5. Ils sont répertoriés dans la spécification officielle W3 .
Depuis avril 2013, ils sont:
Depuis décembre 2018 (HTML 5.2), ils sont:
la source
Un autre problème de balise à fermeture automatique pour IE est l'élément title. Lorsque IE (juste essayé dans IE7) voit cela, il présente à l'utilisateur une page vierge. Cependant, vous «voyez la source» et tout y est.
J'ai vu cela à l'origine lorsque mon XSLT a généré la balise à fermeture automatique.
la source
<title/>
tags.Je ne vais pas essayer de trop travailler là-dessus, d'autant plus que la majorité des pages que j'écris sont générées ou que la balise a du contenu. Les deux seuls qui m'ont jamais posé des problèmes lors de leur fermeture automatique sont:
<title/>
Pour cela, je me suis simplement contenté de toujours lui donner une balise de fermeture séparée, car une fois qu'il est là-haut,
<head></head>
cela ne rend pas vraiment votre code plus compliqué à utiliser de toute façon.<script/>
C'est le gros problème avec lequel j'ai récemment rencontré des problèmes. Pendant des années, j'avais toujours utilisé des
<script/>
balises à fermeture automatique lorsque le script provenait d'une source externe. Mais j'ai récemment commencé à recevoir des messages d'erreur JavaScript concernant une forme nulle. Après plusieurs jours de recherche, j'ai trouvé que le problème était (supposément) que le navigateur n'obtenait jamais la<form>
balise car il ne réalisait pas que c'était la fin de la<script/>
balise. Donc, quand je l'ai transformé en<script></script>
tags séparés , tout a fonctionné. Pourquoi différentes pages que j'ai faites sur le même navigateur, je ne sais pas, mais ce fut un grand soulagement de trouver la solution!la source
<hr /> est une autre
la source