如何覆盖祖先的嵌套 Material UI 组件的样式?

IT技术 javascript reactjs material-ui jss
2021-05-11 21:35:51

我正在使用来自外部库的组件,该组件不允许我更改其大部分样式,但我想更改作为材质 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"
    }
  }
});

有谁能够帮我?提前致谢。

1个回答

假设为 生成的类名myComponentmyComponent-jss123. 您在样式中使用的选择器 ( &.MuiIconButton-root) 将等效于.myComponent-jss123.MuiIconButton-root将匹配应用了这两个类的任何元素我相信您的意图是匹配图标按钮,这些图标按钮是您应用该类的后代图标按钮在这种情况下,您需要使用由空格表示后代组合器,因此适当的样式如下所示:divmyComponent

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>
  );
}

编辑目标后代图标按钮

相关文档: