I believe it is all due to how the evolution of HTML, XHTML and CSS occurred.
CSS can customize any type of element that is valid within HTML and even some XML elements. Note that in the remote past there was XHTML (something that is practically embedded within HTML5), ie are not false elements, but customized.
an example we can customize are SVG elements (an xml for vector images)
That is, HTML is like an XML, however much more "permissive", the selectors then probably should be free to manipulate, there were even variations of XHTML, as:
- XHTML 1
- XHTML Mobile Profile
- XHTML 2.0
- XHTML5
That is, the CSS was not only created to meet the Standard HTML, but any similar format of markup languages. The rest will depend on the renderer that will process the CSS.
Of course today XHTML technically doesn’t exist (although HTML5 pretty much supports everything it did), but the CSS heritage is "free" for any kind of tag.
Note also that the evolution of HTML does not follow synchronized with CSS, each evolves at its own time, that is, if CSS only allowed "valid tags" we would not have to customize new tags that were "implemented" in HTML.
I believe it is also valid to quote web Components, that work on custom elements.
– Woss
@Andersoncarloswoss great, I will read and then read this https://w3c.github.io/webcomponents/spec/custom/ and then update ;)
– Guilherme Nascimento