Es gibt ein paar Dinge an den anderen Antworten, die entweder nur schlecht formuliert oder vielleicht ein wenig falsch sind.
FALSE (ish): Nicht standardmäßige HTML-Elemente sind "nicht erlaubt", "illegal" oder "ungültig".
Nicht unbedingt. Sie sind "nicht konform" . Was ist der Unterschied? Etwas kann sich "nicht anpassen" und trotzdem "erlaubt" werden. Das W3C wird die HTML-Polizei nicht zu Ihnen nach Hause schicken und Sie wegbringen.
Das W3C hat die Dinge aus einem bestimmten Grund so gelassen. Konformität und Spezifikationen werden von einer Community definiert. Wenn Sie zufällig eine kleinere Community haben, die HTML für spezifischere Zwecke verwendet, und alle sich auf einige neue Elemente einigen, die sie zur Vereinfachung benötigen, können sie das haben, was das W3C als "andere anwendbare Spezifikationen" bezeichnet . (Dies ist natürlich eine grobe Vereinfachung, aber Sie haben die Idee)
Strenge Validatoren erklären Ihre nicht standardmäßigen Elemente jedoch für "ungültig". Dies liegt jedoch daran, dass es die Aufgabe des Validators ist, die Konformität mit den Spezifikationen sicherzustellen, für die er validiert, und nicht die "Legalität" für den Browser oder die Verwendung sicherzustellen .
FALSCH (ish): Nicht-Standard - HTML - Elemente werden in Rendering - Probleme führen
Möglicherweise, aber unwahrscheinlich. (Ersetzen Sie "wird" durch "könnte".) Dies kann nur dann zu einem Rendering-Problem führen, wenn Ihr benutzerdefiniertes Element mit einer anderen Spezifikation in Konflikt steht, z. B. einer Änderung der HTML-Spezifikation oder einer anderen Spezifikation, die innerhalb desselben Systems berücksichtigt wird (z SVG, Mathe oder etwas Benutzerdefiniertes).
Der Grund , warum CSS nicht standardmäßige Tags formatieren kann, liegt darin, dass in der HTML-Spezifikation eindeutig Folgendes angegeben ist :
Benutzeragenten müssen Elemente und Attribute behandeln, die sie nicht als semantisch neutral verstehen. Belassen Sie sie im DOM (für DOM-Prozessoren) und gestalten Sie sie gemäß CSS (für CSS-Prozessoren), ohne daraus eine Bedeutung abzuleiten
Hinweis: Wenn Sie ein benutzerdefiniertes Tag verwenden möchten, denken Sie daran, dass eine spätere Änderung der HTML-Spezifikation Ihr Styling in die Luft jagen könnte. Seien Sie also vorbereitet. Es ist jedoch sehr unwahrscheinlich, dass das W3C das <imsocool>
Tag implementiert .
Nicht standardmäßige Tags und JavaScript (über das DOM)
Der Grund, warum Sie mit JavaScript auf benutzerdefinierte Elemente zugreifen und diese ändern können, liegt darin, dass in der Spezifikation sogar angegeben ist, wie sie im DOM behandelt werden sollen. Dies ist die (wirklich schreckliche) API, mit der Sie die Elemente auf Ihrer Seite bearbeiten können.
Die HTMLUnknownElement-Schnittstelle muss für HTML-Elemente verwendet werden, die nicht durch diese Spezifikation (oder andere anwendbare Spezifikationen) definiert sind.
TL; DR: Die Einhaltung der Spezifikation erfolgt aus Gründen der Kommunikation und Sicherheit. Nichtkonformität ist weiterhin von allen außer einem Validator zulässig , dessen einziger Zweck darin besteht, die Konformität durchzusetzen, dessen Verwendung jedoch optional ist.
Zum Beispiel:
var wee = document.createElement('wee');
console.log(wee.toString()); //[object HTMLUnknownElement]
(Ich bin sicher, das wird Flammen ziehen, aber da sind meine 2 Cent)