← Все вопросы

Как сделать плавный переход через CSS transition?

Задан 23 месяца назад573 просмотров2 ответа
8

У меня кнопка при наведении резко меняет цвет — хочу, чтобы плавно. Слышал про transition, но не пойму синтаксис: что и где писать, чтобы анимация была мягкой?

2 ответа

13
✓ Принятый ответ — помог автору

transition делает изменение свойства плавным во времени вместо мгновенного. Пишется он на исходном состоянии элемента, а не на :hover.

.btn {
  background: #4f46e5;
  transition: background 0.3s ease;
}
.btn:hover {
  background: #4338ca; /* плавно перетечёт за 0.3s */
}

Синтаксис: свойство — длительность — функция времени — задержка.

  • background — что анимировать (или all — всё, но это менее производительно);
  • 0.3s — сколько длится;
  • ease — характер (linear, ease-in, ease-out, ease-in-out);
  • (необязательно) задержка перед стартом.

Можно перечислить несколько переходов через запятую:

transition: background 0.3s ease, transform 0.2s ease;

Важные моменты:

  • анимируются не все свойства: плавно меняются числовые (цвет, размеры, opacity, transform). А вот display: none ↔ block переключается мгновенно — для появления/скрытия анимируйте opacity и visibility.
  • ради плавности (60 fps) предпочитайте transform и opacity — они не вызывают перерасчёт раскладки, в отличие от анимации width/top.

Частая ошибка — повесить transition на :hover. Тогда «вход» плавный, а «выход» резкий. Ставьте на базовый селектор.

4

Если нужно «пульсирование» или повторяющееся движение само по себе (без наведения), transition не подойдёт — он реагирует только на смену состояния. Для зацикленных эффектов берите @keyframes + animation. А transition — это именно про «плавно отреагировать на изменение» (hover, focus, добавление класса через JS).

Ваш ответ

, чтобы ответить на вопрос.