【问题标题】:Can I override nested object styles in Material UI when applying custom theme?应用自定义主题时,我可以在 Material UI 中覆盖嵌套对象样式吗?
【发布时间】:2021-04-20 07:07:54
【问题描述】:

我创建了我的自定义主题,并尝试设置 TabsTab Material UI 组件的样式。但是选项卡组件是ButtonBase,并且由于我不希望所有按钮都被覆盖,所以我尝试像这样覆盖嵌套对象样式:

MuiTabs: {
    root: {
        // Section being applied correctly
        borderRadius: 3,
        padding: 0,
        minHeight: 32,
        backgroundColor: theme.button.backgroundDisabled,

        // NOT being applied
        MuiButtonBase: {
            root: {
                backgroundColor: 'red',
            },
        },
    },
}

MuiButtonBase-root 样式未应用。我可以不使用这样的字符串样式来做到这一点吗?

MuiTabs: {
    root: {
        ....                 
        // This IS being applied.
        '& .MuiButtonBase-root': {
             backgroundColor: 'red',
        },
    },
}

有没有办法应用第一种方法而不是字符串样式?

【问题讨论】:

  • 第二种方法有什么问题?
  • @NearHuscarl 无,只是好奇并询问这是否可能。
  • 如果您不想嵌套 css 选择器,您可以做的最接近的事情是覆盖默认道具 classes,但 Tabs 组件不会公开 tabButton ruleName 以在您的情况,答案是否定的。

标签: reactjs material-ui material-design


【解决方案1】:

如果您检查选项卡按钮,您将看到如下所示的类列表:

MuiButtonBase-root MuiTab-root MuiTab-textColorInherit

Tabs 之间切换的BaseButton 也称为MuiTab,您可以定位该组件并直接覆盖其样式,如下所示:

const theme = createMuiTheme({
  overrides: {
    MuiTab: {
      root: {
        backgroundColor: "pink"
      }
    }
  }
});

现场演示

【讨论】:

  • 触摸!我没有看到它是一个单数 MuiTab 而不是 MuiTabs.... 谢谢
  • 但这并不能解决我的问题......我该如何嵌套它?
  • @Sonhja 我认为不使用 css 选择器就无法做到这一点。请参阅this 评论。我查看了definition 类型以确认它。我的回答只能在您想要设置MuiTab 样式的特定情况下为您提供帮助。对不起
猜你喜欢
  • 2019-04-15
  • 2020-06-13
  • 1970-01-01
  • 2020-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-07
  • 2020-05-23
相关资源
最近更新 更多