HTML5 autorise-t-il les balises à fermeture automatique non vides ?
P粉680487967
2023-08-21 18:20:11
<p>Le validateur W3C (Wikipedia) n'aime pas l'utilisation de balises à fermeture automatique (balises se terminant par "<code>/></code>") sur des éléments non vides. (Les éléments vides sont ceux qui ne contiennent jamais de contenu.) Sont-ils toujours valables en HTML5 ? </p>
<p>Quelques exemples d'éléments vides acceptés : </p>
<pre class="brush:html;toolbar:false;"><br />
<img src="" />
<input type="text" name="nom d'utilisateur" />
≪/pré>
<p>Quelques exemples d'éléments non vides rejetés : </p>
<pre class="brush:html;toolbar:false;"><div id="myDiv" />
<span id="mySpan" />
<textarea id="someTextMessage" />
≪/pré>
<sub> <b>Remarque : </b>
Le validateur du W3C accepte en fait les balises vides à fermeture automatique : l'auteur a initialement rencontré le problème à cause d'une simple faute de frappe (en utilisant <code>></code> au lieu de <code>/></code> ;) Cependant, les balises à fermeture automatique ne sont pas entièrement valides en HTML5, et la réponse développe le problème des balises à fermeture automatique dans différentes versions HTML. </p></sub>
Les divs à fermeture automatique ne seront pas validés. C'est parce que div est un élément normal, pas un élément vide.
Selon la spécification HTML5, les balises qui ne peuvent contenir aucun contenu (appelées éléments vides) peuvent se fermer automatiquement*. Cela inclut les balises suivantes :
Le "/" sur la balise ci-dessus est complètement facultatif, donc
<img/>
与<img>
没有区别,但<img></img>
n'est pas valide.*Remarque : les éléments externes peuvent également se fermer automatiquement, mais je pense que cela sort du cadre de cette réponse.
En théorie, HTML 4,
<foo /
(是的,没有任何>
)的意思是<foo>
(这导致<br />
的意思是<br>>
(即<br>>
)和<title/hello/
的意思是<title>hello</title>
). J'utilise le terme « théoriquement » car il s'agit d'une règle SGML que les navigateurs supportent très mal. Le support est si rare (je ne l'ai vu fonctionner que dans emacs-w3m) que la spec recommande aux auteurs d'éviter d'utiliser cette syntaxe .En XHTML,
qui s'applique à tous les documents XML. Autrement dit, XHTML est généralement servi en tant que<foo />
的意思是<foo></foo>
。这是适用于所有XML文档的XML规则。也就是说,XHTML通常以text/html
的形式提供,这(至少在历史上)由浏览器使用与以application/xhtml+xml
提供的文档不同的解析器处理。W3C提供了关于XHTML作为text/html
signifie<foo></foo>
. Il s'agit d'une règle XMLtext/html
, qui est (au moins historiquement) utilisé par les navigateurs différemment des documents servis en tant que traitement par l'analyseurapplication/xhtml+xml
. Le W3C fournit destext/html
. (Fondamentalement : utilisez la syntaxe des balises à fermeture automatique uniquement si l'élément est défini comme VIDE (et les balises de fermeture sont interdites dans la spécification HTML)).<foo />
En HTML5, la significationdépend du type d'élément- :
Pour les éléments désignés comme - vides (essentiellement « les éléments qui existaient avant HTML5 et dont il était interdit de contenir du contenu »), les balises de fermeture sont interdites. Une barre oblique à la fin de la balise d'ouverture est autorisée, mais n'a aucune signification. Ce n'est qu'un sucre syntaxique pour les personnes habituées au XML (et aux surligneurs de syntaxe).
Comme pour les autres éléments HTML, la barre oblique est - une erreur
, mais la récupération d'erreur amènera le navigateur à l'ignorer et à traiter la balise comme une balise d'ouverture normale. Cela entraîne souvent des balises de fermeture manquantes, faisant des éléments suivants des éléments enfants plutôt que des frères et sœurs.