Il y a quelques choses sur les autres réponses qui sont soit mal formulées, soit peut-être un peu incorrectes.
Faux (ish): les éléments HTML non standard ne sont "pas autorisés", "illégaux" ou "invalides".
Pas nécessairement. Ils sont "non conformes". Quelle est la différence? Quelque chose peut "ne pas se conformer" et toujours "autorisé". Le W3C ne va pas envoyer la police HTML chez vous et vous transporter.
Le W3C a laissé les choses de cette façon pour une raison. La conformité et les spécifications sont définies par une communauté. Si vous avez une communauté plus petite consommant du HTML à des fins plus spécifiques et qu'ils sont tous d'accord sur de nouveaux éléments dont ils ont besoin pour faciliter les choses, ils peuvent avoir ce que le W3C appelle comme "Autres spécifications applicables". (C'est un brut sur la simplification, évidemment, mais vous avez l'idée)
Cela dit, des validateurs stricts déclareront que vos éléments non standard seront "invalides". Mais c'est parce que le travail du validateur consiste à assurer la conformité à toutes les spécifications pour lesquelles elle valide, et non pour assurer la "légalité" navigateur ou pour utilisation.
Faux (ish): éléments HTML non standard sera entraîner des problèmes de rendu
Peut-être, mais peu probable. (remplacer "Will" par "pourrait") La seule façon dont cela devrait entraîner un problème de rendu est que votre élément personnalisé entre en conflit avec une autre spécification, tel qu'une modification de la spécification HTML ou une autre spécification étant honorée dans le même système (comme SVG, mathématiques ou quelque chose de personnalisé).
En réalité, La raison pour laquelle CSS peut styliser des étiquettes non standard est parce que la spécification HTML États clairement ce:
Les agents des utilisateurs doivent traiter les éléments et les attributs qu'ils ne comprennent pas comme sémantiquement neutre; les laisser dans le DOM (pour les processeurs DOM) et les styliser selon CSS (pour les processeurs CSS), mais ne pas déduire de sens d'eux
Noter: Si vous souhaitez utiliser une balise personnalisée, n'oubliez pas qu'un changement dans la spécification HTML à un moment ultérieur pourrait faire exploser votre style, alors soyez préparé. Il est vraiment peu probable que le W3C implémente le <imsocool>
Tag, cependant.
Tags non standard et JavaScript (via le DOM)
La raison pour laquelle vous pouvez accéder et modifier des éléments personnalisés à l'aide de JavaScript est parce que le Les spécifications expliquent même comment elles devraient être gérées dans le DOM, qui est l'API (vraiment horrible) qui vous permet de manipuler les éléments de votre page.
L'interface HTMLUNKNOWNELMENT doit être utilisée pour les éléments HTML qui ne sont pas définis par cette spécification (ou d'autres spécifications applicables).
TL; DR: Conformément aux spécifications est effectuée à des fins de communication et de sécurité. La non-conforme est toujours autorisée par tout sauf un validateur, dont le seul but est d'appliquer la conformité, mais dont l'utilisation est facultative.
Par exemple:
var wee = document.createElement('wee');
console.log(wee.toString()); //[object HTMLUnknownElement]
(Je suis sûr que cela attirera les flammes, mais il y a mes 2 cents)