如何覆盖 Material-UI MenuItem 选择的背景颜色?

Posted

技术标签:

【中文标题】如何覆盖 Material-UI MenuItem 选择的背景颜色?【英文标题】:How to override Material-UI MenuItem selected background color? 【发布时间】:2018-10-26 12:48:34 【问题描述】:

目前我正在努力将MenuItem 组件的背景颜色设置为不同的颜色。 (无需使用 !important 强制它)

组件代码:

<MenuItem
 classes=
  root: this.props.classes.root,
  selected: this.props.classes.selected
 
 value=10>
  Alfabetical
</MenuItem>

这是css:

const homePageStyle = (theme) => (
  root: 
    width: "300px"
  ,
  selected: 
    backgroundColor: "turquoise !important",
    color: "white",
    fontWeight: 600
  
);

我想达到什么目标?

我想设置 MenuItembackgroundColor 而不必设置 !important 标志。我已经用很多组件做到了这一点,但目前这似乎无法解决。

我正在使用版本“@material-ui/core”:“^1.0.0-rc.0”,

【问题讨论】:

你用的是什么版本的material-ui? @ArnaudChrist 我正在使用“@material-ui/core”:“^1.0.0-rc.0”, 正确答案是这里的第一个答案:***.com/questions/49439266/… 【参考方案1】:

MUI v5 中,您可以这样做:

<Select
  MenuProps=
    sx: 
      "&& .Mui-selected": 
        backgroundColor: "pink"
      
    
  
>

现场演示

【讨论】:

哥们,你真是个救命恩人!谢谢!正在寻找这个。 :)【参考方案2】:

您可以将样式更新为:

const homePageStyle = (theme) => (
  root: 
    width: "300px"
  ,
  selected: 
    '&.Mui-selected': 
        backgroundColor: "turquoise",
        color: "white",
        fontWeight: 600
    
  
);

这是因为 material-ui 设置了这个组件的样式:.MuiListItem-root.Mui-selected 这两个类的特殊性优先于提供的覆盖。

【讨论】:

【参考方案3】:

我这样做是为了改变选中的 MenuItem 背景。 (材质 UI 提供的选定道具)。

export default createMuiTheme(
  overrides: 
    MuiMenuItem:  // For ListItem, change this to MuiListItem
      root: 
        "&$selected":        // this is to refer to the prop provided by M-UI
          backgroundColor: "black", // updated backgroundColor
        ,
      ,
    ,
  ,
);

这些是可以被覆盖的默认值https://material-ui.com/customization/default-theme/#default-theme

参考:https://material-ui.com/customization/components/#global-theme-override

注意:我使用的是 Material-UI 版本 4.9.11

【讨论】:

【参考方案4】:

我刚刚发了working example here

要考虑您选择的类,您必须将MenuItem 组件的selected 属性设置为true

<MenuItem
  onClick=this.handleClose
  selected
  classes= selected: classes.selected 
>

【讨论】:

这在你做这个例子之前就已经有效了。但问题是 !important 标志。我不喜欢用,有没有不用的替代方法? 您想更新您的演示以涵盖选择下划线颜色的变化吗? material-ui-next.com/demos/selects/#selects 对不起,我快速输入代码并忘记了您的“!重要”问题。这似乎是一个错误,也许你可以在 GitHub 上打开一个关于它的问题。一种解决方法可能是根据所选状态在根 css 中应用适当的背景颜色,并且不使用所选 css。 谢谢!能否更新您的答案以适用于 Material-ui 的 TextFields。我怎样才能编辑 TextField 组件的下划线? 我非常有信心您可以通过覆盖您提供给应用程序的 material-ui 主题中的主要颜色属性来更改此颜色。

以上是关于如何覆盖 Material-UI MenuItem 选择的背景颜色?的主要内容,如果未能解决你的问题,请参考以下文章

如何覆盖(覆盖)material-ui(React)中的类和样式

如何在 Material-UI 中使用 Box 组件覆盖按钮?

如何在 Material-UI 中覆盖 .MuiSelect-nativeInput

选中后如何覆盖 Material-UI 开关组件的样式?

如何防止 material-ui 包覆盖我的应用程序样式?

如何使用类名将常规 JSS 类与 Material-UI 的类覆盖功能结合起来