当前位置: 首页 > 知识库问答 >
问题:

无法在material-ui中用类覆盖样式

淳于泓
2023-03-14

我使用material-ui中的TableRow组件实现了一个表,它有一个名为“Selected”的属性。只要“selected”为true,就会为其应用一个粉红色的背景色(来自默认主题)。我试图更改这个默认的粉色,根据文档,我选择覆盖css类,比如:

const styles = theme => ({
  rowSelected: {
    backgroundColor: theme.palette.grey[700]
  }
})
class CustomTableRow extends React.Component {
// basic component logic
render() {
const {classes, className, style } = this.props;
  <TableRow
    key={key}
    component="div"
    selected={true}
    hover={true}
    className={className}
    classes={{ selected: classes.rowSelected}}
    style={style}
  >
      // some children
  </TableRow>
}
export default withStyles(styles, { withTheme: true })(CustomTableRow);

但这并没有奏效,这很让人困惑。因为我已经成功地在其他地方用上面相同的方法对抽屉组件执行了相同的操作。

我用Chrome开发工具调试了每个css属性。我现在最怀疑的是,粉红色用下面这样的方式应用在这个组件上:

.MuiTableRow-root.Mui-selected, .MuiTableRow-root.Mui-selected:hover {
    background-color: rgba(245, 0, 87, 0.16);

我的自定义类样式的优先级比这一个低,这一个是灰色的。

更新1:

我的项目太大了,我不知道如何为CodeSandBox.io简化它。也许我们可以直接查看material-ui源代码,TableRow源代码。我所做的是在root中重写这个css声明

    '&$selected, &$selected:hover': {
      backgroundColor: fade(theme.palette.secondary.main, theme.palette.action.selectedOpacity),
    },

通过在下面传入另一个selected声明。我意识到这是因为这个&$selected,&$selected:hover通常不是css,即使我把它复制到rowselected中,它也不起作用。

更新2:

我设法用“!重要”关键字覆盖了backgroundColor:

const styles = theme => ({
  rowSelected: {
    backgroundColor: theme.palette.grey[700] + " !important",
  }
})

我不知道这是否是一个理想的解决方案。这清楚地表明了css的问题是关于类优先级的。因此如何使用类selected重写类root中已定义backgroundColor。

请帮忙,谢谢。

共有1个答案

莘睿
2023-03-14

若要为所选类提供特定性,可以将$selected$selected:Hover类应用于重写,如下所示

const styles = theme => ({
  rowSelected: {
    "&$selected, &$selected:hover": {
      backgroundColor: theme.palette.grey[800]
    }
  }
})

示例演示

 类似资料:
  • 问题内容: 我如何在 不 使用以下代码的 情况下 隐藏/删除TextField组件中的下划线: 我想用道具,并根据文档:https : //material- ui.com/api/input/ 我应该能够更改下划线道具,但是它不起作用。 问题答案: 这是您的操作方式: 我怎么知道的? 您已链接到文档,该文档确实具有支持。 但是,您正在使用组件: 重要的是要了解,文本字段是以下组件之上的简单抽象:

  • 我无法覆盖android:switchStyle。这是我所做的: 在文件夹值-v14中,我有两个文件: 主题.xml : styles.xml: 我有以下错误: res/values-v14/styles.xml:4:错误:检索项的父项时出错:未找到与给定名称“android:Widget”匹配的资源。赫萝。灯。复合按钮。开关。 res/values-v14/themes.xml:5:错误:错误:

  • 问题内容: 我开始研究material-ui,并在SandBox中创建一个简单的应用程序:https ://codesandbox.io/s/eager-ride-cmkrc jss的样式对我来说并不常见,但是如果您通过这两个简单的练习帮助我,那么我将理解所有内容。 首先:我希望将和的通用属性合并到新类中并进行扩展:(https://github.com/cssinjs/jss- extend#u

  • 问题内容: 我尝试按照食谱中的描述自定义行为。 在ipython中: 没有被调用。看来在我的python 2.5安装中不起作用。 问题答案: 使用的是ipython,而不是普通的Python交互式shell,它本身捕获所有异常,并且不使用sys.excepthook。以代替just的方式运行它,它将在未捕获的异常时自动调用pdb,就像您尝试使用excepthook一样。

  • 问题内容: 我查看了Stack Overflow,但没有找到解决方案,我知道如何在样式存在的情况下覆盖样式,只需更改其属性即可。但是现在我有一种奇怪的样式可以覆盖 这是我所拥有的一个例子 首先我有一个: 现在,我需要使用以下一种样式来覆盖该样式: 问题是第一种样式会追加第二种,但是我不希望那样,在第二种样式中我只需要一行,而不是从第一种样式追加? 问题答案: 您可以将另一个类添加到元素中,而不是重

  • 问题内容: 可以说我希望每个组件都具有默认的道具吗? 问题答案: 此处的文档位于: https //material-ui.com/customization/globals/#default-props 这是如何执行此操作的示例: