title: How does AngularJS get away with using custom HTML5 element tags and attributes?
body: <p>Most browsers seem to allow you to create any element tag you like, and add any attribute name you like  to elements. For example:</p>
  
  <pre><code>&lt;!DOCTYPE html&gt;
  &lt;html&gt;
  &lt;body&gt;
  &lt;div my-attribute="has no data- prefix, but seems to behave like an attribute should"&gt;
      &lt;br/&gt;
      &lt;hello-world style="display:block;background:#eee"&gt;Hello Everybody&lt;/hello-world&gt;
      &lt;goodby-world style="background:#faa"&gt;Default display is inline&lt;/goodbye-world&gt;
  &lt;/div&gt;
  &lt;/body&gt;
  &lt;/html&gt;
  </code></pre>
  
  <p>The above displays fine. It looks like undefined elements behave pretty much like spans.
  It also looks like AngularJS takes advantage of custom tags &amp; attributes quite a lot - it pretty much depends on it.</p>
  
  <p>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.</p>
  
  <p>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?</p>