<MyRusakov.ru />

Профессия Web-разработчик

Профессия Web-разработчик

Этот комплект за 8 месяцев превратит Вас в Web-разработчика с нуля. Учиться достаточно 1 час в день.

Начнёте Вы с HTML, CSS и вёрстки сайтов. Потом перейдёте к программированию и JavaScript. Затем изучите PHP, MySQL, SQL, Python. Изучите Web-фреймворки Laravel и Django. Создадите 5 своих сайтов для портфолио.

Комплект содержит:

- 540 видеоуроков

- 110 часов видео

- 1205 заданий для закрепления материала из уроков

- 5 финальных тестов

- 7 сертификатов

- 12 Бонусных курсов

Подробнее
Подписка

Подпишитесь на мой канал на YouTube, где я регулярно публикую новые видео.

YouTube Подписаться

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Какая тема Вас интересует больше?

CSS transition: плавные анимации при наведении без JavaScript

CSS transition: плавные анимации при наведении без JavaScript

Поисковый запрос CSS transition чаще всего вводят, когда хотят сделать плавную анимацию при наведении: кнопка должна мягко менять цвет, карточка — подниматься, а меню — появляться не резко, а аккуратно. Хорошая новость: для таких эффектов обычно не нужен JavaScript. Достаточно свойства transition.

Что делает CSS transition

transition описывает не само конечное состояние элемента, а то, как браузер должен перейти от старого значения CSS-свойства к новому. Например, обычная кнопка при наведении сразу меняет фон. С transition это изменение растягивается во времени и выглядит плавно.

.button {
  background: #2563eb;
  color: white;
  transition: background 0.25s ease;
}

.button:hover {
  background: #1d4ed8;
}

Здесь браузер плавно изменит background за 0.25s по кривой ease. Без transition цвет изменился бы мгновенно.

Синтаксис transition

Краткая запись выглядит так:

transition: property duration timing-function delay;
  • property — какое свойство анимировать: color, opacity, transform, box-shadow и т.д.
  • duration — длительность перехода: 200ms, 0.3s.
  • timing-function — характер движения: ease, linear, ease-in, ease-out, ease-in-out.
  • delay — задержка перед стартом, используется реже.

Полная запись через отдельные свойства полезна, когда нужно лучше контролировать эффект:

.card {
  transition-property: transform, box-shadow;
  transition-duration: 200ms;
  transition-timing-function: ease-out;
  transition-delay: 0s;
}

Пример 1: кнопка с плавным hover-эффектом

Один из самых частых случаев — кнопка, которая меняет фон и немного приподнимается при наведении.

.btn {
  display: inline-block;
  padding: 12px 20px;
  border-radius: 10px;
  background: #16a34a;
  color: #fff;
  text-decoration: none;
  font-weight: 600;
  transition: background 200ms ease, transform 200ms ease;
}

.btn:hover {
  background: #15803d;
  transform: translateY(-2px);
}

.btn:active {
  transform: translateY(0);
}

Обратите внимание: мы анимируем transform, а не top или margin. Это важная практика: transform обычно работает быстрее и не заставляет браузер заново пересчитывать расположение соседних элементов.

Пример 2: карточка товара или статьи

Для карточек часто используют сочетание transform и box-shadow. Элемент визуально становится интерактивным, но макет страницы не ломается.

.product-card {
  max-width: 320px;
  padding: 20px;
  border-radius: 16px;
  background: #fff;
  box-shadow: 0 4px 14px rgba(0, 0, 0, 0.08);
  transition: transform 220ms ease, box-shadow 220ms ease;
}

.product-card:hover {
  transform: translateY(-6px);
  box-shadow: 0 14px 30px rgba(0, 0, 0, 0.14);
}

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

Пример 3: плавное появление элемента

Новички часто пытаются анимировать display: none и display: block, но это не работает: display не имеет промежуточных состояний. Вместо этого используйте opacity и при необходимости visibility.

.tooltip {
  opacity: 0;
  visibility: hidden;
  transform: translateY(6px);
  transition: opacity 180ms ease, transform 180ms ease, visibility 180ms ease;
}

.tooltip-wrapper:hover .tooltip {
  opacity: 1;
  visibility: visible;
  transform: translateY(0);
}

В этом примере подсказка не просто появляется, а слегка выезжает снизу. Такой приём выглядит аккуратно и не требует скриптов.

Какие CSS-свойства лучше анимировать

Не все свойства одинаково хорошо подходят для плавных переходов. Для производительности чаще выбирают:

  • transform — перемещение, масштабирование, поворот;
  • opacity — прозрачность;
  • color и background-color — цвета текста и фона;
  • box-shadow — тень, но без чрезмерно тяжёлых значений.

С осторожностью анимируйте width, height, margin, padding, left, top. Они могут вызывать перерасчёт layout, особенно если элементов много.

transition: all — удобно, но не всегда правильно

Иногда пишут так:

.box {
  transition: all 0.3s ease;
}

Это быстро, но в больших проектах может привести к неожиданным эффектам: начнёт плавно меняться то, что вы не планировали анимировать. Лучше явно указывать свойства:

.box {
  transition: transform 0.3s ease, opacity 0.3s ease;
}

Не забывайте про :focus

Hover работает для мыши, но пользователи клавиатуры перемещаются по странице через Tab. Поэтому интерактивные элементы стоит оформлять не только через :hover, но и через :focus-visible.

.link {
  color: #2563eb;
  transition: color 180ms ease, outline-color 180ms ease;
}

.link:hover {
  color: #1e40af;
}

.link:focus-visible {
  outline: 3px solid #93c5fd;
  outline-offset: 3px;
}

Уважайте настройки пользователя

Некоторые пользователи отключают лишние анимации в системе. В CSS это можно учесть через медиавыражение prefers-reduced-motion.

@media (prefers-reduced-motion: reduce) {
  * {
    transition-duration: 0.01ms !important;
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
  }
}

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

Типичные ошибки новичков

  • Ставить transition только в :hover. Лучше задавать transition базовому классу, чтобы плавным был и вход, и выход из состояния.
  • Анимировать display. Используйте opacity, visibility, transform.
  • Делать слишком долгие эффекты. Для интерфейса обычно хватает 150–300ms.
  • Использовать all везде. Явно перечисляйте свойства, чтобы избежать сюрпризов.
  • Забывать про mobile. На сенсорных устройствах hover работает иначе, поэтому важные действия не должны зависеть только от наведения.

Итог

CSS transition — базовый, но очень полезный инструмент. Он помогает делать плавные hover-эффекты, аккуратные карточки, подсказки, кнопки и ссылки без JavaScript. Главное — анимировать подходящие свойства, не злоупотреблять transition: all, помнить про доступность и использовать анимации там, где они помогают пользователю, а не отвлекают его.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (https://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: https://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: https://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

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

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (0):

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.