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

如何通过MUI ThemeProvider修改选中Toggle Button的颜色?

解决MUI 5 ToggleButton选中状态颜色不生效问题

问题说明

使用React、TypeScript及@mui/material 5.11.13开发应用时,尝试通过ThemeProvider修改ToggleButton选中状态的颜色,但选中后按钮仍显示默认的palette.primary.main颜色#1976d2,自定义主题配置未生效。

解决方案

1. 确认ThemeProvider的包裹范围

确保所有使用ToggleButton的组件都被MuiThemeProvider完整包裹,避免嵌套其他ThemeProvider覆盖当前主题配置。

2. 提升自定义样式优先级

MUI默认的.Mui-selected样式优先级较高,可通过以下两种方式解决:

方式一:用!important强制覆盖样式

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

const muiTheme = createTheme({
  palette: {
    primary: {
      main: '#ff0000',
      dark: '#ff0000',
      contrastText: '#000000',
    },
  },
  components: {
    MuiToggleButton: {
      styleOverrides: {
        root: {
          '&.Mui-selected': {
            backgroundColor: '#ff0000 !important',
            color: '#000000 !important',
          },
          '&:hover': {
            backgroundColor: '#ff0000 !important',
            color: '#000000 !important',
          },
        },
      },
    },
  },
});

// 应用主题
<MuiThemeProvider theme={muiTheme}>
  {/* 你的业务组件 */}
</MuiThemeProvider>

方式二:使用MUI官方推荐的variants配置

通过variants直接针对selected: true的属性定义样式,无需!important即可获得更高优先级:

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

const muiTheme = createTheme({
  palette: {
    primary: {
      main: '#ff0000',
      dark: '#ff0000',
      contrastText: '#000000',
    },
  },
  components: {
    MuiToggleButton: {
      variants: [
        {
          props: { selected: true },
          style: {
            backgroundColor: '#ff0000',
            color: '#000000',
            '&:hover': {
              backgroundColor: '#ff0000',
            },
          },
        },
      ],
      styleOverrides: {
        root: {
          '&:hover': {
            backgroundColor: '#ff0000',
            color: '#000000',
          },
        },
      },
    },
  },
});

// 应用主题
<MuiThemeProvider theme={muiTheme}>
  {/* 你的业务组件 */}
</MuiThemeProvider>

3. 检查ToggleButton的color属性

如果ToggleButton设置了color="primary"等颜色属性,需确保主题中对应调色板的颜色已正确修改,或者在样式覆盖中明确覆盖该属性带来的默认样式。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 18:55:21