Spec-Zone.ru › CSS

:defined

Базовая линия Широко доступна

Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна во всех браузерах с января 2020 года.

  • Подробнее
  • Полная совместимость
  • Отправить отзыв

Псевдокласс :defined CSS псевдокласса представляет любой элемент, который был определён. Это включает в себя любые стандартные элементы, встроенные в браузер, и пользовательские элементы, которые были успешно определены (т. е. с помощью метода CustomElementRegistry.define()).

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

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

Синтаксис

:defined {
  /* ... */
}

Примеры

Скрытие элементов до их определения

В этом примере мы определяем базовый пользовательский элемент с именем <custom-element> и используем селекторы :not(:defined) и :defined для форматирования элемента до и после его определения. Это полезно, если у вас сложный пользовательский элемент, который долго загружается на страницу — вы можете скрыть экземпляры элемента до завершения определения, чтобы избежать вспышек нестилизованных элементов на странице.

HTML

Следующий код HTML использует пользовательский элемент, но элемент ещё не определён. Мы также включаем <button>, который определит пользовательский элемент при нажатии, позволяя увидеть его состояние до и после определения.

<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

В следующем CSS мы используем селектор custom-element:not(:defined) для выбора элемента и окрашивания его в серый цвет, пока он не определён, и селектор custom-element:defined для выбора элемента и окрашивания его в чёрный цвет после определения.

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: "";
}

Мы также использовали псевдоэлемент ::before для отображения сообщения «Загрузка…» до определения элемента. После определения он удаляется, устанавливая content в пустую строку.

Следующий JavaScript был использован для определения пользовательского элемента. Чтобы позволить вам увидеть состояние пользовательского элемента до и после определения, мы вызываем метод define() при нажатии кнопки.

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

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

Результат

Спецификации

Спецификация
Стандарт HTML
# selector-defined

Совместимость с браузерами

Рабочие столы Мобильные
Chrome Edge Firefox Opera Safari Chrome Android Firefox for Android Opera Android Safari на iOS Samsung Internet WebView Android
:defined 54 79 63 41 10 54 63 41 10 6.0 54

См. также

  • Веб-компоненты

© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/CSS/:defined

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API