Перейти к содержимому

CSS-анимации

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

Введение в CSS-анимации

CSS-анимации позволяют веб-разработчикам анимировать HTML-элементы без использования JavaScript. Они определяются с помощью ключевых кадров (keyframes), которые задают стили в различных точках последовательности анимации.

Пример базовой CSS-анимации


html
<div class="animated-box"></div>

<style>
  .animated-box {
    width: 100px;
    height: 100px;
    background-color: red;
    animation: move 4s infinite;
  }

  @keyframes move {
    0% { transform: translateX(0); }
    50% { transform: translateX(200px); }
    100% { transform: translateX(0); }
  }
</style>

WARNING

Всегда тестируйте анимации на разных устройствах и в различных браузерах, чтобы обеспечить плавную работу.

Основные свойства CSS-анимаций

  • animation-name: Задает имя ключевых кадров.
  • animation-duration: Определяет продолжительность анимации.
  • animation-timing-function: Устанавливает кривую скорости анимации.
  • animation-delay: Задерживает начало анимации.
  • animation-iteration-count: Определяет количество повторений анимации.
  • animation-direction: Указывает, должна ли анимация проигрываться в обратном направлении на четных циклах.

Применение нескольких анимаций

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


html
<div class="multi-animated-box"></div>

<style>
  .multi-animated-box {
    width: 100px;
    height: 100px;
    background-color: blue;
    animation: move 4s infinite, rotate 2s infinite;
  }

  @keyframes move {
    0% { transform: translateX(0); }
    50% { transform: translateX(200px); }
    100% { transform: translateX(0); }
  }

  @keyframes rotate {
    0% { transform: rotate(0deg); }
    100% { transform: rotate(360deg); }
  }
</style>

Продвинутые техники

Адаптивные анимации

Убедитесь, что анимации адаптивны и подстраиваются под различные размеры экранов.


html
<div class="responsive-box"></div>

<style>
  .responsive-box {
    width: 50vw;
    height: 50vw;
    background-color: green;
    animation: resize 4s infinite;
  }

  @keyframes resize {
    0% { width: 50vw; height: 50vw; }
    50% { width: 70vw; height: 70vw; }
    100% { width: 50vw; height: 50vw; }
  }
</style>

Комбинирование трансформаций

Комбинируйте несколько свойств трансформации для создания сложных анимаций.


html
<div class="complex-transform-box"></div>

<style>
  .complex-transform-box {
    width: 100px;
    height: 100px;
    background-color: yellow;
    animation: complexTransform 5s infinite;
  }

  @keyframes complexTransform {
    0% {
      transform: translateX(0) rotate(0deg) scale(1);
    }
    50% {
      transform: translateX(200px) rotate(180deg) scale(1.5);
    }
    100% {
      transform: translateX(0) rotate(360deg) scale(1);
    }
  }
</style>

Режимы заполнения анимации

Свойство animation-fill-mode определяет, как CSS-анимация применяет стили к целевому элементу до и после её выполнения.


html
<div class="fill-mode-box"></div>

<style>
  .fill-mode-box {
    width: 100px;
    height: 100px;
    background-color: purple;
    animation: fillMode 3s forwards;
  }

  @keyframes fillMode {
    0% { background-color: purple; }
    100% { background-color: orange; }
  }
</style>

Задержки анимации и функции времени

Используйте задержки анимации и функции времени для управления темпом и началом анимаций.


html
<div class="timing-function-box"></div>

<style>
  .timing-function-box {
    width: 100px;
    height: 100px;
    background-color: pink;
    animation: timingFunction 4s ease-in-out infinite;
  }

  @keyframes timingFunction {
    0% { transform: translateY(0); }
    50% { transform: translateY(200px); }
    100% { transform: translateY(0); }
  }
</style>

Лучшие практики для CSS-анимаций

  1. Минимизируйте нагрузку на ЦП: Делайте анимации простыми, чтобы избежать чрезмерного использования ресурсов процессора, что может снизить производительность, особенно на мобильных устройствах.
  2. Используйте аппаратное ускорение: Применяйте свойства transform и opacity, чтобы задействовать ускорение через GPU.
  3. Резервные варианты: Предусматривайте резервные стили для браузеров, не поддерживающих анимации.
  4. Тестирование производительности: Тестируйте анимации на разных устройствах и в различных браузерах, чтобы обеспечить плавную работу.

INFO

Вы можете использовать JavaScript для создания более интерактивных анимаций. См. JavaScript-анимации.

Пример хорошо оптимизированной анимации


html
<div class="optimized-box"></div>

<style>
  .optimized-box {
    width: 100px;
    height: 100px;
    background-color: cyan;
    animation: optimizedMove 3s ease-in-out infinite;
  }

  @keyframes optimizedMove {
    0% { transform: translateY(0) scale(1); }
    50% { transform: translateY(200px) scale(1.2); }
    100% { transform: translateY(0) scale(1); }
  }
</style>

Заключение

CSS-анимации — это мощный инструмент для создания динамичных и увлекательных веб-интерфейсов. Освоив ключевые кадры, свойства анимации и продвинутые техники, разработчики могут создавать анимации профессионального уровня, которые улучшают взаимодействие с пользователем. Экспериментируйте с различными анимациями, тщательно тестируйте их и придерживайтесь лучших практик для достижения наилучших результатов.

Практика

Какие из следующих утверждений о CSS-анимациях являются верными?

Считаете ли это полезным?

Предпросмотр dual-run — сравните с маршрутами Symfony на продакшене.