Привет, друзья! Сегодня поговорим о том, как сделать ваш сайт более живым и интерактивным с помощью микро-анимаций. Это те самые маленькие, почти незаметные движения, которые делают ваш сайт более дружелюбным и приятным для пользователей.
Представьте, что вы нажимаете на кнопку, и она слегка пружинит, или наводите курсор на картинку, и она плавно увеличивается. Вот это и есть микро-анимации! Они как специи в блюде – их не должно быть много, но они делают опыт намного вкуснее. 😋
css
Copy
/* Простая анимация при наведении */
.button {
transition: transform 0.2s ease;
}
.button:hover {
transform: scale(1.05);
}
/* Более сложная анимация с тенью */
.button-advanced {
transition: all 0.3s ease;
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
}
.button-advanced:hover {
transform: translateY(-2px);
box-shadow: 0 4px 8px rgba(0,0,0,0.2);
}
css
Copy
/* Анимация иконки меню */
.menu-icon {
transition: transform 0.3s ease;
}
.menu-icon:hover {
transform: rotate(90deg);
}
css
Copy
/* Анимация поля ввода */
.input-field {
border-bottom: 2px solid #ddd;
transition: border-color 0.3s ease;
}
.input-field:focus {
border-color: #2196F3;
animation: bounce 0.3s ease;
}
@keyframes bounce {
0% { transform: translateY(0); }
50% { transform: translateY(-5px); }
100% { transform: translateY(0); }
}
css
Copy
/* Пример правильных тайминов */
.quick-action {
transition: all 0.15s ease;
}
.medium-transition {
transition: all 0.25s ease;
}
.complex-animation {
transition: all 0.4s ease-in-out;
}
Используйте правильные функции плавности (easing functions):
css
Copy
/* Различные варианты плавности */
.smooth-linear {
transition: all 0.3s linear;
}
.smooth-ease {
transition: all 0.3s ease;
}
.smooth-ease-in-out {
transition: all 0.3s ease-in-out;
}
.smooth-cubic-bezier {
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}
css
Copy
/* Хорошо - использует GPU */
.good-performance {
transform: translateX(0);
opacity: 1;
transition: all 0.3s ease;
}
/* Плохо - нагружает CPU */
.bad-performance {
left: 0;
display: block;
transition: all 0.3s ease;
}
css
Copy
/* Правильно */
.optimized {
transition: transform 0.3s ease, opacity 0.3s ease;
}
/* Неправильно */
.not-optimized {
transition: all 0.3s ease; /* Анимирует все свойства */
}
css
Copy
.pulse-button {
animation: pulse 2s infinite;
}
@keyframes pulse {
0% {
transform: scale(1);
box-shadow: 0 0 0 0 rgba(0,123,255,0.4);
}
70% {
transform: scale(1.05);
box-shadow: 0 0 0 10px rgba(0,123,255,0);
}
100% {
transform: scale(1);
box-shadow: 0 0 0 0 rgba(0,123,255,0);
}
}
css
Copy
.loader {
width: 40px;
height: 40px;
border: 4px solid #f3f3f3;
border-top: 4px solid #3498db;
border-radius: 50%;
animation: spin 1s linear infinite;
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
✅ Длительность не превышает 500мс ✅ Используются transform и opacity ✅ Анимации реагируют на действия пользователя ✅ Не мешают основному взаимодействию ✅ Работают плавно на мобильных устройствах
Целевые показатели:
css
Copy
.important-animation {
will-change: transform, opacity;
}
css
Copy
@media (prefers-reduced-motion: reduce) {
* {
animation: none !important;
transition: none !important;
}
}
javascript
Copy
// Проверка производительности устройства
if ('deviceMemory' in navigator) {
if (navigator.deviceMemory > 4) {
// Включаем сложные анимации
document.body.classList.add('enable-animations');
}
}
Помните главное правило микро-анимаций: они должны улучшать пользовательский опыт, а не мешать ему. Начните с малого, тестируйте на разных устройствах и постепенно добавляйте новые элементы.
Полезные ресурсы:
Удачи в создании живых и отзывчивых интерфейсов! 🚀