Spec-Zone.ru › CSS

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;

Значения

auto

Элемент отображается на верхнем слое, если он поднят на верхний слой.

none

Элемент не отображается на верхнем слое.

Формальное определение

Начальное значение 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-style
  • transition-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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API