You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MUI5深色模式下Drawer半透明:如何修改抽屉不透明度

解决MUI5深色模式下Drawer组件半透明问题

自MUI5版本起,深色模式下的Drawer组件呈现半透明状态,想要修改Drawer本身(而非背景遮罩)的不透明度,但设置opacity: 1并未生效,尝试的代码如下:

<SwipeableDrawer
  open={props.drawerOpened}
  onClose={props.toggleDrawer(false)}
  onOpen={props.toggleDrawer(true)}
  PaperProps={{
    sx: {
      opacity: 1,
    }
  }}
>

问题原因

MUI5深色模式下Drawer的半透明并非由opacity样式控制,而是Paper组件的backgroundColor属性自带透明度值导致的,所以直接设置opacity不会生效。

解决方案

方案1:直接覆盖背景色

通过PaperProps的sx属性,指定完全不透明的深色背景色,可以使用MUI主题内置的不透明深色值,也可以自定义十六进制颜色:

<SwipeableDrawer
  open={props.drawerOpened}
  onClose={() => props.toggleDrawer(false)}
  onOpen={() => props.toggleDrawer(true)}
  PaperProps={{
    sx: {
      // 使用主题中的不透明深色背景
      backgroundColor: 'background.paper',
      // 或者自定义颜色:backgroundColor: '#121212'
    }
  }}
>
  {/* Drawer内容 */}
</SwipeableDrawer>

方案2:全局主题自定义

如果需要统一修改所有Drawer的深色模式表现,可以在自定义主题中覆盖Paper的样式:

import { createTheme, ThemeProvider } from '@mui/material/styles';

const theme = createTheme({
  palette: {
    mode: 'dark',
  },
  components: {
    MuiDrawer: {
      styleOverrides: {
        paper: {
          backgroundColor: 'background.paper',
        },
      },
    },
  },
});

<ThemeProvider theme={theme}>
  {/* 应用组件 */}
</ThemeProvider>

额外提示

原代码中onClose和onOpen的写法存在问题:直接调用props.toggleDrawer(false)会导致组件渲染时就执行该方法,引发状态异常,需要改为传入函数() => props.toggleDrawer(false)和() => props.toggleDrawer(true)。

内容的提问来源于stack exchange,提问作者Kal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 06:40:25