203 votes

Les éléments personnalisés sont-ils valides en HTML5 ?

Je n'ai pas trouvé de réponse définitive à la question de savoir si les balises personnalisées sont valides en HTML5, comme ceci :

<greeting>Hello!</greeting>

Je n'ai rien trouvé dans les spécifications qui aille dans un sens ou dans l'autre :

http://dev.w3.org/html5/spec/single-page.html

Les balises personnalisées ne semblent pas être validées par le validateur W3C.

2 votes

Vous ne devriez pas accorder trop d'importance à un article sur le HTML5 écrit il y a plus de 4,5 ans.

9 votes

L'article de Crockford est étrange. La phrase importante est la suivante : "Il s'agit ma proposition pour un HTML 5 plus doux". En d'autres termes, il ne s'agit pas du HTML5 que nous connaissons aujourd'hui, mais d'une proposition pour un HTML 5 différent qui succéderait au HTML 4. C'est étrange, car cette proposition est datée de novembre 2007, alors que le W3C travaillait déjà sur le HTML5 depuis près d'un an. L'utilisation qu'il fait du mot "autorisé" est source de confusion. Les balises personnalisées n'ont jamais été "conformes"/"valides", mais les analyseurs syntaxiques des navigateurs continuent de fonctionner en leur présence. Quoi qu'il en soit, la proposition de Crockford n'a pas eu de succès. Pratiquement aucune partie de cette proposition n'a été incorporée dans le HTML5.

3 votes

Les éléments personnalisés sont de plus en plus nombreux maintenant que la norme émergente W3 pour les composants Web Custom Elements commence à apparaître dans Firefox et Chrome : dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/custom/

179voto

jessegavin Points 20854

En Spécification des éléments personnalisés est disponible dans Chrome et Opera, et le sera bientôt dans autres navigateurs . Il permet d'enregistrer des éléments personnalisés de manière formelle.

Les éléments personnalisés sont de nouveaux types d'éléments DOM qui peuvent être définis par auteurs. Contrairement aux décorateurs qui sont apatrides et éphémères, la coutume peuvent encapsuler l'état et fournir des interfaces script.

Les éléments personnalisés font partie d'une spécification W3 plus large appelée Composants Web ainsi que les modèles, les importations HTML et le Shadow DOM.

Les composants Web permettent aux auteurs d'applications Web de définir des widgets à l'aide d'une interface Web. richesse visuelle et une interactivité impossibles avec les CSS seuls, et une et une facilité de composition et de réutilisation que les bibliothèques script ne permettent pas aujourd'hui. aujourd'hui.

Toutefois, à partir de cette excellent article de synthèse sur Google Developers à propos de Custom Elements v1 :

Le nom d'un élément personnalisé doit contenir un tiret ( - ). Ainsi, les <x-tags> , <my-element> et <my-awesome-app> sont tous des noms valides, tandis que <tabs> y <foo_bar> ne le sont pas. Cette exigence permet à l'analyseur HTML de distinguer les éléments personnalisés des éléments normaux. Elle permet également d'assurer la compatibilité lorsque de nouvelles balises sont ajoutées au HTML.

Quelques ressources

3 votes

C'est une bonne réponse (+1) mais la règle est quelque peu circulaire. "Les utilisateurs ne doivent pas faire ce qui n'est pas autorisé..."

10 votes

@Alohci vous auriez dû ajouter les 3 mots suivants à votre citation : "par ce cahier des charges".

1 votes

J'ai également lu cette partie de la spécification, et cela m'a vraiment troublé. Voici pourquoi : 1) les attributs personnalisés sont autorisés en HTML5. Cela confirme l'observation de l'argument circulaire d'Alochi. 2) La spécification ne dit nulle part que les éléments personnalisés ne sont pas autorisés.

24voto

svidgen Points 4012

C'est possible et autorisé :

U comprennent pas comme s'ils étaient sémantiquement neutres ; les laisser dans le DOM (pour les processeurs DOM ) et en les stylisant selon CSS (pour les processeurs CSS), mais sans en déduire de signification.

http://www.w3.org/TR/html5/infrastructure.html#extensibility-0

Mais si vous avez l'intention d'ajouter de l'interactivité, vous devrez rendre votre document invalide (mais toujours pleinement fonctionnel) pour l'adapter aux versions 7 et 8 d'IE.

Voir http://blog.svidgen.com/2012/10/building-custom-xhtml5-tags.html (mon blog)

0 votes

Il semble que vous n'ayez pas lu l'intégralité de cette section. Non seulement il s'agit principalement de attributs Il décourage même fortement la personnalisation dans ce domaine.

1 votes

Pour reprendre mes autres commentaires, oui, je suis désolée de ne pas avoir su indiquer qu'il s'agissait de mon blog. J'ai supposé que c'était évident. L'article est cependant directement pertinent. Et j'ajouterai qu'il n'est pas destiné à servir de référence pour étayer une quelconque "affirmation" que j'ai avancée, mais à montrer un format plus long cómo de le faire pour que cela fonctionne.

2 votes

La question est simplement la suivante : la spécification autorise explicitement ces choses. Et dans la plupart des contextes de décourageant la spécification s'adresse très clairement aux vendeurs d'agents utilisateurs, et non aux auteurs HTML.

15voto

0 votes

Nous pouvons donc supposer que si les éléments personnalisés ne sont pas mentionnés, ils ne sont pas non plus autorisés. Cela semble assez juste.

4 votes

Cette réponse n'est plus valable, la norme émergente W3 Web Components Custom Elements commence à arriver dans les navigateurs : dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/custom/

1 votes

@csuwldcat - En fait, non. La norme HTML5 ou ultérieure devra encore être mise à jour d'une manière ou d'une autre pour permettre à de tels éléments personnalisés de faire partie de son modèle de contenu. C'est une nouvelle intéressante. Sur quels navigateurs puis-je les utiliser ?

5voto

csuwldcat Points 2299

Les éléments HTML personnalisés sont une norme W3 émergente à laquelle j'ai contribué et qui vous permet de déclarer et d'enregistrer des éléments personnalisés avec l'analyseur, vous pouvez lire la spécification ici : W3 Web Components Custom Elements spec . En outre, Microsoft soutient une bibliothèque (écrite par d'anciens développeurs de Mozilla), appelée X-Tag - il rend le travail avec les composants Web encore plus facile.

0 votes

Des parties sont en train d'atterrir dans Firefox et Chrome - nous travaillons en étroite collaboration et prévoyons des implémentations complètes d'ici la fin de l'année 2013.

1 votes

En 2014, les mises en œuvre complètes ont-elles eu lieu ?

0 votes

Mais attendez, pourquoi voudrais-je les déclarer ? Ne puis-je pas simplement les taper et les définir à la volée ?

3voto

James Holderness Points 15849

Citation de l'article Section sur l'extensibilité de la spécification HTML5 :

Pour les fonctions de balisage qui peuvent être limitées à la sérialisation XML et ne doivent pas être prises en charge dans la sérialisation HTML, les vendeurs doivent utiliser le mécanisme d'espace de noms pour définir des espaces de noms personnalisés dans lesquels les éléments et attributs non standard sont pris en charge.

Ainsi, si vous utilisez la sérialisation XML de HTML5, il est légal pour vous de faire quelque chose comme ceci :

<greeting xmlns="http://example.com/customNamespace">Hello!</greeting>

Cependant, si vous utilisez la syntaxe HTML, vous êtes beaucoup plus limité dans ce que vous pouvez faire.

Pour les caractéristiques de niveau balistique destinées à être utilisées avec la syntaxe HTML, les extensions doivent être limitées à de nouveaux attributs de la forme "x-vendor-feature" [...] De nouveaux noms d'éléments ne doivent pas être créés.

Mais ces instructions s'adressent principalement aux vendeurs de navigateurs, qui sont censés fournir un style visuel et des fonctionnalités pour les éléments personnalisés qu'ils choisissent de créer.

Pour un auteur, cependant, bien qu'il soit légal d'incorporer un élément personnalisé dans la page (au moins dans la sérialisation XML), vous n'obtiendrez rien de plus qu'un nœud dans le DOM. Si vous voulez que votre élément personnalisé fasse quelque chose, ou qu'il soit rendu d'une manière spéciale, vous devriez vous tourner vers la classe Spécification des éléments personnalisés .

Pour une introduction plus douce sur le sujet, lisez le document suivant Introduction aux composants Web qui comprend également des informations sur le Shadow DOM et d'autres spécifications connexes. Ces spécifications sont encore à l'état d'ébauches pour le moment - vous pouvez voir le statut actuel ici - mais ils sont activement développés.

À titre d'exemple, une définition simple d'un greeting pourrait ressembler à ceci :

<element name="greeting">
  <template>
    <style scoped>
      span { color:gray; }
    </style>
    <span>Simon says:</span>
    <q><content/></q>
  </template>
</element>

Cela indique au navigateur de rendre le contenu de l'élément entre guillemets et préfixé par le texte "Simon says :" qui est stylisé avec la couleur grise. En règle générale, une définition d'élément personnalisée comme celle-ci est stockée dans un fichier html distinct que vous importez à l'aide d'un lien.

<link rel="import" href="greeting-definition.html" />

Bien que vous puissiez également l'inclure en ligne si vous le souhaitez.

J'ai créé une démonstration fonctionnelle de la définition ci-dessus en utilisant la bibliothèque Polymer polyfill. ici . Notez que ceci utilise une ancienne version de la bibliothèque Polymer - les versions plus récentes fonctionnent différemment. Cependant, la spécification étant toujours en cours de développement, je ne recommanderais pas d'utiliser cette méthode dans un code de production.

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