TL;DR;
- You can replace all
<div></div>with<tag-name></tag-name>
Later written blogposts:
ANY <tag-name> with a dash is a valid HTMLElement
Let me repeat that for clarity:
๐ ANY ๐คฏ <tag-name> with a dash is a valid HTMLElement
NOT HTMLUnknownElement as some claim
That means you can replace EVERY <div> with valid HTML
Then this DIV-soup:
Becomes valid HTML:
๐ง Good to know
โ Absolutely NO JavaScript required, it is only HTML and CSS
โ This is standard behaviour in all browsers that support the Custom Elements API. Since 2020 in all browsers when Microsoft Edge switched to the Chromium Engine. And already in Chrome, Safari, Firefox many moons before 2020
โ
The W3C HTML Validator accepts all <tag-name> Custom Elements with a dash as HTMLElement.
It does not accept <tagname> (no dash), those are HTMLUnknownElement
โ
The UA - UserAgent StyleSheet (Browsers default stylesheet)
defines CSS [hidden] { display:none }.
But Custom Elements do not inherit the default stylesheet;
so you have to add that behaviour yourself in your stylesheet.
โ
<DIV> is display:block only in the UA StyleSheet
You have to set ๐๐๐จ๐ฅ๐ก๐๐ฎ: ๐๐ก๐ค๐๐ / ๐๐ฃ๐ก๐๐ฃ๐-๐๐ก๐ค๐๐ ; on these Custom Elements yourself
(You will forget this 20 times, then you never make the mistake again)
โ The CSS :๐๐๐๐๐ฃ๐๐ pseudo selector targets standard HTML tags and JavaScript defined Custom Elements
โ
Thus the CSS :๐ฃ๐ค๐ฉ(:๐๐๐๐๐ฃ๐๐) pseudo selector targets the ๐ช๐ฃ๐๐๐๐๐ฃ๐๐ Custom Elements; they are still valid HTMLElement, CSS applies like any element
โ
<you-are-not-bound-to-one-dash>
โ
Declarative ShadowDOM:
<template shadowrootmode="open"> creates the same undefined Custom Elements with a shadowDOM
โ The Custom Elements API (MDN) requires JavaScript to convert undefined Custom Elements (but valid HTMLElements!) into defined Custom Elements.
๐๐๐
No more hunting for that closing </div> tag
</tag-name> is just there!
Repetition is always great
โ Absolutely NO JavaScript required, its only HTML and CSS
Are they Web Components?
Technologies NOT used:
<template>- shadowDOM
- Custom Elements API (create defined elements with JavaScript)
๐ Prove ANY tagname with a dash IS a HTMLElement
for:
<div></div>
<tagname></tagname>
<tag-name></tag-name>
<tag-name-foo></tag-name-foo>
<tag-name-bar></tag-name-bar>
NO MORE DIV-SOUP!
โ If you believe AI over a random Dev.to post:
Note: every evergreen browser knows what a Custom Element is, just ask yourself:
(after reading: https://web.dev/articles/declarative-shadow-dom)
- What happens with
<tag-name>, and CSS applied, when you omit the<template>?
<tag-name>
<template shadowrootmode="open">
</template>
</tag-name>




Top comments (0)