CSS

Переходы

CSS transitions: property, duration, timing-function, delay и плавные анимации.

Средний (Intermediate)

Кратко

CSS transitions — плавное изменение свойств при смене состояния. transition: property duration timing-function delay. Например: transition: background 0.3s ease — фон плавно меняется за 0.3 секунды. Переходы работают при hover, focus, class change и других триггерах.


Подробно

Синтаксис: transition: property duration timing-function delay;

property: какое свойство анимировать

  • all — все свойства (осторожно!)
  • background — только фон
  • transform — трансформации
  • opacity — прозрачность

duration: как долго

  • 0.3s — 0.3 секунды
  • 300ms — 300 миллисекунд

timing-function: скорость

  • ease (по умолчанию) — медленно в начале и конце
  • linear — равномерно
  • ease-in — разгон
  • ease-out — торможение
  • ease-in-out — разгон + торможение
  • cubic-bezier(x1,y1,x2,y2) — кастомная кривая

delay: задержка перед началом

  • 0s — без задержки
  • 0.5s — полсекунды задержки

Свойства, которые анимируются:

  • background, color, border-color
  • opacity, box-shadow
  • transform (rotate, scale, translate)
  • width, height (осторожно!)
  • margin, padding (осторожно!)

НЕ анимируются:

  • font-family (не анимируется плавно)
  • display (переключение без анимации)
  • position

Ментальная модель

Transition — как плавный переход в фильме. Не «было так → стало так», а «плавно превратилось из одного в другое». Duration — длительность перехода. Timing — стиль (резко, плавно, с задержкой).


Примеры

**Самый простой:**

css
button {
  background: #3498db;
  transition: background 0.3s ease;
}

button:hover {
  background: #2980b9;
}

Простейший transition: плавная смена фона при hover.

**Простой:**

css
/* Кнопка с transition */
.btn {
  padding: 0.75rem 1.5rem;
  border: 2px solid #3498db;
  background: transparent;
  color: #3498db;
  border-radius: 6px;
  transition: all 0.3s ease;
}

.btn:hover {
  background: #3498db;
  color: white;
  transform: translateY(-2px);
  box-shadow: 0 4px 12px rgba(52,152,219,0.4);
}

/* Карточка */
.card {
  transition: transform 0.3s ease, box-shadow 0.3s ease;
}

.card:hover {
  transform: translateY(-4px);
  box-shadow: 0 8px 25px rgba(0,0,0,0.15);
}

/* Задержка */
.nav-item {
  transition: color 0.2s ease 0.1s; /* 0.1s задержка */
}

Кнопка с hover-эффектом, карточка с тенью, задержка.

**Реальный пример:**

css
/* Меню-гамбургер */
.hamburger {
  width: 30px;
  height: 20px;
  position: relative;
}

.hamburger span {
  display: block;
  position: absolute;
  width: 100%;
  height: 2px;
  background: #333;
  transition: all 0.3s ease;
}

.hamburger span:nth-child(1) { top: 0; }
.hamburger span:nth-child(2) { top: 9px; }
.hamburger span:nth-child(3) { top: 18px; }

.hamburger.active span:nth-child(1) {
  top: 9px;
  transform: rotate(45deg);
}

.hamburger.active span:nth-child(2) {
  opacity: 0;
}

.hamburger.active span:nth-child(3) {
  top: 9px;
  transform: rotate(-45deg);
}

/* Подсветка меню */
.nav-link {
  position: relative;
}

.nav-link::after {
  content: "";
  position: absolute;
  bottom: -2px;
  left: 0;
  width: 0;
  height: 2px;
  background: var(--primary);
  transition: width 0.3s ease;
}

.nav-link:hover::after {
  width: 100%;
}

Гамбургер-меню и подсветка ссылки — анимация через transition.


Частые ошибки

**Неправильно:** Использовать transition: all

**Почему:** all анимирует ВСЕ свойства — включая ненужные (font-family, z-index). Медленно и неэффективно.

**Правильно:** Указывайте конкретные свойства: transition: background 0.3s, transform 0.3s.

**Неправильно:** Анимировать width/height

**Почему:** Анимация width/height вызывает reflow (пересчёт layout) — это медленно.

**Правильно:** Для анимации размеров используйте transform: scale(). Для скрытия — max-height.

**Неправильно:** Забывать will-change

**Почему:** Для сложных анимаций can использовать will-change: transform для оптимизации.

**Правильно:** will-change: transform; — подсказка браузеру подготовиться к анимации.


Важно запомнить

  • transition: property duration timing delay
  • ease — по умолчанию (разгон + торможение)
  • Анимируйте transform, opacity (быстро), не width/height (медленно)
  • transition: all — антипаттерн, указывайте конкретные свойства
  • Задержка: transition-delay для каскадных эффектов

Связь

Назад: Вы знаете адаптивный дизайн (C20) — переходы добавляют отполированность вашему адаптивному интерфейсу.

Вперёд: В следующем уроке (C22) вы изучите CSS-функции: calc(), min(), max(), clamp().

Материалы курса CSS — PROlab Academy.