Das ist verkehrt.
HTML5 sagt nicht, dass man beliebige Elemente definieren kann. Es sagt nur, wie sich Browser verhalten sollen, wenn sie auf unbekannte Elemente treffen. Grundsätzlich werden diese wohl ignoriert (habe ich jetzt nicht noch mal nachgesehen).
Um ein Beispiel aus der Vergangenheit zu bringen *mit Gehstock fuchtel*:
Als LiveScript erfunden wurde und dann später zu JavaScript umbenannt wurde (was für eine dämliche Idee!), kannten einige Browser <script> nicht und zeigten den JavaScript-Code wie Text an. Das ist der Grund, warum es heute noch üblich ist, folgendes zu schreiben:
Code:
<script type="text/javascript">
<!--
alert("ätsch");
// -->
</script>
Und dazu hört man Sätze wie "Um das JavaScript vor alten Browsern zu verstecken". Die müssen Mosaic oder den Internet Explorer 1.0 meinen. Das geht sogar so weit, dass es viele "Programme" gibt, die es automatisch machen (Zend/View/Helper/HeadScript.php hardcoded das sogar! ARGH).
HTML5 sagt jetzt der Inhalt von <script> ist CDATA (also man muss & und < gar nicht escapen) und nicht gerendert werden darf. Wenn ein Browser dagegen verstößt, ist er kein HTML5-kompatibler Browser
und somit eigentlich kein HTML-kompatibler Browser, da HTML5 sozusagen das Verhalten von Browsern generell für HTML-Dokumente (also auch 3.0 und 4.0 etc) festlegt.
Das wurde nötig, weil die Browser sich eben unterschieden, HTML sich zu einer eigenen Sprache entwickelte (mit SGML nicht mehr viel gemein) und XML einfach im Web total erfolglos ist (wirklich!).
HTML5 ist also viel mehr als eine neuer HTML-Standard mit neuen Elementen, sondern ist an sich das HTML welches alle vorherigen Versionen ablöst und HTML (hoffentlich) endgültig definiert. Das ist auch der Grund, warum es keinen richtigen Doctype oder eine DTD gibt, sondern einfach folgendes geschrieben wird:
Die waren sowieso schon immer zwecklos. Allein text/html zählt. (Nun ist HTML5 nicht perfekt und einiges ist sehr zweifelhaft. Aber selbst so Dinge wie <video> sind echt toll!)
Wer jetzt also denkt er schreibt einfach <cplusplus>int main() { }</cplusplus> und versteckt dieses per CSS, hat nichts gekonnt, denn Textbrowser und/oder Suchmaschinen wissen damit nichts anzufangen.