The following snippets are taken from our defined-pseudo-class demo (see it live also).
In this demo we define a very simple trivial custom element:
customElements.define(
"simple-custom",
class extends HTMLElement {
constructor() {
super();
let divElem = document.createElement("div");
divElem.textContent = this.getAttribute("text");
let shadowRoot = this.attachShadow({ mode: "open" }).appendChild(divElem);
}
}
);
Then insert a copy of this element into the document, along with a standard <p>
:
<simple-custom text="Custom element example text"></simple-custom>
<p>Standard paragraph example text</p>
In the CSS we first include the following rules:
p {
background: yellow;
}
simple-custom {
background: cyan;
}
:defined {
font-style: italic;
}
Then provide the following two rules to hide any instances of our custom element that are not defined, and display instances that are defined as block level elements:
simple-custom:not(:defined) {
display: none;
}
simple-custom:defined {
display: block;
}
This is useful if you have a complex custom element that takes a while to load into the page — you might want to hide instances of the element until definition is complete, so that you don't end up with flashes of ugly unstyled elements on the page