overlay
Ограниченная доступность
Эта функция не относится к Baseline, так как она не работает в некоторых из наиболее широко используемых браузеров.
Экспериментально: Это экспериментальная технология .
Перед использованием в производстве внимательно ознакомьтесь с таблицей совместимости с браузерами.
Свойство overlay CSS определяет, отображается ли элемент, находящийся на верхнем слое (например, отображаемый поп-ап или модальный <dialog> элемент) на самом деле на верхнем слое. Это свойство применимо только в списке значений transition-property и только в том случае, если allow-discrete задано в качестве transition-behavior.
Важно отметить, что overlay может быть задано только браузером — стили автора не могут изменить значение overlay любого элемента. Однако вы можете добавить overlay в список свойств переходов, заданных для элемента. Это приводит к отложенному удалению элемента с верхнего слоя, чтобы он мог быть анимирован, а не исчезал мгновенно.
Примечание: При анимировании overlay, необходимо установить transition-behavior: allow-discrete для перехода, чтобы он анимировался. overlay анимации отличаются от обычных дискретных анимаций тем, что видимое (т. е. auto) состояние всегда отображается в течение всего времени перехода, независимо от того, является ли это начальным или конечным состоянием.
Синтаксис
/* Keyword values */ overlay: auto; overlay: none; /* Global values */ display: inherit; display: initial; display: revert; display: revert-layer; display: unset;
Значения
Формальное определение
| Начальное значение | none |
|---|---|
| Применимо к | всем элементам |
| Наследуется | нет |
| Вычисленное значение | как указано |
| Тип анимации | Дискретный режим, за исключением анимации к или от none отображается в течение всего времени анимации |
Формальный синтаксис
overlay =
none |
auto
Примеры
Анимирование поп-апа
В этом примере поп-ап анимируется при переходе от скрытого к отображаемому и обратно.
HTML
HTML содержит элемент <div>, объявленный как поп-ап с помощью атрибута popover, и элемент <button>, назначенный в качестве элемента управления отображением поп-апа с помощью атрибута popovertarget.
<button popovertarget="mypopover">Show the popover</button> <div popover="auto" id="mypopover">I'm a Popover! I should animate.</div>
CSS
Свойство overlay присутствует только в списке анимируемых свойств. Поскольку overlay — это свойство, управляемое браузером, оно не объявляется в состояниях до и после перехода.
html {
font-family: Arial, Helvetica, sans-serif;
}
[popover]:popover-open {
opacity: 1;
transform: scaleX(1);
}
[popover] {
font-size: 1.2rem;
padding: 10px;
/* Final state of the exit animation */
opacity: 0;
transform: scaleX(0);
transition:
opacity 0.7s,
transform 0.7s,
overlay 0.7s allow-discrete,
display 0.7s allow-discrete;
/* Equivalent to
transition: all 0.7s allow-discrete; */
}
/* Needs to be included after the previous [popover]:popover-open
rule to take effect, as the specificity is the same */
@starting-style {
[popover]:popover-open {
opacity: 0;
transform: scaleX(0);
}
}
/* Transition for the popover's backdrop */
[popover]::backdrop {
background-color: rgb(0 0 0 / 0%);
transition:
display 0.7s allow-discrete,
overlay 0.7s allow-discrete,
background-color 0.7s;
/* Equivalent to
transition: all 0.7s allow-discrete; */
}
[popover]:popover-open::backdrop {
background-color: rgb(0 0 0 / 25%);
}
/* Nesting selectors (&) cannot represent pseudo-elements, so this
starting-style rule cannot be nested. */
@starting-style {
[popover]:popover-open::backdrop {
background-color: rgb(0 0 0 / 0%);
}
}
Два свойства, которые мы хотим анимировать, это opacity и transform: мы хотим, чтобы поп-ап бледнел и затем снова появлялся, при этом увеличиваясь и уменьшаясь в горизонтальном направлении. Мы задаём начальное состояние этих свойств для скрытого состояния элемента поп-апа (выбранного через [popover]), и конечное состояние для открытого состояния поп-апа (выбранного через псевдокласс :popover-open). Затем мы задаём свойство transition для анимации между этими двумя состояниями.
Поскольку анимируемый элемент перемещается на верхний слой при отображении и удаляется с верхнего слоя при скрытии, overlay добавляется в список анимируемых элементов. Это гарантирует, что удаление элемента с верхнего слоя откладывается до завершения анимации. Это не очень важно для простых анимаций, таких как эта, но в более сложных случаях, если этого не сделать, элемент может быть удалён с перекрытия слишком быстро, что может привести к неровной или неэффективной анимации. Обратите внимание, что значение transition-behavior: allow-discrete также задано в сокращённой форме для включения дискретных переходов.
Для работы анимации в обоих направлениях также требуются следующие шаги:
- Начальное состояние анимации задаётся внутри правила @starting-style
@starting-style. Это необходимо для предотвращения непредсказуемого поведения. По умолчанию переходы не запускаются при первых обновлениях стиля элементов или при изменении типаdisplayсnoneна другой тип.@starting-styleпозволяет переопределить это значение по умолчанию в конкретном контролируемом режиме. Без этого начальная анимация не будет происходить, и поп-ап просто появится. -
displayтакже добавляется в список анимируемых элементов, чтобы анимируемый элемент отображался (установлен вdisplay: block) на протяжении всей анимации входа и выхода. Без этого анимация выхода не была бы видна; по сути, поп-ап просто исчезнет. Опять же,transition-behavior: allow-discreteтребуется в этом случае для выполнения анимации.
Вы заметите, что мы также добавили переход для ::backdrop, который появляется позади поп-апа при его открытии, чтобы обеспечить приятную затемнённую анимацию. [popover]:popover-open::backdrop требуется для выбора фона, когда поп-ап открыт.
Результат
Код отображается следующим образом:
Примечание: Поскольку поп-апы каждый раз меняются с display: none на display: block, поп-апы переходят от своих стилей @starting-style к своим стилям [popover]:popover-open каждый раз при выполнении переходного эффекта входа. Когда поп-ап закрывается, он переходит от своего состояния [popover]:popover-open к стандартному состоянию [popover].
В таких случаях стиль перехода при входе и выходе может отличаться. Смотрите пример Демонстрация использования начальных стилей для доказательства этого.
Спецификации
| Спецификация |
|---|
| Модуль позиционирования CSS уровня 4 # overlay |
Совместимость с браузерами
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на IOS | Samsung Internet | WebView Android | |
overlay |
117 | 117 | Нет | 103 | Нет | 117 | Нет | 78 | Нет | 24.0 | 117 |
auto |
117 | 117 | Нет | 103 | Нет | 117 | Нет | 78 | Нет | 24.0 | 117 |
none |
117 | 117 | Нет | 103 | Нет | 117 | Нет | 78 | Нет | 24.0 | 117 |
См. также
- Переходы CSS модуль
@starting-styletransition-behavior- Четыре новых CSS-функции для плавных анимаций входа и выхода на developer.chrome.com (2023)
© 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/overlay