如何覆盖主题覆盖中所选颜色的材质ui以进行反应

Posted

技术标签:

【中文标题】如何覆盖主题覆盖中所选颜色的材质ui以进行反应【英文标题】:How to override selected color in theme override for material ui for react 【发布时间】:2019-01-28 04:42:35 【问题描述】:

我想覆盖material ui for React 中所有选项卡的选定文本颜色。我知道我可以使用如下代码覆盖某些部分:

const theme = createMuiTheme(
  overrides: 
    MuiTab: 
      root: 
        color: '#000000',
        backgroundColor: '#ffffff',
        '&:hover': 
          backgroundColor: 'rgba(108, 130, 168, 0.11764705882352941)',
          color: '#000000',
        
      
    
  
);

紧随其后

 <MuiThemeProvider theme=theme>
    <HomePage/>
 </MuiThemeProvider>

However, when the tab is selected it applies a class such as '.MuiTab-textColorPrimary-144.MuiTab-selected-146'.选择 Tab 组件时,如何为 textColorPrimary 指定全局覆盖颜色?我对全局覆盖而不是单个实例覆盖特别感兴趣。缺少 Tab 组件的特定方式,我将如何为“selected”primaryTextColor 指定全局覆盖?

【问题讨论】:

【参考方案1】:

代码:

const theme = createMuiTheme(
  overrides: 
    MuiTabs: 
      indicator: 
        backgroundColor: orange[700]
      
    ,
    MuiTab: 
      root: 
        "&:hover": 
          backgroundColor: pink[100],
          color: pink[700]
        
      ,
      selected: 
        backgroundColor: orange[100],
        color: orange[700],
        "&:hover": 
          backgroundColor: green[100],
          color: green[700]
        
      
    
  
);

活生生的例子: https://codesandbox.io/s/mj9x1zy4j9

【讨论】:

这是一个很棒的答案,也是我们为什么都喜欢 *** 的一个例子。添加一个代码框链接真的是锦上添花,非常感谢。谢谢! 很高兴知道它有帮助,特别是因为我还不到一周的时间进入 react+mui 前端开发 :) 我在这个问题中问过一个关于设置material-ui工具栏高度的相关问题:***.com/questions/52043271/… 最新版 Material-UI 见下方升级语法 Lamber 下面的注释是正确的。上面的例子需要更新。现在选定的选择器需要这种格式。注意美元符号。 '&$selected': backgroundColor: '棕色'【参考方案2】:

已接受答案中的 CodeSandbox 示例在最新版本的 MUI (3.9.1) 中不再适用,当我尝试使用建议的更改来解决问题时,它又给出了另一条错误消息。请参阅下面的屏幕截图。请参阅下面的解决方案。

eps1lon 向我展示了如何在 code sandbox 上执行此操作。 这现在应该是公认的答案。

【讨论】:

【参考方案3】:

也可以使用 TabIndicatorProps

<Tabs
  value=value
  onChange=this.handleChange
  TabIndicatorProps=
    style: 
      backgroundColor: "#D97D54"
    
  
>
...
</Tabs>

如果你需要无指标

const theme = createMuiTheme(
  overrides: 
    MuiTabs: 
      indicator: 
        backgroundColor: `transparent`
      
    ,

【讨论】:

【参考方案4】:

为了覆盖selected 规则,您需要使用$ruleName 语法。 规则覆盖应该在根定义内: (Forked code sandbox with the fixed syntax)

const theme = createMuiTheme(
  overrides: 
    MuiTabs: 
      indicator: 
        backgroundColor: orange[700]
      
    ,
    MuiTab: 
      root: 
        "&:hover": 
          backgroundColor: pink[100],
          color: pink[700]
        ,
        "&$selected": 
          backgroundColor: orange[100],
          color: orange[700],
          "&:hover": 
            backgroundColor: cyan[500],
            color: green[700]
          
        
      
    
  
);

【讨论】:

【参考方案5】:

你应该像这样将选中的插入根节点:

  const theme = createMuiTheme(
    overrides: 
      MuiTab: 
        root: 
          "&:hover": 
            backgroundColor: pink[100]
          ,
          selected: 
            backgroundColor: orange[100]            
          
        ,
      
    
);

【讨论】:

以上是关于如何覆盖主题覆盖中所选颜色的材质ui以进行反应的主要内容,如果未能解决你的问题,请参考以下文章

如何更改材质ui表中所选行的文本颜色

如何在引导反应/redux 应用程序中覆盖引导主题颜色?

放置边框颜色反应材质主题

Android主题覆盖所有颜色[重复]

我如何覆盖主题链接字体颜色? [关闭]

如何在 Swift 中覆盖协议扩展的计算属性