如何更改Material-ui单选按钮选中的颜色?

Emi*_*ter 2 javascript radio-button reactjs material-ui

color道具只能接受三个值(默认值,主要值,次要值),但是如果我想让收音机为绿色怎么办?

所以我尝试用classesprop 覆盖如下:

const styles = theme => ({
  radio: {
    colorPrimary: {
    '&$checked': {
      color: 'blue'
    }
  },
  checked: {},
  } 
})
Run Code Online (Sandbox Code Playgroud)

然后在组件内部:

<FormControlLabel
   classes={{root: classes.formControlLabelRoot, label: classes.formControlLabel}}
   value="week"
   control={<Radio disableRipple classes={{colorPrimary: classes.radio}} />}
   label="Every week (Monday at 12:00)"
/>
Run Code Online (Sandbox Code Playgroud)

但这是行不通的。

Nea*_*arl 10

您可以使用MUI v5sx中的 prop来设置选中和取消选中状态的样式,如下所示:

<Radio
  {...props}
  sx={{
    '&, &.Mui-checked': {
      color: 'magenta',
    },
  }}
/>
Run Code Online (Sandbox Code Playgroud)

如果您想在colorprop 中使用自定义颜色,您可以在以下位置扩展调色板createTheme()

const { palette } = createTheme();
const theme = createTheme({
  palette: {
    pinky: palette.augmentColor({ color: pink }),
    summer: palette.augmentColor({ color: yellow }),
  },
});
Run Code Online (Sandbox Code Playgroud)

然后在您的组件中像这样使用它:

{/* pre-defined color */}
<Radio {...props} />
<Radio {...props} color="secondary" />
<Radio {...props} color="success" />
<Radio {...props} color="default" />
{/* custom color */}
<Radio {...props} color="pinky" />
<Radio {...props} color="summer" />
Run Code Online (Sandbox Code Playgroud)

现场演示

Codesandbox 演示

相关答案


mos*_*rad 8

我认为您需要使用colorSecondary类键而不是 colorPrimary 因为单选按钮的默认颜色为次要

您还可以使用根组件中的createMuiThemeMuiThemeProvider组件覆盖主要和次要颜色以及默认颜色的默认值,您可以

import React from 'react';
import { MuiThemeProvider, createMuiTheme } from '@material-ui/core/styles';
import purple from '@material-ui/core/colors/purple';
import Button from '@material-ui/core/Button';

const theme = createMuiTheme({
  palette: {
    primary: { main: purple[500] }, // Purple and green play nicely together.
    secondary: { main: '#11cb5f' }, // This is just green.A700 as hex.
  },
});

function App() {
  return (
    <MuiThemeProvider theme={theme}>
      <div>
        <Button color="primary">Primary</Button>
        <Button color="secondary">Secondary</Button>
      </div>
    </MuiThemeProvider>
  );
}

export default App;
Run Code Online (Sandbox Code Playgroud)

正如你在下面的例子中看到的,你只需用MuiThemeProvider包裹你的组件, 现在每个组件都会有新的主要和次要颜色

检查从原材料的UI网站此链接以获取更多信息 的主题


Emi*_*ter 8

找到了解决方案:

const styles = theme => ({
  radio: {
    '&$checked': {
      color: '#4B8DF8'
    }
  },
  checked: {}
})
Run Code Online (Sandbox Code Playgroud)

在组件内部:

<FormControlLabel
  classes={{root: classes.formControlLabelRoot, label: classes.formControlLabel}}
  value="day"
  control={
    <Radio
      disableRipple
      classes={{root: classes.radio, checked: classes.checked}}
    />
  }
  label="Every Day (at 12:00)"
/>
Run Code Online (Sandbox Code Playgroud)

您必须拥有root钥匙。

  • 可能只是我很傻,但对于其他遇到此问题的人来说……$ checked是对下面定义的本地规则“ checked:{}”的反向引用。因此,如果将`checked`键说成`radioChecked`,则上面的规则必须反映出那个即`&$ radioChecked:... (2认同)

Kev*_*rth 8

对于整个项目范围的主题,我有一个不同的解决方案。

const theme = {
  overrides: {
    MuiRadio: {
      root: {
        color: 'green',
      },
      colorSecondary: {
        '&$checked': {
          color: 'green',
        },
      },
    },
  },
},

const muiTheme = createMuiTheme(theme)

<ThemeProvider theme={muiTheme}>
  // rest of app goes here
</ThemeProvider>
Run Code Online (Sandbox Code Playgroud)

这样,应用程序中的所有 Material-UI Radio 元素都有一个绿色的外圈,并且在选中时内部也是一个绿色的圆圈。