从material-ui设置snackbar元素的颜色

jss*_*sql 10 background-color reactjs material-ui

我正在使用材料-ui的snackbar组件.目前,小吃店显示为黑色.你知道我怎么改变颜色吗?背景颜色仅改变快餐栏所在的整个div的颜色.它不会改变小吃店的颜色.

Emi*_*Emi 22

随着物质的UI 1.0,你应该覆盖从SnackbarContent组件根CSS类道具ContentProps.

这是一个例子:

const styles = {
    root: {
        background: 'red'
    }
};

class MySnackbar extends Component {
    render() {
        const { classes } = this.props;
        return (
            <Snackbar
                ContentProps={{
                    classes: {
                        root: classes.root
                    }
                }}
                message={<span>Some message</span>}
            />
        );
    }
}

export default withStyles(styles)(MySnackbar);
Run Code Online (Sandbox Code Playgroud)


Nic*_*ert 10

在当前的 material-ui 版本 (4.3.0) 中,有一种比ContentProps方法更简单的方法。message您可以使用SnackbarContentas child代替属性并简单地调用style={}

<Snackbar
  open={this.state.showSnackbar}
  autoHideDuration={3000}
  onClose={() => {this.setState({showSnackbar: false})}}
>
  <SnackbarContent style={{
      backgroundColor:'teal',
    }}
    message={<span id="client-snackbar">Hello World</span>}
  />
</Snackbar>
Run Code Online (Sandbox Code Playgroud)


Nea*_*arl 7

the 的根组件Snackbar只关心正确定位自身,如果你想改变物理的外观Snackbar,你需要定位SnackbarContentviaContentProps道具。在 v5 中,您可以使用sx轻松做到这一点:

<Snackbar
  ContentProps={{
    sx: {
      background: "red"
    }
  }}
Run Code Online (Sandbox Code Playgroud)

另一种方法是为您创建自定义变体Snackbar

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

const theme = createTheme({
  components: {
    MuiSnackbar: {
      variants: [
        {
          props: { variant: "trouble" },
          style: {
            "& .MuiSnackbarContent-root": {
              background: "orange"
            }
          }
        },
        {
          props: { variant: "bigTrouble" },
          style: {
            "& .MuiSnackbarContent-root": {
              background: "red"
            }
          }
        }
      ]
    }
  }
});
Run Code Online (Sandbox Code Playgroud)
<Snackbar variant="bigTrouble"
Run Code Online (Sandbox Code Playgroud)

要与 typescript 一起使用,您还需要更新 的 prop 类型Snackbar

declare module "@mui/material/Snackbar" {
  interface SnackbarProps {
    variant: "trouble" | "bigTrouble";
  }
}
Run Code Online (Sandbox Code Playgroud)

Codesandbox 演示


Kri*_*ekk 4

您必须设置bodyStyle属性:

<Snackbar bodyStyle={{ backgroundColor: 'teal', color: 'coral' }} />
Run Code Online (Sandbox Code Playgroud)

您可以在文档中找到有关如何自定义小吃栏的更多信息

  • 从 2019 年 3 月 1 日起,Material UI V3.9.2 不再有效。Emi 下面的例子对我来说效果很好。 (7认同)