如何覆盖祖先嵌套 Material UI 组件的样式?
How to override style of nested Material UI component from the ancestors?
我正在使用外部库中的组件,该组件不允许我更改其大部分样式,但我想更改 material ui 按钮的样式按钮,当检查元素时它清楚地显示 类 MuiButtonBase-root MuiIconButton-root MuiIconButton-colorInherit
例如,如何覆盖 MuiIconButton-root 样式?这是我的组件:
class MyComponent extends Component {
render() {
const { classes } = this.props;
return (
<div className={classes.myComponent}>
<3rdPartyComponent />
</div>
);
}
}
export default withStyles(styles)(MyComponent)
我试过如下声明我的样式函数,但没有成功:
const styles = theme => ({
myComponent: {
"&.MuiIconButton-root": {
padding: "0px"
}
}
});
有人可以帮助我吗?提前致谢。
假设为 myComponent
生成的 class 名称是 myComponent-jss123
。您在样式中使用的选择器 (&.MuiIconButton-root
) 等同于 .myComponent-jss123.MuiIconButton-root
,它将匹配应用了 both 这些 classes 的任何元素给它。我相信您的意图是匹配图标按钮,这些按钮是您应用 myComponent
class 的 div
的 后代 。在这种情况下,您需要使用 space 表示的 descendant combinator,因此适当的样式如下所示:
const styles = theme => ({
myComponent: {
"& .MuiIconButton-root": {
padding: 0
}
}
});
这是一个完整的工作示例:
import React from "react";
import IconButton from "@material-ui/core/IconButton";
import DeleteIcon from "@material-ui/icons/Delete";
import { makeStyles } from "@material-ui/core/styles";
const useStyles = makeStyles({
myComponent: {
"& .MuiIconButton-root": {
padding: 0
}
}
});
const ThirdPartyComponent = () => {
return (
<div>
I'm a third party component that contains an IconButton:
<IconButton color="primary">
<DeleteIcon />
</IconButton>
</div>
);
};
export default function App() {
const classes = useStyles();
return (
<div className={classes.myComponent}>
<ThirdPartyComponent />
</div>
);
}
相关文档:
我正在使用外部库中的组件,该组件不允许我更改其大部分样式,但我想更改 material ui 按钮的样式按钮,当检查元素时它清楚地显示 类 MuiButtonBase-root MuiIconButton-root MuiIconButton-colorInherit
例如,如何覆盖 MuiIconButton-root 样式?这是我的组件:
class MyComponent extends Component {
render() {
const { classes } = this.props;
return (
<div className={classes.myComponent}>
<3rdPartyComponent />
</div>
);
}
}
export default withStyles(styles)(MyComponent)
我试过如下声明我的样式函数,但没有成功:
const styles = theme => ({
myComponent: {
"&.MuiIconButton-root": {
padding: "0px"
}
}
});
有人可以帮助我吗?提前致谢。
假设为 myComponent
生成的 class 名称是 myComponent-jss123
。您在样式中使用的选择器 (&.MuiIconButton-root
) 等同于 .myComponent-jss123.MuiIconButton-root
,它将匹配应用了 both 这些 classes 的任何元素给它。我相信您的意图是匹配图标按钮,这些按钮是您应用 myComponent
class 的 div
的 后代 。在这种情况下,您需要使用 space 表示的 descendant combinator,因此适当的样式如下所示:
const styles = theme => ({
myComponent: {
"& .MuiIconButton-root": {
padding: 0
}
}
});
这是一个完整的工作示例:
import React from "react";
import IconButton from "@material-ui/core/IconButton";
import DeleteIcon from "@material-ui/icons/Delete";
import { makeStyles } from "@material-ui/core/styles";
const useStyles = makeStyles({
myComponent: {
"& .MuiIconButton-root": {
padding: 0
}
}
});
const ThirdPartyComponent = () => {
return (
<div>
I'm a third party component that contains an IconButton:
<IconButton color="primary">
<DeleteIcon />
</IconButton>
</div>
);
};
export default function App() {
const classes = useStyles();
return (
<div className={classes.myComponent}>
<ThirdPartyComponent />
</div>
);
}
相关文档: