修复 Material-UI 右侧持久抽屉动画
Fix Material-UI Right Side Persistent Drawer Animation
我有一个相当复杂的应用程序,有多个抽屉。我在使用右侧抽屉动画时遇到问题。抽屉本身动画很好,但父 divs 没有。我尝试将相同的抽屉动画应用到父级 div,但这并没有解决我的问题。我已经在 CodeSandbox 中复制了这个问题。见下文。
我们的具体用例相当复杂,但我认为我们已经设法找到解决办法。本质上,我们必须对 <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)
我有一个相当复杂的应用程序,有多个抽屉。我在使用右侧抽屉动画时遇到问题。抽屉本身动画很好,但父 divs 没有。我尝试将相同的抽屉动画应用到父级 div,但这并没有解决我的问题。我已经在 CodeSandbox 中复制了这个问题。见下文。
我们的具体用例相当复杂,但我认为我们已经设法找到解决办法。本质上,我们必须对 <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)