版本 @material-ui/core v5
在使用 React Material UI 時,版面上有設定了一個 fixed 的元素,但在打開 Modal 後,元素會跟著移動,畫面的移動讓使用者體驗不好
1 | const useStyles = makeStyles((theme) => ({ |
# 錯誤原因
一旦打開模態框,滾動就會被阻止,Material UI 自動在 body 的地方會自動加上 padding-right: 17px;
,讓畫面不隨著卷軸隱藏而移動
但 fixed 定位的元素沒辦法吃到此設定,因此會隨著卷軸隱藏而往右移動
# 如何解決
兩種方法可以避免這個問題
1. Dialog 設定 disableScrollLock
為了不讓 fixed 元素移動,我們不隱藏 Modal 的卷軸
1 | <Dialog |
在 Dialog 設定 disableScrollLock 之後,就不會隱藏卷軸,fixed 元素也就不會隨著移動了
2. fixed 元素加入類別 .mui-fixed
希望卷軸還是可以隱藏,防止與背景互動,也可以在 fixed 元素加上全域的類別 .mui-fixed
1 | <Box className={`${classes.fixedFilter} mui-fixed`}> |
可以發現 Material UI 自動在 fixed 元素上,幫我們再加上了 17px,變成 padding-right: 67px;
(原本已有 50px)
如此一來就大功告成囉!🎉🎉🎉
REFERENCE
Material UI - Why do the fixed positioned elements move when a modal is opened?