Как сделать плавный переход через CSS transition?
У меня кнопка при наведении резко меняет цвет — хочу, чтобы плавно. Слышал про transition, но не пойму синтаксис: что и где писать, чтобы анимация была мягкой?
2 ответа
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. Тогда «вход» плавный, а «выход» резкий. Ставьте на базовый селектор.
Если нужно «пульсирование» или повторяющееся движение само по себе (без наведения), transition не подойдёт — он реагирует только на смену состояния. Для зацикленных эффектов берите @keyframes + animation. А transition — это именно про «плавно отреагировать на изменение» (hover, focus, добавление класса через JS).