Библиотека MUI (Material-UI) предоставляет широкий набор компонентов с предустановленными анимациями, такими как плавные переходы, эффекты появления и исчезновения элементов. Однако в некоторых случаях требуется отключить анимации — например, для повышения производительности на слабых устройствах или для соответствия требованиям доступности (accessibility). MUI предоставляет гибкие механизмы для управления анимациями на уровне приложения, отдельных компонентов и темы.
MUI использует Theme для управления глобальными
настройками. В объекте темы можно указать предпочтения по анимациям,
используя параметр transitions или motion (в
новых версиях MUI). Основной способ отключения анимаций глобально:
import { createTheme, ThemeProvider } from '@mui/material/styles';
const theme = createTheme({
transitions: {
// Отключение всех переходов
duration: {
shortest: 0,
shorter: 0,
short: 0,
standard: 0,
complex: 0,
enteringScreen: 0,
leavingScreen: 0,
},
},
});
function App() {
return (
<ThemeProvider theme={theme}>
{/* Компоненты MUI */}
</ThemeProvider>
);
}
Особенности:
Современные браузеры поддерживают CSS-медиа-запрос
prefers-reduced-motion, который позволяет учитывать
пользовательские настройки системы для минимизации анимаций. MUI
поддерживает эту практику:
import { createTheme, ThemeProvider } from '@mui/material/styles';
const theme = createTheme({
components: {
MuiButton: {
styleOverrides: {
root: {
'@media (prefers-reduced-motion: reduce)': {
transition: 'none',
},
},
},
},
},
});
Ключевые моменты:
prefers-reduced-motion: reduce позволяет
пользователю контролировать анимации через системные настройки.styleOverrides или sx пропсы.Некоторые компоненты MUI имеют собственные анимации, которые можно отключить через свойства:
import Collapse from '@mui/material/Collapse';
<Collapse in={true} timeout={0}>
<div>Контент без анимации</div>
</Collapse>
timeout={0} делает переход мгновенным.import Fade from '@mui/material/Fade';
<Fade in={true} timeout={0}>
<div>Элемент без анимации</div>
</Fade>
timeout={0} полностью отключает эффект
плавного появления/исчезновения.Grow, Zoom и
других компонентов, использующих Transition.import Snackbar from '@mui/material/Snackbar';
<Snackbar
open={true}
TransitionProps={{ timeout: 0 }}
message="Сообщение без анимации"
/>
TransitionProps позволяет передать параметры в
анимационный компонент, управляя временем перехода.sx и styledДля мгновенного отключения анимаций без изменения темы можно
использовать sx или styled:
import { Button } from '@mui/material';
<Button sx={{ transition: 'none' }}>Кнопка без анимации</Button>
prefers-reduced-motion.TransitionProps или полностью заменять
TransitionComponent на React.Fragment.transitions.duration в 0.prefers-reduced-motion для доступности.timeout={0}
или TransitionProps={{ timeout: 0 }}.sx={{ transition: 'none' }} или styled для
локальных случаев.Эти методы позволяют гибко управлять анимациями, сохраняя высокую производительность интерфейсов и соответствие стандартам доступности.