136 votes

Existe-t-il un moyen de créer sa propre balise html en HTML5 ?

Je veux créer quelque chose comme

<menu>
    <lunch>
        <dish>aaa</dish>
        <dish>bbb</dish>
    </lunch>
    <dinner>
        <dish>ccc</dish>
    </dinner>
</menu>

Peut-on le faire en HTML5 ? Je sais que je peux le faire avec

<ul id="menu">
    <li>
        <ul id="lunch">
            <li class="dish">aaa</li>
            <li class="dish">bbb</li>
        </ul>
    </li>
    <li>
        <ul id="dinner">
            <li class="dish">ccc</li>
        </ul>
    </li>    
</ul>

mais c'est tellement moins lisible :(

2 votes

Ce que vous essayez de faire ? ce que vous cherchez pourrait probablement être résolu en div s avec des noms de classe

11 votes

Vous pouvez également vous intéresser à XML+XSLT pour voir si cela répond mieux à vos besoins. Cela vous permet de transformer (la partie xslt) un document XML (le vôtre) en un autre (html).

1 votes

Wow, j'ai posté ceci il y a longtemps :) Compte tenu de l'efficacité de la fonction getElementById() par rapport à la saisie par le nom de la balise, et de la façon dont des éléments comme le SVG fournissent un tout nouvel ensemble de fonctionnalités en plus de leur sémantique, je pense que les balises personnalisées ont moins d'utilité que je ne le pensais au départ. Merci à tous pour tous les commentaires et réponses réfléchis !

174voto

Timothy Perez Points 6379

Vous pouvez utiliser des balises personnalisées dans les navigateurs, bien qu'elles ne soient pas HTML5 (voir Les éléments personnalisés sont-ils des éléments HTML5 valides ? y la spécification HTML5 ).

Supposons que vous vouliez utiliser un élément de balise personnalisé appelé <stack> . Voici ce que vous devez faire...

ÉTAPE 1

Normalisation de ses attributs dans votre feuille de style CSS (pensez à css reset). Exemple :

 stack{display:block;margin:0;padding:0;border:0; ... }

ÉTAPE 2

Pour qu'il fonctionne dans les anciennes versions d'Internet Explorer, vous devez ajouter ce script à l'en-tête (Important si vous avez besoin qu'il fonctionne dans les anciennes versions d'IE !)

 <!--[if lt IE 9]> 
 <script> document.createElement("stack"); </script>
 <![endif]-->

Vous pourrez alors utiliser librement votre balise personnalisée.

<stack>Overflow</stack>

N'hésitez pas à définir également des attributs...

<stack id="st2" class="nice"> hello </stack>

25 votes

Tout à fait correct. Ce n'est pas une idée fantastique. Mais tout à fait correcte. Vous pourriez créer toute une armée de vos propres balises sur votre page, et les rendre toutes rétrocompatibles avec IE6, simplement en ajoutant un tableau de tous les noms de balises que vous voulez utiliser, puis en créant chacune d'elles dans une boucle for, dans l'en-tête de votre page, avant de commencer à les utiliser. C'est ainsi que le html5shim fonctionne en premier lieu. Soyez simplement prêt à faire des efforts pour les styliser dans old-IE. De plus, même si je dirais que c'est acceptable pour un usage interne, ce n'est pas vraiment la façon dont je voudrais apprendre aux gens à faire les choses. Du tout.

13 votes

Je suis d'accord, écrire ses propres étiquettes n'est pas pour les âmes sensibles. Assurez-vous de le tester minutieusement. J'aimerais cependant dire une chose... n'écrivez pas de CSS pour IE6. C'est un gaspillage total de ressources et cela permet de continuer à utiliser un produit aussi horrible que celui que Microsoft n'approuve même pas.

0 votes

@TimothyPerez Par curiosité, sur quels navigateurs avez-vous testé cette méthode ?

32voto

mario Points 223

Je ne suis pas sûr de ces réponses. Comme je viens de le lire : "LES BALISES PERSONNALISÉES ONT TOUJOURS ÉTÉ AUTORISÉES EN HTML".

http://www.crockford.com/html/

Le point ici étant que le HTML était basé sur le SGML. Contrairement au XML avec ses doctypes et ses schémas, le HTML ne devient pas invalide si un navigateur ne connaît pas une balise ou deux. Pensez à <marquee>. Cela ne figure pas dans la norme officielle. Ainsi, si son utilisation rendait votre page HTML "officiellement non approuvée", elle ne cassait pas non plus la page.

Ensuite, il y a <keygen>, qui était spécifique à Netscape, oublié dans HTML4 et redécouvert et maintenant spécifié dans HTML5. De plus, nous avons maintenant des attributs de balises personnalisés, comme data-XyZzz="..." autorisés sur toutes les balises HTML5.

Ainsi, même si vous ne devriez pas inventer toute une salade de balises non spécifiées, il n'est pas vraiment interdit d'avoir des balises personnalisées en HTML. Cela dit, à moins que vous ne souhaitiez l'envoyer avec un Content-Type +xml ou intégrer d'autres espaces de noms XML, comme SVG ou MathML. Ceci ne s'applique qu'au HTML limité par le SGML.

3 votes

Également d'intérêt ici : librador.com/2009/10/20/Styling-undefined-tag-names-in-HTML "Vous pouvez utiliser n'importe quel nom de balise en HTML, et il fera partie du DOM et pourra être stylé".

6 votes

"Donc, bien que son utilisation rende votre page html "officielle non approuvée", elle ne casse pas la page non plus." - um, essayez de styliser vos éléments inventés dans Internet Explorer. Ca ne marchera pas. Vous pouvez ne pas considérer que c'est cassé, mais le fait que les balises personnalisées ne sont pas valides et ne fonctionnent pas dans Internet Explorer, je ne vois pas comment vous pouvez soutenir qu'elles sont "autorisées".

1 votes

Ou comment Douglas Crockford le peut aussi. Ouais, Crockford. Je vous appelle. Apportez-le. mon pote.

5voto

LukeN Points 3191

Créer vos propres noms de balises en HTML n'est pas possible / pas valide. C'est à cela que servent XML, SGML et autres langages de balisage généraux.

Ce que vous voulez probablement, c'est

<div id="menu">
    <div id="lunch">
        <span class="dish">aaa</span>
        <span class="dish">bbb</span>
    </div>
    <div id="dinner">
        <span class="dish">ccc</span>
    </div>
</div>

Ou au lieu de <div/> y <span/> quelque chose comme <ul/> y <li/> .

Pour que l'apparence et le fonctionnement soient corrects, il suffit de brancher quelques CSS et Javascript.

6 votes

Non, ça ne l'est pas. SGML a été conçu pour cela bien avant l'apparition de XML.

1 votes

Quelqu'un utilise-t-il le SGML simple aujourd'hui ? Soit les gens utilisent HTML ou XML et beaucoup de ses descendants, mais je n'ai jamais vu SGML dans la nature ! Quoi qu'il en soit, je vais mettre à jour ma réponse.

0 votes

Je parie qu'il y a encore des gens qui utilisent Docbook SGML pour la documentation. Il y en avait certainement beaucoup il y a quelques années.

5voto

Dan Menes Points 2217

Michael l'a suggéré dans les commentaires, ce que vous voulez faire est tout à fait possible, mais votre nomenclature est faux. Vous n'êtes pas "l'ajout de balises HTML 5," vous êtes la création d'un nouveau type de document XML avec vos propres balises.

Je l'ai fait pour certains projets, lors de mon dernier emploi. Quelques conseils pratiques:

  1. Quand vous dites que vous voulez "ajouter à HTML 5," j'assume ce que tu veux vraiment dire, c'est que vous souhaitez que les pages s'affichent correctement dans un navigateur moderne, sans avoir à faire beaucoup de travail sur le côté serveur. Ceci peut être accompli par l'insertion d'une "feuille de style de l'instruction de traitement" en haut du fichier xml <?xml-stylesheet type="text/xsl" href="menu.xsl"?>. Remplacer "dans le menu.xsl" avec le chemin d'accès à la feuille de style XSL que vous créez pour convertir vos balises personnalisées dans HTML.

  2. Mises en garde: Votre fichier doit être un document XML bien formé, complet avec en-tête XML <xml version="1.0">. XML est de plus en plus pointilleuses que le HTML sur des choses comme incompatibles balises. Aussi, à la différence du HTML, les balises sont sensibles à la casse. Vous devez également vous assurer que le serveur web envoie les fichiers avec le type mime "application/xml". Souvent, le serveur web doit être configuré pour le faire automatiquement si l'extension du fichier est ".xml", mais à vérifier.

  3. Gros Bémol: Finalement, en utilisant les navigateurs automatique de transformation XSL, comme je l'ai décrit, est vraiment le meilleur que pour le débogage et pour des applications limitées où vous avez beaucoup de contrôle. Je l'ai utilisé avec succès dans la mise en place d'un intranet simple à mon dernier employeur, qui était accessible que par quelques dizaines de personnes tout au plus. Navigateurs ne supportent pas les XSL, et ceux qui n'en n'ont pas complètement compatible avec les implémentations. Donc, si vos pages sont publiées dans le "sauvage", il est préférable de les transformer tous en HTML sur le côté serveur, ce qui peut être fait avec un outil de ligne de commande, ou avec un bouton dans de nombreux éditeurs XML.

5voto

Chas Points 31

Les balises personnalisées peuvent être utilisées dans Safari, Chrome, Opera et Firefox, du moins en ce qui concerne leur utilisation à la place de "class=...".

vert {color : green} en css fonctionne pour

<green>This is some text.</green>

0 votes

Vous avez raison @chas mais cette méthode n'est pas recommandée, et elle entrera dans la catégorie des "Hacks et astuces"...

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