:defined

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since January 2020.

Die :defined CSS-Pseudoklasse repräsentiert jedes Element, das definiert wurde. Dazu gehören alle Standard-Elemente, die im Browser integriert sind, sowie benutzerdefinierte Elemente, die erfolgreich definiert wurden (z. B. mit der Methode CustomElementRegistry.define()).

css
/* Selects any defined element */
:defined {
  font-style: italic;
}

/* Selects any instance of a specific custom element */
custom-element:defined {
  display: block;
}

Syntax

css
:defined {
  /* ... */
}

Beispiele

Elemente ausblenden, bis sie definiert sind

In diesem Demo definieren wir ein einfaches benutzerdefiniertes Element namens <custom-element> und verwenden die Selektoren :not(:defined) und :defined, um das Element vor und nach der Definition zu stylen. Dies ist nützlich, wenn Sie ein komplexes benutzerdefiniertes Element haben, das länger benötigt, um in die Seite geladen zu werden – Sie möchten möglicherweise Instanzen des Elements ausblenden, bis die Definition abgeschlossen ist, um zu vermeiden, dass unästhetische, ungestylte Elemente auf der Seite erscheinen.

HTML

Der folgende HTML-Code verwendet das benutzerdefinierte Element, das aber noch nicht definiert wurde. Wir fügen auch ein <button> ein, das das benutzerdefinierte Element definiert, wenn es angeklickt wird. Dadurch können Sie dessen Zustand vor und nach der Definition sehen.

html
<custom-element>
  <p>
    Loaded content: Lorem ipsum tel sed tellus eiusmod tellus. Aenean. Semper
    dolor sit nisi. Elit porttitor nisi sit vivamus.
  </p>
</custom-element>

<button id="btn">define the <code>&lt;custom-element&gt;</code></button>

CSS

Im folgenden CSS verwenden wir den Selektor custom-element:not(:defined), um das Element auszuwählen und es grau zu färben, solange es nicht definiert ist. Mit dem Selektor custom-element:defined wird das Element ausgewählt und nach der Definition schwarz eingefärbt.

css
custom-element:not(:defined) {
  border-color: grey;
  color: grey;
}

custom-element:defined {
  background-color: wheat;
  border-color: black;
  color: black;
}

/* show loading message */
custom-element:not(:defined)::before {
  content: "Loading...";
  position: absolute;
  inset: 0 0 0 0;
  align-content: center;
  text-align: center;
  font-size: 2rem;
  background-color: white;
  border-radius: 1rem;
}

/* remove the loading message */
custom-element:defined::before {
  content: "";
}

Wir haben außerdem das ::before-Pseudo-Element verwendet, um eine "Loading..."-Overlay-Nachricht anzuzeigen, bis das Element definiert ist. Nach der Definition wird die Nachricht entfernt, indem der content-Wert auf einen leeren String gesetzt wird.

Der folgende JavaScript-Code wurde verwendet, um das benutzerdefinierte Element zu definieren. Um es Ihnen zu ermöglichen, den Zustand des benutzerdefinierten Elements vor und nach der Definition zu sehen, führen wir die define()-Methode aus, wenn der Button angeklickt wird.

js
const btn = document.querySelector("#btn");

btn.addEventListener("click", () => {
  customElements.define("custom-element", class extends HTMLElement {});
  btn.remove();
});

Ergebnis

Spezifikationen

Specification
HTML
# selector-defined
Selectors Level 4
# defined-pseudo

Browser-Kompatibilität

Report problems with this compatibility data on GitHub
desktopmobile
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
:defined

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support

Siehe auch