Кратко
Скопировано:scope — псевдокласс, который соответствует «текущему корню» селектора.
- В JavaScript, при вызове
element,. query Selector ( All ) :scopeуказывает на самelement. Это позволяет удобно писать селекторы с комбинаторами (>,+,~) относительно элемента, с которого начат поиск. - В CSS, внутри
@scope:scopeсоответствует корневому элементу области (селектору‑якорю правила@scope).
Пример
СкопированоВыделим только непосредственных детей заданного блока — с помощью :scope > … при поиске в JS. Полная интерактивная версия — в демо ниже.
const card = document.querySelector('.card')const directChildren = card.querySelectorAll(':scope > ul > li')directChildren.forEach((li) => li.classList.add('highlight'))
const card = document.querySelector('.card')
const directChildren = card.querySelectorAll(':scope > ul > li')
directChildren.forEach((li) => li.classList.add('highlight'))
Как пишется
СкопированоСинтаксис — обычный псевдокласс в селекторе:
/* Внутри @scope :scope — это корень области */@scope (.card) { :scope { outline: 2px dashed #2E9AFF; } :scope > h2 { color: #2E9AFF; }}
/* Внутри @scope :scope — это корень области */
@scope (.card) {
:scope { outline: 2px dashed #2E9AFF; }
:scope > h2 { color: #2E9AFF; }
}
В JavaScript :scope особенно полезен с относительными комбинаторами:
// Только непосредственные дочерние <li>el.querySelectorAll(':scope > li')// Соседний элемент того же уровняel.querySelectorAll(':scope + .sibling')// Все последующие элементы того же уровняel.querySelectorAll(':scope ~ .others')
// Только непосредственные дочерние <li>
el.querySelectorAll(':scope > li')
// Соседний элемент того же уровня
el.querySelectorAll(':scope + .sibling')
// Все последующие элементы того же уровня
el.querySelectorAll(':scope ~ .others')
Как понять
СкопированоОбычно селектор вроде > li в DOM‑методах нельзя написать «сам по себе», потому что нужен левый операнд — от чего вести отсчёт. :scope выступает как явный левый операнд и указывает, что ориентир — текущий корень поиска (элемент, на котором вызван query). Поэтому el выбирает только непосредственных детей el, а не всех потомков.
В стилях @scope ограничивает действие селекторов подблока. Там :scope ссылается на корневой элемент области — это делает селекторы внутри правила выразительнее и локальнее.
Подсказки
Скопировано💡 Используйте :scope для надёжного выбора «только детей» при работе с вложенными списками и компонентами.
💡 У :scope обычная «весомость» псевдокласса. Помните, что добавляя :scope, вы увеличиваете специфичность селектора.
💡 В CSS без @scope :scope обычно совпадает с корнем документа и в шаблонных стилях встречается реже; максимальную пользу псевдокласс приносит в DOM‑поиске и внутри @scope.