Fix Material-UI Правая сторона Персональная анимация ящика
У меня довольно сложное приложение с несколькими ящиками. У меня проблема с анимацией на правой стороне ящика. Сами ящики прекрасно анимируются, а родительские div - нет. Я попытался применить ту же анимацию для ящика к родительскому элементу div, и это не решило мою проблему. Я повторил проблему в CodeSandbox. Увидеть ниже.
2 ответа
Наш конкретный вариант использования довольно сложный, но я думаю, что нам удалось найти решение. По сути, мы должны были применить переход к <main>
элемент и установить его поля на основе состояния правой панели инструментов. Увидеть ниже.
main: {
position: 'relative',
flex: 1,
height: '100%',
overflow: 'hidden',
transition: theme.transitions.create('margin', {
easing: theme.transitions.easing.easeOut,
duration: theme.transitions.duration.enteringScreen,
}),
marginRight: -500,
},
mainRightOpen: {
transition: theme.transitions.create('margin', {
easing: theme.transitions.easing.easeOut,
duration: theme.transitions.duration.enteringScreen,
}),
marginRight: 0,
}
и реализовано так...
<main
className={`${classes.main}
${this.props.rightToolBarOpen ? classes.mainRightOpen : null}
`}
ref={(mainContent) => { this.mainContent = mainContent; }}
>
Кроме того, если вам не нужно фиксированное значение маржи, вы можете использовать процент для управления маржой, например:
// define the drawerWidth
const drawerWidth = 33.33333;
// put margin value as a string format like below:
content: {
flexGrow: 1,
padding: theme.spacing(6),
transition: theme.transitions.create('margin', {
easing: theme.transitions.easing.sharp,
duration: theme.transitions.duration.leavingScreen,
}),
marginRight: `${-drawerWidth}%`,
},
contentShift: {
transition: theme.transitions.create('margin', {
easing: theme.transitions.easing.easeOut,
duration: theme.transitions.duration.enteringScreen,
}),
marginRight: 0,
},
Приведенное выше решение работает со мной (версия Material-UI, которую я использую: v4.12.1)