Псевдокласс :defined

Псевдокласс :defined применяется к элементу, когда он определён. К таким элементам относятся следующие:

  • стандартные HTML-элементы (они перечислены в спецификации HTML и поддерживаются браузерами), такие как <p>, <header>, <h1> и др.;
  • зарегистрированные пользовательские элементы (например, <my-example>).

Для обратного выбора — элементов, которые не были определены, можно использовать селектор :not(:defined).

Синтаксис

Селектор:defined { … }
Описание Пример
<тип> Указывает тип значения. <размер>
A && B Значения должны выводиться в указанном порядке. <размер> && <цвет>
A | B Указывает, что надо выбрать только одно значение из предложенных (A или B). normal | small-caps
A || B Каждое значение может использоваться самостоятельно или совместно с другими в произвольном порядке. width || count
[ ] Группирует значения. [ crop || cross ]
* Повторять ноль или больше раз. [,<время>]*
+ Повторять один или больше раз. <число>+
? Указанный тип, слово или группа не является обязательным. inset?
{A, B} Повторять не менее A, но не более B раз. <радиус>{1,4}
# Повторять один или больше раз через запятую. <время>#

Пример

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Размер текста</title> <script> customElements.define('my-spoiler', class extends HTMLElement { connectedCallback() { this.attachShadow({mode: 'open'}); this.shadowRoot.append(tmpl.content.cloneNode(true)); this.shadowRoot.querySelector('.spoiler-show').onclick = () => { this.shadowRoot.querySelector('.spoiler-text').classList.toggle('open'); }; } }); </script> <style> :not(:defined) { border: 1px solid orange; /* Параметры рамки */ padding: 5px; /* Расстояние от текста до рамки */ } </style> </head> <body> <template id="tmpl"> <style> .spoiler-text { color: green; /* Цвет текста */ display: none; /* Скрыть от просмотра */ margin-bottom: 1em; /* Расстояние снизу */ } .open { display: block; /* Показать текст */ } </style> <div class="spoiler"> <p><button class="spoiler-show">Показать</button></p> <div class="spoiler-text"><slot></slot></div> </div> </template> <p>Осторожно, ниже возможны спойлеры!</p> <my-spoiler>Дарт Вейдер — отец Люка Скайуокера.</my-spoiler> <another-spoiler>Ещё один спойлер</another-spoiler> </body> </html>

В данном примере используется два пользовательских элемента — <my-spoiler> зарегистрирован, а другой нет. Псевдокласс :defined в сочетании с :not позволяет выделить пользовательские незарегистрированные элементы.

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

Selectors Level 4

Браузеры

79 54 41 10 63
54 63 41 10

В таблице браузеров применяются следующие обозначения.

  • — элемент полностью поддерживается браузером;
  • — элемент браузером не воспринимается и игнорируется;
  • — при работе возможно появление различных ошибок, либо элемент поддерживается с оговорками.

Число указывает версию браузреа, начиная с которой элемент поддерживается.