Движение
Скорость и характер движения в SIMAI Framework заданы переменными на :root:
три длительности и четыре кривые. Классы переходов и анимаций, а также
компоненты читают эти переменные, поэтому скорость меняется в одном месте.
Когда применять
Откройте эту страницу, когда элементу нужен плавный переход, когда проект хочет ускорить или замедлить движение во всём интерфейсе или когда своему компоненту нужна та же кривая, что у компонентов Framework.
Переменные
| Переменная | Значение | Для чего |
|---|---|---|
--sf-duration-fast |
0.1s |
короткий отклик: смена цвета, наведение |
--sf-duration-normal |
0.3s |
обычный переход; её берут классы по умолчанию |
--sf-duration-slow |
0.5s |
крупное перемещение, большая площадь |
--sf-animation |
cubic-bezier(.25, .8, .25, 1) |
кривая класса animation |
--sf-ease-move |
cubic-bezier(.65, 0, .35, 1) |
перемещение на месте; её берут классы переходов |
--sf-ease-enter |
cubic-bezier(.19, 1, .22, 1) |
появление: быстрый старт и мягкая остановка |
--sf-ease-exit |
cubic-bezier(.65, 0, .4, 1) |
исчезновение: решительный уход без задержки |
Появление и исчезновение — разные кривые: слой, который уходит по той же кривой, по которой пришёл, кажется медленнее, чем он есть.
Что включает переход
Ядро не задаёт переход всем элементам: без класса свойство меняется сразу. Переход включает класс:
transition,transition-colors,transition-opacity,transition-transformи другие классы свойства перехода берут длительность--sf-duration-normalи кривую--sf-ease-move;duration-fast,duration-normal,duration-slowзадают длительность одной из переменных; без класса свойства переход охватывает все свойства. На один элемент с классомtransition-*их не ставят: оба задают длительность, и победитель зависит от порядка таблиц стилей — меняйте длительность переменной, как в примере ниже;animationзапускает анимацию плавного появления с длительностью--sf-duration-normalи кривой--sf-animation;animation-duration-fast,animation-duration-normalиanimation-duration-slowменяют её длительность.
Кривые --sf-ease-enter и --sf-ease-exit классов не имеют: их берут
компоненты, у которых есть появление и уход, — например, уведомления и
выдвижная панель. В своём CSS используйте их так же.
Ядро не выключает движение по системной настройке «уменьшить движение». Если проекту это нужно, задайте правило сами — пример ниже.
Пример
Наведите указатель на плашки: цвет меняется с разной длительностью.
duration-fast
duration-normal
duration-slow
Переход в своём CSS — те же переменные:
.project-panel {
transition: transform var(--sf-duration-normal) var(--sf-ease-enter);
}
.project-panel--closing {
transition-timing-function: var(--sf-ease-exit);
}
Скорость во всём проекте или в одном блоке меняется переопределением
переменной. Всё, что внутри читает --sf-duration-normal, становится
медленнее:
.project-onboarding {
--sf-duration-normal: var(--sf-duration-slow);
}
Движение по системной настройке:
@media (prefers-reduced-motion: reduce) {
:root {
--sf-duration-fast: 0s;
--sf-duration-normal: 0s;
--sf-duration-slow: 0s;
}
}