Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Как отключить анимацию для тех, кто этого просит

Короткий ответ

Оберните анимации в медиазапрос, который проверяет настройку системы:

<style>
  @keyframes slide { from { translate: -40px 0; } to { translate: 40px 0; } }
  .ball { width: 30px; height: 30px; margin: 12px auto; border-radius: 50%; background: tomato; }
  @media (prefers-reduced-motion: no-preference) {
    .ball { animation: slide 1s ease-in-out infinite alternate; }
  }
</style>
 
<div class="ball"></div>

Если в настройках включено «Уменьшить движение», мяч стоит на месте. Иначе он катается туда-сюда.

Зачем это нужно

У людей с вестибулярными нарушениями крупные движения на экране — параллакс, масштабирование, плавная прокрутка — вызывают головокружение и тошноту. Настройка есть во всех ОС: в Windows, macOS, iOS и Android.

Глобальный выключатель

Если анимаций на сайте много, можно приглушить все разом:

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
}

Почти нулевая длительность вместо none сохраняет события конца анимации, на которые может опираться JavaScript.

Частая ошибка

Уменьшение движения — не то же самое, что отсутствие анимации. Плавная смена цвета или прозрачности обычно никому не мешает; убирать нужно перемещения, вращение и масштабирование. И не забудьте про scroll-behavior: smooth — это тоже движение.

Функции из этого ответа

  • @media — Применяет правила только при заданных условиях — ширине окна, теме системы и других.
  • animation — Запускает на элементе анимацию из `@keyframes`.
  • transition — Плавно анимирует изменение свойства от старого значения к новому.
  • scroll-behavior — Происходят ли переходы к якорям и прокрутка из кода мгновенно или плавно.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.