Изменения в наследовании CSS::backdrop

История ::backdrop

В полноэкранном API представлены новые концепции, такие как верхний слой и элемент ::backdrop .

  • Верхний слой — это новый слой сложения, отображаемый ближе всего к пользователю в области просмотра. Он имеет размер области просмотра и отображается поверх всех остальных слоев.
  • Псевдоэлемент CSS ::backdrop представляет собой блок размером с область просмотра, отображаемый непосредственно под любым элементом, представленным в верхнем слое.

Одной из особенностей исходной спецификации ::backdrop было следующее:

Он не наследуется ни от какого элемента и не наследуется от.

Хотя это было полезно для изоляции стиля ::backdrop , это также означало, что ::backdrop не имел доступа ни к одному из пользовательских свойств, объявленных в :root . Это создало некоторую путаницу среди веб-разработчиков .

В качестве обходного пути вам пришлось явно объявить свои пользовательские свойства в ::backdrop а также в :root чтобы сделать их доступными:

/* Pre-Chrome 122 */
:root, ::backdrop {
  --back-color: #333;
}

::backdrop {
  background-color: var(--back-color);
}

Обновление ::backdrop

Чтобы исправить проблемы с ::backdrop , рабочая группа CSS приняла эти концепции и теперь определила их в спецификации CSS Positioned Layout .

Наряду с переносом определения в новую спецификацию определения были уточнены.

Одним из усовершенствований, которое оказывает непосредственное влияние на веб-разработчиков, является то, что элемент ::backdrop теперь является элементом, постоянным в дереве , то есть он наследует любые наследуемые свойства от своего исходного элемента.

Поддержка браузера

  • Хром: 122.
  • Край: 122.
  • Фаерфокс: 120.
  • Сафари: 17.4.

Благодаря этому изменению можно переопределить значения пользовательских свойств для определенных элементов, и ::backdrop получит к ним доступ. Например, ::backdrop связанный с открытым элементом <dialog> теперь может получить доступ к пользовательским свойствам, доступным в этом <dialog> .

/* Chrome 122 and up */
:root {
  --backdrop-color: #333; /* Any ::backdrop can access this custom property */
}

dialog {
  --backdrop-color: #6300ff33; /* The ::backdrop for dialog can access this custom property */
}

::backdrop {
  background-color: var(--backdrop-color);
}
Демо с <диалогом>, который открывается на верхнем уровне. В Chrome 122 и более поздних версиях ::backdrop может получить доступ к переменной --backdrop-color и использовать ее для раскрашивания фона.