Ci sono alcune cose sulle altre risposte che sono solo mal espresse o forse un po 'errate.
FALSO (ish): gli elementi HTML non standard sono "non consentiti", "illegali" o "non validi".
Non necessariamente. Sono "non conformi" . Qual è la differenza? Qualcosa può "non conformarsi" ed essere ancora "permesso". Il W3C non invierà la polizia HTML a casa tua e ti trascinerà via.
Il W3C ha lasciato le cose in questo modo per un motivo. Conformità e specifiche sono definite da una comunità. Se ti capita di avere una comunità più piccola che consuma HTML per scopi più specifici e tutti concordano su alcuni nuovi elementi di cui hanno bisogno per rendere le cose più facili, possono avere quelle che il W3C definisce "altre specifiche applicabili" . (questa è una semplificazione eccessiva, ovviamente, ma hai l'idea)
Detto questo, i validatori rigorosi dichiareranno i tuoi elementi non standard come "non validi". ma questo perché il compito del validatore è garantire la conformità a qualunque specifica per la quale sta convalidando, non garantire la "legalità" per il browser o per l' uso .
FALSE (ish): elementi HTML non standard si tradurrà in problemi di rendering
Forse, ma improbabile. (sostituisci "will" con "might") L'unico modo in cui ciò dovrebbe comportare un problema di rendering è se il tuo elemento personalizzato è in conflitto con un'altra specifica, come una modifica alla specifica HTML o un'altra specifica onorata all'interno dello stesso sistema (come SVG, Math o qualcosa di personalizzato).
In effetti, il motivo per cui i CSS possono modellare tag non standard è perché la specifica HTML afferma chiaramente che:
Gli interpreti devono trattare elementi e attributi che non comprendono come semanticamente neutri; lasciandoli nel DOM (per i processori DOM) e disegnandoli secondo i CSS (per i processori CSS), ma non inferendo alcun significato da essi
Nota: se vuoi usare un tag personalizzato, ricorda che una modifica alle specifiche HTML in un secondo momento potrebbe far esplodere il tuo stile, quindi preparati. È davvero improbabile che il W3C implementerà il <imsocool>
tag, tuttavia.
Tag e JavaScript non standard (tramite DOM)
Il motivo per cui puoi accedere e modificare elementi personalizzati usando JavaScript è perché la specifica parla anche di come dovrebbero essere gestiti nel DOM , che è l'API (davvero orribile) che ti consente di manipolare gli elementi sulla tua pagina.
L'interfaccia HTMLUnknownElement deve essere utilizzata per elementi HTML che non sono definiti da questa specifica (o altre specifiche applicabili).
TL; DR: la conformità alle specifiche viene effettuata ai fini della comunicazione e della sicurezza. La non conformità è ancora consentita da tutto tranne che da un validatore , il cui unico scopo è far rispettare la conformità, ma il cui uso è facoltativo.
Per esempio:
var wee = document.createElement('wee');
console.log(wee.toString()); //[object HTMLUnknownElement]
(Sono sicuro che questo attirerà fiamme, ma ci sono i miei 2 centesimi)