我正在努力修改 MUI next (v1) 中的按钮颜色。
我如何将 muitheme 设置为与 bootstrap 相似,所以我可以只对红色使用“btn-danger”,对绿色使用“btn-success”......?
我尝试过自定义,className但它不能正常工作(悬停颜色不会改变)并且它似乎是重复的。我有哪些选择?
我正在努力修改 MUI next (v1) 中的按钮颜色。
我如何将 muitheme 设置为与 bootstrap 相似,所以我可以只对红色使用“btn-danger”,对绿色使用“btn-success”......?
我尝试过自定义,className但它不能正常工作(悬停颜色不会改变)并且它似乎是重复的。我有哪些选择?
我在这个线程中使用 Brendans 的答案提出了这个解决方案。希望它会帮助处于类似情况的人。
import React, { Component } from 'react'
import { MuiThemeProvider, createMuiTheme } from 'material-ui/styles'
import Button from 'material-ui/Button'
import { red, blue } from 'material-ui/colors'
const redTheme = createMuiTheme({ palette: { primary: red } })
const blueTheme = createMuiTheme({ palette: { primary: blue } })
class Buttons extends Component {
  render = () => (
    <div className="ledger-actions-module">
      <MuiThemeProvider theme={redTheme}>
        <Button color="primary" variant="raised">
          Delete
        </Button>
      </MuiThemeProvider>
      <MuiThemeProvider theme={blueTheme}>
        <Button color="primary" variant="raised">
          Update
        </Button>
      </MuiThemeProvider>
    </div>
  )
}
你可以试试这个
<Button
    style={{
        borderRadius: 35,
        backgroundColor: "#21b6ae",
        padding: "18px 36px",
        fontSize: "18px"
    }}
    variant="contained"
    >
    Submit
</Button>
Bagelfp 的回答有错误,还有其他一些需要考虑的事情;
首先,“error”不是 material-ui@next v1 的Button 组件中支持的颜色主题。color prop只接受“default”、“inherit”、“primary”和“secondary”。
这是迄今为止我发现的最简单的方法。首先,选择您最常用的两种主题颜色并将它们放在应用程序的根目录中。
import React from 'react';
import { Component } from './Component.js'
import { MuiThemeProvider, createMuiTheme } from 'material-ui/styles';
const theme = createMuiTheme({
  palette: {
    primary: 'purple',
    secondary: 'green',
    error: 'red',
  },
});
export class App extends Component {
  render() {
    return (
      <MuiThemeProvider theme={theme}>
        <Component />
        ...
      </MuiThemeProvider>
    );
  }
}
然后在你的组件中,选择你想要的颜色的主题;
import React from 'react';
import Button from 'material-ui/Button';
export const Component = (props) => (
  <div>
    <Button variant="fab" color="primary">
      I am purple, click me!
    </Button>
  </div>
)
如果您需要第三种和第四种颜色,您可以使用新的调色板导出 Component.js,就像您在 App.js 中所做的那样。
这是我发现的唯一可以保留变暗悬停效果的解决方案(没有一个官方覆盖示例保留了悬停功能)。我真的希望我能找到一种方法,在调用 Button 时简单地放入新的主题颜色,但目前这是最简单的方法。
编辑:我新的首选方法是使用 styled-components 和 material-ui buttonbase 创建一个 CustomButton 组件。我还将 styled-components 主题提供程序与我的 MuiThemeProvider 一起放在我的应用程序的根目录中。这使我可以轻松访问所有样式组件中的其他主题颜色,而无需导入和删除更多 ThemeProvider。在我的 CustomButton 的情况下,我只是给它一个themeprops,它直接传递给 .css 文件中的 css styled(ButtonBase)。有关更多信息,请参阅样式组件文档。
试试这个:
import * as React from 'react';
import Button, { ButtonProps } from "@material-ui/core/Button";
import { Theme } from '@material-ui/core';
import { withStyles } from '@material-ui/styles';
const styles: (theme: Theme) => any = (theme) => {
    return {
        root:{
            backgroundColor: theme.palette.error.main,
            color: theme.palette.error.contrastText,
            "&:hover":{
                backgroundColor: theme.palette.error.dark
            },
            "&:disabled":{
                backgroundColor: theme.palette.error.light
            }
        }
    };
};
export const ButtonContainedError = withStyles(styles)((props: ButtonProps) => {
    const { className, ...rest } = props;
    const classes = props.classes||{};
    return <Button {...props} className={`${className} ${classes.root}`} variant="contained" />
});
现在你有一个 ButtonContainedError 可以在任何地方使用。
并且与你的主题一致。
您可以使用theme.palette.getContrastText()根据背景颜色值计算正确的文本颜色。
import { Button, makeStyles } from '@material-ui/core';
const useStyles = makeStyles((theme) => ({
  deleteButton: {
    // to make a red delete button
    color: theme.palette.getContrastText(theme.palette.error.main),
    background: theme.palette.error.main,
  }
}));
export const DeleteButton = () => {
  const classes = useStyles();
  return (
    <Button className={classes.deleteButton}>Delete</Button>
  );
}