HTML 2.0 (RFC 1866) dice, in Gestione degli errori di markup non dichiarati : "Per facilitare la sperimentazione e l'interoperabilità tra le implementazioni di varie versioni di HTML, la base installata di agenti utente HTML supporta un superset del linguaggio HTML 2.0 riducendolo a HTML 2.0: markup sotto forma di tag di inizio o fine -tag, il cui identificatore generico non è dichiarato è mappato su nulla durante la tokenizzazione. - - I fornitori di informazioni sono avvisati che questa convenzione non è vincolante: può verificarsi un comportamento non specificato, in quanto tale markup non è conforme a questa specifica. "
Ciò significa che i tag sconosciuti vengono ignorati. Qualsiasi dato tra di loro viene elaborato normalmente. Cioè, i tag vengono saltati, l'elemento (asserito) non lo è: il suo contenuto viene gestito come se i tag non fossero lì. Quindi, invece di essere trattati come elementi inline, i costrutti sono stati trattati come content .
L'HTML 2.0 è un grande miglioramento rispetto ai suoi successori in termini di chiarezza ed esattezza. Ma ciò che è accaduto in pratica è che i browser iniziarono a riconoscere elementi con tag non definiti, creando nodi di elementi nel DOM e rendendoli disponibili per lo stile e lo scripting lato client. IE è l'ultimo a seguire l'esempio qui (come così spesso), e in Quirks Mode, anche IE 9 ignora i tag sconosciuti (non crea elementi stilizzabili), a meno che non si usi document.createElement()
per "definirli".
In XHTML, le cose sono diverse in linea di principio. Sebbene le specifiche XHTML siano oscure, è apparentemente l'idea che XHTML sia solo XML con tag legati a "namespace HTML". Cioè, puoi usare qualsiasi tag in XHTML e quelli dichiarati nello spazio dei nomi HTML saranno interpretati usando la semantica HTML, altri elementi provengono da altri spazi dei nomi noti all'implementazione (ad esempio, spazio dei nomi MathML o SVG) o senza alcun spazio dei nomi, essendo solo tag XML - che creano ancora nodi (stilizzabili) nel DOM.