Most browsers seem to allow you to create any element tag you like, and add any attribute name you like to elements. For example:
<!DOCTYPE html> <html> <body> <div my-attribute="has no data- prefix, but seems to behave like an attribute should"> <br/> <hello-world style="display:block;background:#eee">Hello Everybody</hello-world> <goodby-world style="background:#faa">Default display is inline</goodbye-world> </div> </body> </html>
The above displays fine. It looks like undefined elements behave pretty much like spans. It also looks like AngularJS takes advantage of custom tags & attributes quite a lot - it pretty much depends on it.
But, as far as I understood, doing that sort of thing was a no-no, except in the case of custom html5 attributes with the "data-" prefix.
So, my question is: Is it no longer taboo to make up your own custom element tags and/or attribute names? Or put another way, does AngularJS rely on non-standard quirks that are not really part of the HTML5 spec, but just happen to work anyway? Did somebody at google discover a long-lost secret chapter of the html5 spec? Or am I totally misunderstanding something?
It won't validate but it will render.
HTML5 is designed to be very forgiving (contrary to XHTML). This is in part so that "older" HTML5 browsers can allow new elements (as well as badly formatted HTML) which that version doesn't support yet without breaking the page.
This can of course be "exploited" to introduce custom tags.
That being said - you can also do this with HTML4.
As mentioned in comments: you also have the ability to prefix any attributes in an ordinary tag with
data- and it will validate.
This recipe can be found in it's original form on Stack Over Flow.