Est écrit à fermeture automatique des balises pour les éléments qui ne sont pas traditionnellement vide mauvaise pratique?
J'ai remarqué jQuery (ou Firefox) va transformer certains de mes <span class="presentational"></span> into <span class="presentational" />
Maintenant, ma question est, est-ce correct d'écrire mon texte comme cela? Tout les navigateurs s'étouffe?
Personnellement, je pense qu'il est propre à faire <span class="presentational" />
si ça va être vide.
- Autant que je sache, que l'espace bf la barre oblique est solution de contournement pour un bug dans IE5, ce qui devrait faire partie du passé maintenant.—je suis heureux que je suis le seul à écrire HTML5 ces jours, et je n'ai aucun scrupule à l'aide de
<x></x>
même lorsque cette balise est sans contenu. je pense que tout le monde a parfaitement le droit de heureux pour tous les ennuyeux / confus grammaire 'fonctionnalité' de/(SG|XH|HT|X)ML/
ils peuvent laisser derrière eux pour de bon; fermeture automatique des balises sont ce qu'ils sont. je pense que<span class="presentational"></span>
ne communiquer proprement que c'est une balise sans contenu, et est universellement et sans équivoque compris comme tel.
Vous devez vous connecter pour publier un commentaire.
Je suppose que votre question a à voir avec le rouge slash sur l'auto-éléments de fermeture lorsque vous afficher la source dans Firefox. Si oui, vous avez trébuché dans l'un des plus véhéments, mais en même temps le comportement passif-agressif débats dans le navigateur maker vs développeur web guerres. XHTML n'est PAS seulement un document de balisage. C'est aussi sur la façon dont les documents sont destinés à être diffusé sur le web.
Avant que je commence, je m'efforce de ne pas prendre parti ici.
Le XHTML 1.1 spécification dit qu'un serveur web devrait servir XHTML avec un Type de Contenu application/xhtml+xml. Firefox est de distinguer ces barres obliques comme invalide parce que votre document est en train d'être servi en tant que texte/html plutôt que application/xhtml+xml. Prendre que ces deux exemples; identique de balisage, on a servi en tant que application/xhtml+xml, l'autre en tant que text/html.
http://alanstorm.com/testbed/xhtml-as-html.php
http://alanstorm.com/testbed/xhtml-as-xhtml.php
Firefox drapeaux le slash dans la balise meta comme non valide pour le document a servi avec le texte/html, et est valable pour le document a servi avec l'application/xhtml+xml.
Pourquoi cela est Controversé
À un navigateur développeur, le point de XHTML est que vous pouvez traiter votre document au format XML, ce qui signifie que si quelqu'un vous envoie quelque chose qui n'est pas valide, la spec dit que vous n'avez pas à l'analyser. Donc, si un document est signifié en application/xhtml+xml et non un contenu bien formé, le développeur a le droit de le dire "n'est pas mon problème". Vous pouvez voir en action ici
http://alanstorm.com/testbed/xhtml-not-valid.php
Lorsqu'un document est signifié en tant que text/html, Firefox traite comme un simple vieux document HTML et utilise le pardonneur, le corriger pour vous, des routines d'analyse
http://alanstorm.com/testbed/xhtml-not-valid-as-html.php
Donc, à un navigateur maker, XHTML servi en tant que text/html est ridicule, car il n'est jamais traitée comme XML par le navigateur du moteur de rendu.
Un tas d'années, les développeurs web à la recherche de plus de balise singes (Disclaimer: je le fais moi-même en tant que l'un d'entre eux) ont commencé à chercher des moyens de développer les meilleures pratiques qui n'ont pas participé trois fois tables imbriquées, mais encore permis à un design convaincant de l'expérience. Ils/Nous verrouillé sur le XHTML/CSS, parce que le W3C a dit que c'était l'avenir, et le seul autre choix est un monde où un seul vendeur (Microsoft) contrôlés defacto balisage spec. Le mal réel qu'il y ait la seul fournisseur, et pas tellement de Microsoft. Je le jure.
Alors où est la polémique? Il y a deux problèmes avec l'application/xhtml+xml. La première est Internet Explorer. Il y a un héritage bug/feature dans IE où le contenu a servi en tant que application/xhtml+xml invite l'utilisateur à télécharger le document. Si vous avez essayé de visiter le xhtml-as-xhtml.php ci-dessus avec IE c'est probablement ce qui s'est passé. Cela signifie que si vous voulez utiliser l'application/xhtml+xml, vous devez vous
navigateur sniff pour IE, vérifiez les Accepte d'en-tête et qui ne servent application/xhtml+xml pour les navigateurs qui l'acceptent. C'est pas aussi trivial comme il sonne pour obtenir le droit, et s'est également rendue à l'encontre de la "écrire une fois" principe que les développeurs web sont battus pour.Le deuxième problème est la dureté de XML. C'est, encore une fois, l'un de ceux de la flamme sujettes à des problèmes, mais il y a certaines personnes qui pensent qu'un simple mauvais tag, ou à caractère unique mal codés ne devrait pas permettre à un utilisateur de ne pas voir le document qu'ils veulent. En d'autres termes, oui, la spec dit que vous devriez arrêter de traitement XML si ce n'est pas bien formé, mais l'utilisateur ne se soucie pas de la spec, ils se soucient que de leur chat site est cassé.
Ajoutant encore plus de l'essence de la question est le XHTML 1.0 (1.1) spécification dit que les documents XHTML peut être servi en tant que text/html, en supposant que certaines la compatibilité des lignes directrices sont suivies. Des choses comme la balise img être à fermeture automatique et la comme. Le mot clé ici est peut. Dans RFC parler, peut signifie en option. Firefox a choisi de ne PAS traiter les documents servi avec un doctype XHTML, mais un type de contenu text/html au XHTML. Cependant, le validateur du W3C sera heureux de signaler ces documents comme valide.
Je vais laisser le lecteur à réfléchir à la simultanée merveille/horreur d'une culture qui écrit un document de définir ce qu'ils entendent par le mot peut.
Aller De L'Avant
Enfin, c'est ce que tout le HTML 5 chose est sur. XHTML est devenue une telle politique de la patate chaude qu'un tas de gens qui voulaient aller de la langue vers l'avant a décidé d'aller dans une autre direction. Ils ont produit une spécification HTML 5. C'est actuellement haché dans le W3C, et devraient se terminer dans le courant de la prochaine décennie. Dans l'intervalle, les vendeurs de navigateur sont la cueillette et le choix des caractéristiques de l'en-cours spec et leur mise en œuvre.
Mises à jour à partir des Commentaires
Dans les commentaires, Alex points que si vous allez à renifler pour quelque chose, vous devez vérifier l'en-tête Accept pour voir si l'application/xhtml+xml est accepté par l'agent utilisateur.
Ce qui est absolument correcte. En général, si vous allez sniff, sniff pour la fonction, pas pour le navigateur.
Un plus pour l'autre répond: en exemple, avoir des éléments tels que
<span />
dans votre marque-place va causer toutes sortes de problèmes avec le DOM de la traversée des méthodes en JavaScript. Jetez un oeil à la suite de document XHTML:L'idée est que lorsque la page se charge, le JavaScript obtenir une référence à vide durée et afficher son contenu HTML. Qui sera une chaîne vide, non? Pas sous IE ça ne marche pas. Dans IE, vous obtenez tout le contenu après la durée de l'ensemble du document:
Aussi, la deuxième
<p>
affiche dans la durée de lachildNodes
collection. Même<p>
est aussi dans le corps duchildNodes
collection, sens un nœud peut effectivement avoir plusieurs parents. Ce n'est pas très bonne nouvelle pour les scripts qui s'appuient sur les traversant le DOM.J'ai aussi blogué sur ce.
Oui. Il est. Ça va causer des problèmes dans certains cas pour les vieux navigateurs.
Dans ce cas, l'ancien navigateur pourrait ne pas comprendre que
<script>
tag est terminé.<script src="/scripts/jquery.js" /><script>/* In Firefox (tested in 3.5 and 3.6), this script does not run, and is not parsed as part of the DOM; the earlier script tag's self-closing slash is marked as red in "view source", and this script's opening tag is displayed as text content of the earlier script, ignored by the parser. */ alert('test 1');</script><script>/* In firefox, this script does run, and is parsed as part of the DOM */ alert('test 2');</script>
Il est intéressant de noter, WebKit utilisé pour se comporter tout à fait de même, mais semble pardonner à soi-fermé<script>
s maintenant.Servi en tant que application/xhtml+xml, < /span> moyens de créer un élément span aucun contenu.
Servi en tant que text/html;, < /span> moyens de créer un élément span où le contenu de l'élément suivre cette balise jusqu'à ce que le </span> tag est rencontré, ou une autre balise (ou EOF) qui, implicitement, ferme l'élément est rencontré. c'est à dire dans ce cas < /span> signifie la même chose que <span>.
De côté: HTML 5 définit à la fois et le HTML et le XHTML serializations, de sorte qu'il n'affecte pas ce problème d'une façon ou d'une autre. Il nécessite, comme XHTML 1.1, que XHTML être servi en tant que application/xhtml+xml, contrairement XHTML 1.0. En effet, si, cela ne change rien que tous les navigateurs traiter n'importe quelle version de XHTML servi en tant que text/html comme la soupe de tags.
Également intéressant de noter, c'est qu'une
<?xml ...?>
déclaration avant le doctype lance IE en mode quirks.Voir la note sur le sujet forme le XHTML groupe de travail: http://www.w3.org/TR/xhtml-media-types/
En bref — c'est très bien si votre XHTML va être traités comme XHTML. Si vous allez faire semblant c'est du HTML (que vous devez faire si vous voulez être chargé par Internet Explorer (y compris la version 8, au plus tard au moment de l'écriture), alors vous devez sauter à travers des cerceaux).
Les cerceaux sont suffisamment ennuyeux que je recommanderais la plupart des personnes s'en HTML 4.01.
Généralement il n'est pas un problème pour utiliser un raccourci pour les éléments vides, mais il existe quelques exceptions où il peut causer des problèmes.
<script>
est une question importante qui doit être fermé avec</script>
pour éviter les problèmes.Un autre est
<meta>
qui fonctionne beaucoup mieux avec les araignées écrit comme<meta></meta>
au lieu de<meta />
Pas exactement à la question, mais liés, en termes de mise en forme, les versions d'IE ont des problèmes avec seulement les éléments vides comme
<div></div>
ou<div />
. Dans ce cas,<div> </div>
est nécessaire pour maintenir la mise en forme.<meta></meta>
est valide XHTML 1.0 Strict.Il doit être explicitement dit qu'il n'y a pas d'auto-fermé les balises en HTML, de sorte que chaque fois qu'un navigateur décide de traiter votre XHTML HTML, il ne reconnaîtra pas que la balise est fermée. Pas un problème pour les balises qui n'ont pas à être fermé en HTML, comme
<img>
, mais de toute évidence mal avec les balises comme<span>
.