Was findest du daran so schrecklich?
Es ist der totale Overkill. Es zwingt einen dazu, inkonsistenten, unverständlichen und widersprüchlichen Code zu schreiben. Es ist überhaupt nicht bedacht, welche Konsequenzen das hat. Beispielsweise gehen weder document.getElementsByTagName('section') noch document.getElementsByTagNameNS('http://www.w3.org/1999/xhtml', 'section') beim Parsen als Tag-Soup oder als HTML5. Man müsste document.getElementsByTagName('html5:section') schreiben, genau wie im CSS. Das ist völlig kontraintuitiv. Will man diesen Hack wirklich breit verwenden, würde er einen riesigen Rattenschwanz an Folge-Hacks nach sich ziehen.
Das Markup ist als XHTML5 ja völlig OK.
Nein. Man sendet XHTML5 als Tag-Soup an HTML-4-Browser. Dabei kommt natürlich Quatsch heraus, der Browser denkt, er würde Elemente mit dem localName »html5:section« parsen. HTML-4-Browser können damit tun, was sie wollen. Gut, man könnte argumentieren, das ist genauso Quatsch wie reguläre HTML5-Elemente ohne doppelte Namensraumangaben. Es ist aber schlimmer, weil es nicht aufwärtskompatibel ist. Es widerspricht HTML5. <irgendeinpräfix:section> ist kein HTML5-Element. Dieser Code ergibt nur im XHTML5-Kontext Sinn, wo der XML-Parser es mit korrektem localName, prefix und namespaceURI verarbeitet. Aber niemand wird diesen Code mit application/xhtml+xml ausliefern - das würde nur noch mehr Probleme verursachen. Hatten wir diese Diskussion nicht schon bei XHTML 1.0 und 1.1 vor zehn Jahren?
Man könnte vielleicht einen kürzeren Präfix als 'html5' verwenden, bspw. 'x':
Das wäre ja noch unverständlicher. Aber immerhin würde es zeigen, dass diese Namensraumangabe keine wirkliche Bedeutung hat.
Unschön ist natürlich, dass die Selektion für IE im Stylesheet nicht XML-gerecht erfolgt und man im Selektor dasselbe Präfix notieren muss wie im Markup, was bedeutet, dass man in allen XHTML5-Dokumenten dasselbe Präfix für dieses Gebastel verwenden müsste.
Es ist ein schlimmer Hack, der an sich keinen Sinn ergibt, aber durch die XML-Anleihen den Anschein erweckt - das ist das perfide. Es ist kein korrektes XHTML5 (mangels XML-Parsing und -Unterstützung) und kein korrektes HTML5 (html5:section ist kein HTML5-Element).
Der Erfinder schlägt vor, den HTML5-Validator, der diesen Unfug selbstverständlich nicht mag, ruhigzustellen, indem man ihm mittels MIME-Typ XHTML5 vorgaukelt. Das ist es in den Browsern faktisch nicht (XHTML5 definiert sich erst dadurch, dass es als XML verarbeitet wird), sonst könnte man das CSS und JavaScript/DOM einfach standardkonform umsetzen.
Mathias