我正在尝试建立自己的调色板颜色来匹配我在MUI中的品牌。到目前为止,我只能在按钮的背景色中使用原色和二次色。当我添加自己的变量名时,比如使用MUI网站上的示例“accent”,按钮默认为灰色。
下面是我的 MyTheme.js 代码:
import { createMuiTheme } from 'material-ui/styles';
import purple from 'material-ui/colors/purple';
export default createMuiTheme({
palette: {
primary: { // works
main: '#165788',
contrastText: '#fff',
},
secondary: { // works
main: '#69BE28',
contrastText: '#fff',
},
companyBlue: { // doesn’t work - defaults to a grey button
main: '#65CFE9',
contrastText: '#fff',
},
companyRed: { // doesn’t work - grey button
main: '#E44D69',
contrastText: '#000',
},
accent: { // doesnt work - grey button
main: purple, // import purple doesn’t work
contrastText: '#000',
},
},
});
下面是我的 * App.js * 代码:
import React, { Component } from 'react';
import Button from 'material-ui/Button';
import MuiThemeProvider from 'material-ui/styles/MuiThemeProvider';
import MyTheme from './MyTheme';
import './App.css';
import { withStyles } from 'material-ui/styles';
import PropTypes from 'prop-types';
const styles = theme => ({
button: {
margin: theme.spacing.unit,
},
input: {
display: 'none',
},
});
class App extends Component {
constructor(props)
{
super(props);
}
render() {
const { classes } = this.props;
return (
<MuiThemeProvider theme={MyTheme}>
<Button variant="raised" >
Default
</Button>
<Button variant="raised" color="primary" className={classes.button}>
Primary
</Button>
<Button variant="raised" color="secondary" className={classes.button}>
Secondary
</Button>
<Button variant="raised" color="companyRed" className={classes.button}>
Company Red
</Button>
<Button variant="raised" color="accent" className={classes.button}>
Accent
</Button>
</MuiThemeProvider>
);
}
}
App.propTypes = {
classes: PropTypes.object.isRequired,
};
export default withStyles(styles)(App);
5条答案
按热度按时间628mspwn1#
MUI调色板是可扩展的,但是您需要做一些事情来创建新颜色并应用到
Button
组件。首先,我们定义一个带有自定义颜色变量的主题,你可以使用
augmentColor()
来生成PaletteColor
,这样它就可以在你的Button
中使用:然后更新你的TypeScript定义,这样它就可以在引用
Palette
和PaletteOption
对象时识别属性myAwesomeColor
(如果你使用JavaScript,跳过这一步)。你还需要扩展Button
的颜色属性定义,因为默认情况下它只接受以下值:x一个一个一个一个x一个一个二个x
最后一步是为
Button
注入自定义主题并设置自定义颜色:现场演示
相关答案
iyfjxgzm2#
除了需要将
MyTheme
中的purple
更改为类似purple[500]
的内容之外,我不知道为什么这对您不起作用。您可能无法以这种方式覆盖除primary
和secondary
之外的任何内容。无论如何,这里有一个解决方法:
在
MyTheme.js
中:然后在
App.js
中:here就是一个工作示例。
oknwwptz3#
对于MUI v5,这似乎对我有效:
8cdiaqws4#
对于那些在Typescript中创建自定义颜色的人,我是这样做的。我添加了黄色和深色类型:
然后根据类型设置它们。这花了我一秒钟的时间来弄明白。当我在PaletteOptions上添加dark类型时,它的类型就像PaletteColorOptions一样,它有以下类型:
所以我用main来定义它的类型中的颜色。
希望这对任何有 typescript 打字问题的人都有帮助。
lmvvr0a85#
添加自定义调色板应该没有问题,如下所示:
使用MUI颜色(如"紫色")必须通过对象键访问,因为每种颜色都有50到900(亮到暗)的着色值:
但如果你想创建自己的紫色调色板(和其他颜色)来匹配品牌,你可以添加一个新的js文件,包含所有自定义颜色和阴影,并将其导入主应用程序:
一个二个一个一个
以下是创建自定义主题、调色板和颜色https://muhimasri.com/blogs/how-to-customize-theme-and-colors-in-material-ui/的详细说明