Создайте CSS3-анимации с использованием функций тайминга

CSSCSSBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

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

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

Настройка HTML-проекта и базового стилирования

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

Во - первых, перейдите в директорию проекта:

cd ~/project

Создайте новую директорию для нашего проекта по CSS-анимациям:

mkdir css-transitions
cd css-transitions

Теперь создадим файлы проекта с использованием WebIDE. Создайте файл index.html:

<!doctype html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>CSS3 Transitions</title>
    <link rel="stylesheet" href="styles.css" />
  </head>
  <body>
    <div class="container">
      <div class="box">Hover Me</div>
    </div>
  </body>
</html>

Далее создайте файл styles.css с некоторым базовым стилированием:

body {
  font-family: Arial, sans-serif;
  display: flex;
  justify-content: center;
  align-items: center;
  height: 100vh;
  margin: 0;
  background-color: #f0f0f0;
}

.container {
  text-align: center;
}

.box {
  width: 200px;
  height: 100px;
  background-color: #3498db;
  color: white;
  display: flex;
  justify-content: center;
  align-items: center;
  border-radius: 10px;
  cursor: pointer;
}

Проверим, были ли файлы созданы правильно:

ls

Пример вывода:

index.html  styles.css

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

Реализация базового перехода при наведении

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

Откройте файл styles.css в WebIDE и измените класс .box, чтобы добавить анимацию при наведении:

.box {
  width: 200px;
  height: 100px;
  background-color: #3498db;
  color: white;
  display: flex;
  justify-content: center;
  align-items: center;
  border-radius: 10px;
  cursor: pointer;

  /* Добавьте свойство перехода */
  transition: background-color 0.5s ease;
}

.box:hover {
  background-color: #2980b9;
}

Рассмотрим свойства перехода:

  • transition: background-color 0.5s ease;
    • background-color: Свойство, которое меняется
    • 0.5s: Продолжительность перехода (полсекунды)
    • ease: Функция тайминга (гладкое начало и конец)

Теперь добавим анимацию масштабирования, чтобы сделать эффект более интересным:

.box {
  width: 200px;
  height: 100px;
  background-color: #3498db;
  color: white;
  display: flex;
  justify-content: center;
  align-items: center;
  border-radius: 10px;
  cursor: pointer;

  /* Несколько свойств перехода */
  transition:
    background-color 0.5s ease,
    transform 0.3s ease;
}

.box:hover {
  background-color: #2980b9;
  transform: scale(1.1);
}

Сохраните файл и откройте index.html в веб-браузере. При наведении на коробку вы увидите:

  1. Цвет фона гладко меняется
  2. Коробка немного увеличивается в размере
  3. Переход происходит гладко за указанный период времени

Пример того, что вы увидите:

  • До наведения: Синяя коробка с нормальным размером
  • При наведении: Немного темнее синяя, немного большая коробка
  • Переход гладкий и постепенный

Исследование свойств и синтаксиса перехода

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

Обновите файл styles.css, чтобы исследовать разные свойства перехода:

.container {
  display: flex;
  justify-content: center;
  align-items: center;
  height: 100vh;
  gap: 20px;
}

.box {
  width: 100px;
  height: 100px;
  background-color: #3498db;
  display: flex;
  justify-content: center;
  align-items: center;
  color: white;
  cursor: pointer;

  /* Полный синтаксис перехода */
  transition-property: background-color, transform, border-radius;
  transition-duration: 0.5s, 0.3s, 0.4s;
  transition-timing-function: ease-in-out, linear, ease;
  transition-delay: 0s, 0.1s, 0s;
}

.box:hover {
  background-color: #2980b9;
  transform: scale(1.2) rotate(15deg);
  border-radius: 50%;
}

Рассмотрим свойства перехода:

  1. transition-property: Указывает, какие CSS-свойства будут анимироваться

    • Может быть несколько свойств, разделенных запятыми
    • all можно использовать, чтобы анимировать все изменяемые свойства
  2. transition-duration: Задает время, которое займет переход

    • Может быть разной продолжительностью для разных свойств
    • Указывается в секундах (s) или миллисекундах (ms)
  3. transition-timing-function: Управляет кривой скорости перехода

    • linear: Константная скорость
    • ease-in: Начинается медленно, ускоряется
    • ease-out: Начинается быстро, замедляется
    • ease-in-out: Медленное начало и конец
  4. transition-delay: Добавляет задержку перед началом перехода

    • Полезно для создания последовательных или ступенчатых эффектов

Вместо этого можно использовать сокращенное свойство transition:

.box {
  transition:
    background-color 0.5s ease-in-out,
    transform 0.3s linear 0.1s,
    border-radius 0.4s ease;
}

Обновите index.html, чтобы включить несколько коробок для демонстрации:

<body>
  <div class="container">
    <div class="box">Box 1</div>
    <div class="box">Box 2</div>
    <div class="box">Box 3</div>
  </div>
</body>

При наведении на коробки вы увидите:

  • Разные свойства перехода
  • Разные тайминги и задержки
  • Несколько преобразований, происходящих одновременно

Экспериментируем с разными функциями тайминга

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

Обновите index.html, чтобы включить несколько коробок для демонстрации различных функций тайминга:

<body>
  <div class="container">
    <div class="box linear">Linear</div>
    <div class="box ease">Ease</div>
    <div class="box ease-in">Ease In</div>
    <div class="box ease-out">Ease Out</div>
    <div class="box ease-in-out">Ease In-Out</div>
  </div>
</body>

Измените styles.css, чтобы показать разные функции тайминга:

.container {
  display: flex;
  justify-content: center;
  align-items: center;
  height: 100vh;
  gap: 20px;
  flex-wrap: wrap;
}

.box {
  width: 100px;
  height: 100px;
  background-color: #3498db;
  color: white;
  display: flex;
  justify-content: center;
  align-items: center;
  cursor: pointer;
}

/* Функция тайминга Linear */
.linear {
  transition: transform 2s linear;
}
.linear:hover {
  transform: translateX(200px);
}

/* Функция тайминга Ease (по умолчанию) */
.ease {
  transition: transform 2s ease;
}
.ease:hover {
  transform: translateX(200px);
}

/* Функция тайминга Ease-In */
.ease-in {
  transition: transform 2s ease-in;
}
.ease-in:hover {
  transform: translateX(200px);
}

/* Функция тайминга Ease-Out */
.ease-out {
  transition: transform 2s ease-out;
}
.ease-out:hover {
  transform: translateX(200px);
}

/* Функция тайминга Ease-In-Out */
.ease-in-out {
  transition: transform 2s ease-in-out;
}
.ease-in-out:hover {
  transform: translateX(200px);
}

Характеристики функций тайминга:

  • linear: Константная скорость от начала до конца
  • ease: Медленное начало, быстрый середина, медленное окончание (по умолчанию)
  • ease-in: Начинается медленно, ускоряется к концу
  • ease-out: Начинается быстро, замедляется к концу
  • ease-in-out: Медленное начало и окончание, быстрее в середине

Вы также можете использовать пользовательские функции cubic-bezier для более точного управления:

.custom-timing {
  transition: transform 2s cubic-bezier(0.25, 0.1, 0.25, 1);
}

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

Создаем продвинутую анимацию перехода

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

Обновите index.html, чтобы включить более интерактивный элемент:

<body>
  <div class="container">
    <div class="card">
      <div class="card-front">Hover Me</div>
      <div class="card-back">Advanced Transition!</div>
    </div>
  </div>
</body>

Измените styles.css, чтобы создать переворачивающуюся карточку с продвинутыми переходами:

body {
  display: flex;
  justify-content: center;
  align-items: center;
  height: 100vh;
  background-color: #f0f0f0;
  font-family: Arial, sans-serif;
}

.card {
  width: 300px;
  height: 200px;
  position: relative;
  perspective: 1000px;
}

.card-front,
.card-back {
  position: absolute;
  width: 100%;
  height: 100%;
  backface-visibility: hidden;
  display: flex;
  justify-content: center;
  align-items: center;
  border-radius: 10px;
  transition:
    transform 0.8s cubic-bezier(0.25, 0.1, 0.25, 1),
    background-color 0.5s ease,
    box-shadow 0.5s ease;
}

.card-front {
  background-color: #3498db;
  color: white;
  transform: rotateY(0deg);
}

.card-back {
  background-color: #2ecc71;
  color: white;
  transform: rotateY(180deg);
}

.card:hover.card-front {
  transform: rotateY(180deg);
  background-color: #2980b9;
  box-shadow: 0 10px 20px rgba(0, 0, 0, 0.2);
}

.card:hover.card-back {
  transform: rotateY(0deg);
  background-color: #27ae60;
  box-shadow: 0 10px 20px rgba(0, 0, 0, 0.2);
}

Основные продвинутые методы CSS-анимации:

  1. 3D-rotation с использованием rotateY
  2. perspective для 3D-эффекта
  3. backface-visibility для скрытия задней стороны элементов
  4. Несколько анимируемых свойств
  5. Пользовательская функция тайминга cubic-bezier
  6. Преобразования в состоянии наведения
  7. Переходы цвета и тени

Анимация демонстрирует:

  • гладкую 3D-анимацию переворота карточки
  • изменение цвета при наведении
  • эффект тени
  • сложный тайминг и анимацию нескольких свойств

При наведении на карточку:

  • передняя сторона вращается и меняется цветом
  • задняя сторона становится видимой
  • гладкий переход нескольких свойств

Резюме

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

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