Lala的前端大補帖

歡迎一起鑽研前端技術😊

0%

Solved-React Material UI Modal fixed move-解決fixed元素移動

React Material UI Modal

版本 @material-ui/core v5

在使用 React Material UI 時,版面上有設定了一個 fixed 的元素,但在打開 Modal 後,元素會跟著移動,畫面的移動讓使用者體驗不好

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
const useStyles = makeStyles((theme) => ({
fixedFilter: {
position: 'fixed',
top: 42,
left: 0,
paddingRight: '50px',
},
}));

function App() {
const classes = useStyles();

<Box className={classes.fixedFilter}>
// 省略程式碼
</Box>
}

export default App;


# 錯誤原因

一旦打開模態框,滾動就會被阻止,Material UI 自動在 body 的地方會自動加上 padding-right: 17px;,讓畫面不隨著卷軸隱藏而移動
React Material UI Modal

但 fixed 定位的元素沒辦法吃到此設定,因此會隨著卷軸隱藏而往右移動



# 如何解決

兩種方法可以避免這個問題

1. Dialog 設定 disableScrollLock

為了不讓 fixed 元素移動,我們不隱藏 Modal 的卷軸

1
2
3
4
5
<Dialog
disableScrollLock
>
// 省略程式碼
</Dialog>

在 Dialog 設定 disableScrollLock 之後,就不會隱藏卷軸,fixed 元素也就不會隨著移動了



2. fixed 元素加入類別 .mui-fixed

希望卷軸還是可以隱藏,防止與背景互動,也可以在 fixed 元素加上全域的類別 .mui-fixed

1
2
3
<Box className={`${classes.fixedFilter} mui-fixed`}>
// 省略程式碼
</Box>

可以發現 Material UI 自動在 fixed 元素上,幫我們再加上了 17px,變成 padding-right: 67px; (原本已有 50px)
React Material UI Modal

如此一來就大功告成囉!🎉🎉🎉



REFERENCE

Material UI - Why do the fixed positioned elements move when a modal is opened?



🚀線上課程分享

線上課程可以加速學習的時間,省去了不少看文件的時間XD,以下是我推薦的一些課程
想學習更多關於前後端的線上課程,可以參考看看。

Hahow

Hahow 有各式各樣類型的課程,而且是無限次數觀看,對學生或上班族而言,不用擔心被時間綁住



六角學院

如果你是初學者,非常推薦六角學院哦!
剛開始轉職也是上了六角的課,非常的淺顯易懂,最重要的是,隨時還有線上的助教幫你解決問題!


Udemy

Udemy 裡的課程非常的多,品質普遍不錯,且價格都滿實惠的,CP值很高!
也是很多工程師推薦的線上課程網站。
❤️