Кастомизируемый лоадер
В предыдущей части мы научились создавать простой вращающийся лоадер. Благодаря CSS-переменным мы существенно сократили код.
Однако, CSS-переменные можно использовать не только для сокращения кода, но и для настройки внешнего вида компонентов. В этой демонстрации мы превратим обычный лоадер в полностью кастомизируемый лоадер.
Определимся, что будем настраивать:
- цвет лепестков;
- размеры лепестков;
- размеры лоадера;
- время анимации.
Начнём с цвета лепестков. Создадим в :root
CSS-переменную --background-color
, в которой будем определять цвет. Добавим в неё значение #ffffff
— наш исходный цвет.
Поменяем белый цвет на жёлтый.
Создадим переменные для настройки размеров лепестка и заменим значениями этих переменных статичные значения в .loader__stick::after
.
Поменяем размеры лепестка. Пока всё идёт по плану.
Перейдём к размерам самого лоадера. Для размеров используем одну CSS-переменную --size
, наш лоадер квадратный.
При изменении значения --size
лоадер должен оставаться по центру, а круг с лепестками должен расширяться или сужаться.
Для этого нужно менять координаты лепестков и центр трансформации, которые зависят от размеров лоадера. Доработаем это на следующих шагах.
Поставим анимацию на паузу и займёмся расположением лепестков.
Точка, относительно которой выполняется трансформация, находится в центре лоадера, когда размеры для обоих координат transform-origin
равны половине размера самого лоадера.
То есть задаём calc(var(--size) / 2)
для каждой координаты.
Координата top
равна половине ширины лепестка.
Координата left
равна половине разности размера лоадера и ширины лепестка.
Снова заводим анимацию. Меняем значение --size
. Всё масштабируется как надо.
Добавим переменную --animation-time
. И заменим значение 1.2s
в CSS-свойстве animation
на эту переменную.
Поменяем значение --animation-time
на 2.2s
. Анимация сломалась. Лепестки появляются без учёта нового значения переменной.
Аналогичная ситуация произойдёт, если уменьшить значение --animation-time
. Попробуйте установить, например, 0.2s
и посмотреть, что происходит.
Сделаем так, чтобы формула в свойстве animation-delay
учитывала длительность анимации.
Мы получили смещение 0.1s
поделив 1.2s
на 12
. Заменим 0.1s
на --animation-time
делённую на 12
.
Осталось заменить статичное значение 1.2s
, которое мы вычитаем в конце формулы, на переменную --animation-time
. Анимация завершена.
Изменим значение длительности анимации и убедимся, что лоадер работает правильно. Можете поэкспериментировать с другими значениями, например, 0.5s
.
На финальном шаге выведем на страницу 4 разных лоадера, значения для которых настроим через CSS-переменные.