Radix UI предоставляет мощный набор компонентов с готовыми, доступными и высоко настраиваемыми интерфейсными элементами. Для создания плавных и эффективных анимаций загрузки используется комбинация встроенных свойств компонентов, CSS-анимаций и возможностей библиотеки для управления состоянием.
В Radix UI нет отдельного компонента «Loader», но для реализации анимации загрузки часто используют следующие элементы:
@radix-ui/react-primitive или собственный
компонент.Пример базового индикатора с использованием Progress:
import * as Progress from '@radix-ui/react-progress';
CSS-анимация индикатора может быть добавлена следующим образом:
.progress-root {
height: 8px;
width: 100%;
background-color: #e0e0e0;
border-radius: 4px;
overflow: hidden;
}
.progress-indicator {
height: 100%;
width: 0;
background-color: #4f46e5;
border-radius: 4px;
transition: width 0.3s ease-in-out;
}
Изменение значения value через состояние React позволяет
плавно анимировать индикатор:
const [progress, setProgress] = React.useState(0);
React.useEffect(() => {
const interval = setInterval(() => {
setProgress(prev => (prev < 100 ? prev + 5 : 100));
}, 500);
return () => clearInterval(interval);
}, []);
Спиннер реализуется с помощью CSS-анимаций и компонента
Primitive:
import { Primitive } from '@radix-ui/react-primitive';
const Spinner = () => (
);
CSS-анимация вращения:
@keyframes spin {
from { transform: rotate(0deg); }
to { transform: rotate(360deg); }
}
.spinner {
width: 40px;
height: 40px;
border: 4px solid #e0e0e0;
border-top-color: #4f46e5;
border-radius: 50%;
animation: spin 1s linear infinite;
}
Radix UI предоставляет удобные свойства для управления состояниями компонентов, что позволяет интегрировать анимации появления и исчезновения:
import * as Dialog from '@radix-ui/react-dialog';
Открыть загрузку
Загрузка данных...
CSS-анимации для Overlay и Content:
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
@keyframes slideUp {
from { transform: translateY(20px); opacity: 0; }
to { transform: translateY(0); opacity: 1; }
}
.dialog-overlay {
background-color: rgba(0,0,0,0.5);
position: fixed;
inset: 0;
animation: fadeIn 0.3s ease-out forwards;
}
.dialog-content {
background: white;
padding: 20px;
border-radius: 8px;
animation: slideUp 0.3s ease-out forwards;
}
Использование анимаций через @radix-ui/react-animations
позволяет синхронизировать их с состояниями компонентов, обеспечивая
более плавный пользовательский опыт.
Для сложных сценариев загрузки часто используют комбинацию индикатора прогресса и спиннера:
Такой подход позволяет одновременно визуализировать неопределённое ожидание (спиннер) и точное состояние загрузки (progress bar).
Radix UI автоматически поддерживает ARIA-атрибуты для компонентов, что делает анимацию загрузки доступной:
aria-valuenow, aria-valuemin,
aria-valuemax для индикатора прогресса.aria-busy и role="status" для уведомлений
о загрузке.Пример индикатора с ARIA:
Radix UI хорошо интегрируется с Tailwind CSS. Анимации можно применять через утилиты:
Tailwind позволяет быстро создавать кастомные ключевые кадры для уникальных эффектов загрузки без написания отдельного CSS-файла.