Использование переменных CSS для сведения к минимуму анимации

Вот пример использования:

CSS .selector { animation: regularAnimation 1s; } @media (prefers-reduced-motion: reduce) { .selector { animation: reducedAnimation .1s; } }

123456789 .selector {  animation: regularAnimation 1s;} @media (prefers-reduced-motion: reduce) {  .selector {    animation: reducedAnimation .1s;  }}

Выполнение функции уменьшения анимации не обязательно означает полное ее удаление. Анимация может быть уменьшена или ускорена, в зависимости от того, что будет комфортно для пользователя, но это выходит за рамки данной статьи.

Практический курс по верстке адаптивного сайта с нуля!

Изучите курс и узнайте, как верстать современные сайты на HTML5 и CSS3

Итак, как нам помогают переменные CSS? Чтобы ответить на этот вопрос, я хотел бы показать вам «обычный» способ минимизировать анимацию в CSS. Допустим, у нас есть три элемента и три разных перехода при наведении курсора с одинаковой продолжительностью перехода.

Напоминаем, что следует анимировать только непрозрачность и преобразование, чтобы избежать повторных вычислений рисования и макета.

CSS .selector, .selector2, .selector3 { transition: transform 1s; } .selector:hover { transform: rotate(180deg); } .selector2:hover { transform: skew(5deg); } .selector3:hover { transform: transformY(-5%); }

1234567891011121314151617 .selector,.selector2,.selector3 {  transition: transform 1s;} .selector:hover {  transform: rotate(180deg);} .selector2:hover {  transform: skew(5deg);} .selector3:hover {  transform: transformY(-5%);}

Чтобы уменьшить время анимации перехода, мы могли бы написать следующее:

CSS @media (prefers-reduced-motion: reduce) { .selector, .selector2, .selector3 { animation-duration: .05s; } }

1234567 @media (prefers-reduced-motion: reduce) {  .selector,  .selector2,  .selector3 {    animation-duration: .05s;  }}

В таком подходе нет ничего плохого, но представьте, насколько велико влияние этого правила для медиа-функции prefers-reduced-motion для всех элементов с переходами. Давайте представим переменную CSS, которая может помочь уменьшить анимацию в глобальном масштабе.

CSS :root { –transition-duration: 1s; } .selector, .selector2, .selector3 { transition: transform var(–transition-duration); } @media (prefers-reduced-motion: reduce) { :root { –transition-duration: .05s; } }

123456789101112131415 :root {  –transition-duration: 1s;} .selector,.selector2,.selector3 {  transition: transform var(–transition-duration);} @media (prefers-reduced-motion: reduce) {  :root {    –transition-duration: .05s;  }}

Код выглядит намного чище, не так ли? Мне это нравится. И самое лучшее в этом то, что нам не нужно заботиться о том, сколько именно элементов имеют переходы, пока они используют переменную CSS. Мы могли бы использовать несколько длительностей перехода, и код все равно будет выглядеть чистым:

CSS :root { –transition-duration1: 1s; –transition-duration2: 500ms; } .selector, .selector2, .selector3 { transition: transform var(–transition-duration1); } .selector, .selector2, .selector3 { transition: transform var(–transition-duration2); } @media (prefers-reduced-motion: reduce) { :root { –transition-duration1: .05s; –transition-duration2: .05s; } }

1234567891011121314151617181920212223 :root {  –transition-duration1: 1s;  –transition-duration2: 500ms;} .selector,.selector2,.selector3 {  transition: transform var(–transition-duration1);} .selector,.selector2,.selector3 {  transition: transform var(–transition-duration2);} @media (prefers-reduced-motion: reduce) {  :root {    –transition-duration1: .05s;    –transition-duration2: .05s;  }}

Мне нравится использовать переменные CSS, и теперь, когда они широко поддерживаются во всех современных браузерах, у вас нет причин не использовать prefers-reduced-motion.

Автор: Silvestar Bistrović

Источник: webformyself.com

Comments (0)
Add Comment