Псевдокласс CSS `:state()`
Базовая поддержка Недавно стал доступен
Эта функция работает в последних версиях устройств и браузеров. Она может не работать на старых устройствах и в старых версиях браузеров. Функция поддерживается браузерами с мая 2024 года.
:state() — это CSS-псевдокласс, который соответствует пользовательским элементам с указанным пользовательским состоянием.
Синтаксис
:state(<custom identifier>) {
/* ... */
}
Параметры
Псевдокласс :state() принимает в качестве аргумента пользовательский идентификатор, обозначающий состояние пользовательского элемента, которому нужно сопоставить элемент.
Описание
Элементы могут переходить из одного состояния в другое в результате взаимодействия с пользователем и под влиянием других факторов. Например, элемент может находиться в состоянии «наведён курсор», когда пользователь наводит на него указатель, а ссылка может находиться в состоянии «посещена» после того, как пользователь нажал на неё. Элементы, предоставляемые браузерами, можно стилизовать в зависимости от этих состояний с помощью псевдоклассов CSS, таких как :hover и :visited. Аналогичным образом автономные пользовательские элементы (пользовательские элементы, производные не от встроенных элементов) могут предоставлять свои состояния, позволяя страницам, использующим эти элементы, стилизовать их с помощью псевдокласса CSS :state().
Состояния пользовательского элемента представлены строковыми значениями. Эти значения добавляются в объект CustomStateSet, связанный с элементом, или удаляются из него. Псевдокласс CSS :state() соответствует элементу, если переданный в качестве аргумента идентификатор присутствует в CustomStateSet этого элемента.
Псевдокласс :state() также можно использовать для сопоставления пользовательских состояний внутри реализации пользовательского элемента. Для этого нужно использовать :state() внутри функции-псевдокласса :host(), которая сопоставляет состояние только внутри теневого DOM текущего пользовательского элемента.
Кроме того, за псевдоэлементом ::part() можно указать псевдокласс :state(), чтобы сопоставить теневые части пользовательского элемента, находящиеся в определённом состоянии. (Теневые части — это части теневого дерева пользовательского элемента, которые явно предоставлены содержащей его странице для стилизации.)
Примеры
Сопоставление пользовательского состояния
В этом примере CSS показано, как изменить границу автономного пользовательского элемента <labeled-checkbox> на red, когда он находится в состоянии «отмечен».
labeled-checkbox {
border: dashed red;
}
labeled-checkbox:state(checked) {
border: solid;
}
Рабочий пример этого кода см. в разделе Сопоставление пользовательского состояния пользовательского элемента флажка на странице CustomStateSet.
Сопоставление пользовательского состояния в теневом DOM пользовательского элемента
В этом примере показано, как псевдокласс :state() можно использовать внутри функции-псевдокласса :host() для сопоставления пользовательских состояний внутри реализации пользовательского элемента.
Следующий CSS добавляет серый [x] перед элементом, когда тот находится в состоянии «отмечен».
:host(:state(checked))::before {
content: "[x]";
}
Рабочий пример этого кода см. в разделе Сопоставление пользовательского состояния пользовательского элемента флажка на странице CustomStateSet.
Сопоставление пользовательского состояния в теневой части
В этом примере показано, как псевдокласс :state() можно использовать для выбора теневых частей пользовательского элемента.
Теневые части определяются и именуются с помощью атрибута part. Например, рассмотрим пользовательский элемент с именем <question-box>, который использует пользовательский элемент <labeled-checkbox> в качестве теневой части с именем checkbox:
shadowRoot.innerHTML = `<labeled-checkbox part='checkbox'>Yes</labeled-checkbox>`;
В приведённом ниже CSS показано, как псевдоэлемент ::part() можно использовать для сопоставления с теневой частью 'checkbox'. Затем показано, как псевдоэлемент ::part() с последующим псевдоклассом :state() можно использовать для сопоставления с той же частью, когда она находится в состоянии checked.
question-box::part(checkbox) {
color: red;
}
question-box::part(checkbox):state(checked) {
color: green;
outline: dashed 1px green;
}
Рабочий пример этого кода см. в разделе Сопоставление пользовательского состояния в теневой части пользовательского элемента на странице CustomStateSet.
Спецификации
| Спецификация |
|---|
| HTML # selector-custom |
Совместимость с браузерами
| Настольные компьютеры | Мобильные устройства | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | WebView на iOS | |
state |
125
90–125Вместо:state() используется идентификатор с дефисом (например, :--foo). |
125
90–125Вместо:state() используется идентификатор с дефисом (например, :--foo). |
126 |
111
76–111Вместо:state() используется идентификатор с дефисом (например, :--foo). |
17.4 |
125
90–125Вместо:state() используется идентификатор с дефисом (например, :--foo). |
126 |
83
64–83Вместо:state() используется идентификатор с дефисом (например, :--foo). |
17.4 |
27.0
15.0–27.0Вместо:state() используется идентификатор с дефисом (например, :--foo). |
125
90–125Вместо:state() используется идентификатор с дефисом (например, :--foo). |
Нет |
См. также
CustomStateSet- Псевдоклассы
- Изучите: псевдоклассы и псевдоэлементы
- Пользовательские состояния и CSS-селекторы псевдоклассов пользовательских состояний в статье Использование пользовательских элементов
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Selectors/:state