transition-behavior
Властивість CSS transition-behavior (логіка переходу) задає те, чи починаються переходи для властивостей, чия логіка анімації є дискретною.
Синтаксис
/* Значення – ключові слова */
transition-behavior: allow-discrete;
transition-behavior: normal;
/* Глобальні значення */
transition-behavior: inherit;
transition-behavior: initial;
transition-behavior: revert;
transition-behavior: revert-layer;
transition-behavior: unset;
Значення
allow-discreteПереходи на елементі для дискретно анімованих властивостей – запускаються.
normalПереходи не запускаються на елементі для дискретно анімованих властивостей.
Опис
Властивість transition-behavior грає роль лише тоді, коли використовується разом з іншими властивостями переходів, зокрема transition-property та transition-duration, оскільки перехід не відбувається, якщо жодна властивість не анімується протягом ненульового періоду часу.
.card {
transition-property: opacity, display;
transition-duration: 0.25s;
transition-behavior: allow-discrete;
}
.card.fade-out {
opacity: 0;
display: none;
}
Значення transition-behavior може бути включено як частина скороченого оголошення transition. Коли воно включене в скорочення, при застосуванні його до властивостей (явно, або усталено — до всіх), значення allow-discrete не впливає на звичайні анімовані властивості. Наступний CSS рівносильний розгорнутим оголошенням вище:
.card {
transition: all 0.25s;
transition: all 0.25s allow-discrete;
}
.card.fade-out {
opacity: 0;
display: none;
}
У зразку коду вище властивість transition додана двічі. Перший раз не включає значення allow-discrete – це надає кросбраузерну підтримку, забезпечуючи перехід інших властивостей картки в браузерах, які не підтримують transition-behavior.
Логіка дискретної анімації
Дискретно анімовані властивості, загалом, перемикаються між двома значеннями на 50% анімації між ними.
Проте є виняток, а саме – коли анімується display: none або content-visibility: hidden. У цьому випадку браузер перемикається між двома значеннями так, щоб анімований вміст був видимим протягом усього часу анімації.
Тож, наприклад:
- Коли
displayанімується відnoneдоblock(або іншого видимого значенняdisplay), значення перемикається наblockна0%тривалості анімації, щоб вона була помітна протягом всієї своєї тривалості. - Коли
displayанімується відblock(або іншого видимого значенняdisplay) доnone, значення перемикається наnoneна100%тривалості анімації, щоб вона була помітна протягом всієї своєї тривалості.
Формальне визначення
Значення не знайшлося в базі даних!
Формальний синтаксис
Інформація про синтаксис недоступна
Жодного значення не знайшлося в базі даних.
Приклади
Перехід спливного віконця
У цьому прикладі спливне віконце анімується шляхом переходу від прихованого стану до показаного – й назад.
HTML
HTML тут містить елемент <div>, оголошений як спливне віконце за допомогою атрибута popover, та елемент <button>, призначений для керування відображенням спливного віконця за допомогою атрибута popovertarget.
<button popovertarget="mypopover">Показати спливне віконце</button>
<div popover="auto" id="mypopover">
Я Спливне віконце! Я повинно анімуватися.
</div>
CSS
[popover]:popover-open {
opacity: 1;
transform: scaleX(1);
}
[popover] {
/* Кінцевий стан анімації виходу */
opacity: 0;
transform: scaleX(0);
transition-property: opacity, transform, overlay, display;
transition-duration: 0.7s;
transition-behavior: allow-discrete;
/* За допомогою властивості-скорочення transition можна написати:
transition:
opacity 0.7s,
transform 0.7s,
overlay 0.7s allow-discrete,
display 0.7s allow-discrete;
або навіть:
transition: all 0.7s allow-discrete;
*/
}
/* Необхідно додати після правила [popover]:popover-open,
щоб це діяло, адже специфічність тут така сама */
@starting-style {
[popover]:popover-open {
opacity: 0;
transform: scaleX(0);
}
}
Дві властивості, що тут анімуються – це opacity та transform: ми хочемо, щоб спливне віконце з'являлося та зникало, розширюючись та звужуючись по горизонталі. Для цих властивостей задається стартовий стан на усталеному прихованому стані елемента спливного віконця (вибраного за допомогою [popover]), та кінцевий стан на відкритому стані спливного віконця (вибраного за допомогою псевдокласу :popover-open). Потім задається властивість transition для анімації між ними.
У зв'язку з тим, що анімований елемент підноситься до верхнього шару при показі та вилучається з верхнього шару при приховуванні – що також означає, що його прихований стан має display: none – до списку анімованих елементів додаються наступні властивості, щоб анімація працювала в обох напрямках. У обох випадках в скороченому записі задається властивість transition-behavior: allow-discrete, щоб увімкнути дискретну анімацію.
display: Обов'язкова, щоб анімований елемент був видимим (задана якdisplay: block) протягом як анімації входу, так і анімації виходу. Без цього анімація виходу не була б видимою; насправді, спливне віконце просто зникло б.overlay: Обов'язкова, щоб переконатися, що вилучення елемента з верхнього шару відкладається до завершення анімації. Це не суттєво для базових анімацій, як ця, але в складніших випадках, якщо цього не робити, елемент буде вилучено з верхнього шару занадто швидко, що означає, що анімація не буде плавною й ефективною.
Крім цього, стартовий стан анімації задається всередині директиви @starting-style. Це необхідно, щоб уникнути непередбачуваної поведінки. Усталено переходи не запускаються при першому оновленні стилів елементів, або коли тип display змінюється з none на інший тип. Директива @starting-style дозволяє перевизначити цю усталену поведінку в конкретний контрольований спосіб. Без цього анімація входу не відбувалася б, і спливне віконце просто з'являлося б.
Результат
Цей код візуалізується так:
[!NOTE] Оскільки спливні віконця змінюються від
display: noneдоdisplay: blockкожного разу, коли показуються, то спливне віконце переходить від стилів@starting-styleдо стилів[popover]:popover-openкожного разу, коли відбувається перехід входу. Коли спливне віконце закривається, то воно переходить від свого стану[popover]:popover-openдо усталеного стану[popover].В таких випадках перехід стилів при вході та виході може бути різним. Дивіться доказ цього в нашому прикладі Демонстрація того, як використовуються стартові стилі.
Специфікації
Сумісність із браузерами
Дивіться також
overlay@starting-style- Модуль Переходів CSS
- Чотири нові можливості CSS для плавних анімацій входу та виходу на developer.chrome.com (2023)