如何在不使用!important的情况下使用样式覆盖Material-UI主题?
const theme = createMuiTheme({
overrides: {
MuiInputBase: {
input: {
background: '#dd7711',
padding: 10,
},
},
},
},
})
export default makeStyles(theme => ({
hutber: {
background: '#000',
color: '#fff',
},
}))
function SpacingGrid() {
const classes = useStyles()
return <MuiThemeProvider theme={theme}><Input label="Outlined" variant="outlined" className={classes.hutber} /></MuiThemeProvider>
}
如您所见,覆盖样式的唯一方法是创建另一个主题:O我想知道styles
答案 0 :(得分:3)
覆盖无效的原因是,指定className
道具等同于指定root
CSS class for Input,但是主题覆盖位于input
CSS类上应用于另一个元素(根元素是div,输入元素是该div中的<input>
元素)。
在下面的示例中,您可以看到两种用于定位<input>
元素的方法。第一种方法使用nested selector定位.MuiInputBase-input
。第二种方法使用classes
属性(而不是className
),并提供覆盖内容作为input
CSS类。
import React from "react";
import ReactDOM from "react-dom";
import {
createMuiTheme,
MuiThemeProvider,
makeStyles
} from "@material-ui/core/styles";
import Input from "@material-ui/core/Input";
const theme = createMuiTheme({
overrides: {
MuiInputBase: {
input: {
background: "#dd7711",
padding: 10
}
}
}
});
const useStyles = makeStyles(theme => ({
hutber: {
"& .MuiInputBase-input": {
background: "#000",
color: "#fff"
}
},
alternateApproach: {
background: "#000",
color: "#fff"
}
}));
function App() {
const classes = useStyles();
return (
<MuiThemeProvider theme={theme}>
<Input defaultValue="Without overrides" variant="outlined" />
<br />
<br />
<Input
defaultValue="With overrides"
variant="outlined"
className={classes.hutber}
/>
<br />
<br />
<Input
defaultValue="Alternate approach"
variant="outlined"
classes={{ input: classes.alternateApproach }}
/>
</MuiThemeProvider>
);
}
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);