从主题 (MUI v4.1.X) 覆盖 .Mui-disabled(或其他伪类/状态)

jbg*_*arr 8 javascript reactjs material-ui

我想.Mui-disabled从我的主题覆盖中覆盖全局CSS 规则。我可以为这样的特定组件执行此操作(在 Material-UI v4.1.x 中):

MuiTheme['overrides'] = {
  ...
  MuiMenuItem: {
    root: {
      ...root level overrides,
      '&.$Mui-disabled': {
        backgroundColor: 'inherit'
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我想避免将其添加到每个不同组件的需要,而只需覆盖.Mui-disabled一次类规则。基本上我不希望所有禁用的项目都具有默认的灰色背景。有没有一种简单的方法可以从主题中做到这一点?

感谢您的任何见解!

jap*_*ott 10

我正在努力弄清楚如何自己重写伪类。我发现有两种方法;

全局定义您的自定义主题时;

export const CKWTheme = createMuiTheme({
    overrides: {
        MuiCssBaseline: {
            '@global': {
                //override the pseudo-classes
                '.Mui-disabled': { opacity: .5 }
                '.Mui-selected': { background: 'red' }
            }
        }
    },
});
Run Code Online (Sandbox Code Playgroud)

很多时候并没有帮助,因为它们应用得更特定于 css。在这种情况下,您可以在定义组件样式时覆盖它们;

const useStyles = makeStyles((theme: Theme) =>
    createStyles({
        root: {
            borderRadius: theme.shape.borderRadius,
            '&.Mui-disabled': {
                color: theme.palette.primary.main,
                opacity: 0.5,
            },
            '&.Mui-disabled:hover': { background:theme.palette.secondary.main },
        }
    }),
);
Run Code Online (Sandbox Code Playgroud)