You can replace all <div></div>
with <tag-name></tag-name>
(since 2018) ANY tagname with a dash is a valid HTMLElement
Let me repeat that for clarity:
๐ ANY ๐คฏ tagname 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, its only HTML and CSS
โ
This is standard behaviour in all browsers since 2020
(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 undefined Custom Elements with a shadowDOM
โ The Custom Elements API (MDN) requires JavaScript to convert undefined Custom Elements (but valid HTMLElement!) into defined Custom Elements.
๐๐๐
No more hunting for that closing </div>
tag
</tag-name>
is just there!
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)