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

Posted

技术标签:

【中文标题】如何覆盖(覆盖)material-ui(React)中的类和样式【英文标题】:How to override (overwrite) classes and styles in material-ui (React) 【发布时间】:2018-11-22 16:40:03 【问题描述】:

我正在使用 material-ui 的 1.2.1 版,我正在尝试覆盖 AppBar 组件以使其透明。该文档概述了如何覆盖样式here。

我的代码:

import React,  Component  from 'react';
import AppBar from '@material-ui/core/AppBar';
import Toolbar from '@material-ui/core/Toolbar';
import logo from '../Assets/logo.svg';

class NavigationBar extends Component 
  render() 
    const styles = 
      root: 
        backgroundColor: 'transparent',
        boxShadow: 'none',
      ,
    ;

    return (
      <AppBar position=this.props.position classes= root: styles.root >
        <Toolbar>
          <img src=logo style= height: '28px'  />
        </Toolbar>
      </AppBar>
    );
  


export default NavigationBar;

但这不会产生任何结果。我是否试图覆盖错误?不知道我哪里出错了......

【问题讨论】:

【参考方案1】:

除了上面的答案,如果你想为一些内部自动生成的元素添加样式,你可以使用这个语法来做到这一点

<TextField className=classes.txtField

那么在 classes 对象中,我们可以通过这种方式接近 TextField 中存在的标签

const useStyles = makeStyles((theme) => (
    txtField: 
        "& label": 
             padding: 23
        
    
);

【讨论】:

【参考方案2】:

这个答案使@Nadun 的答案完整——他值得称赞。 要覆盖材质 ui 类,我们需要了解以下内容:

1.在顶部的 const 变量中添加样式

    const styles = 
      root: 
        backgroundColor: 'transparent !important',
        boxShadow: 'none',
        paddingTop: '25px',
        color: '#FFFFFF'
      
    ;

2。 我们需要使用带有“withStyles”的高阶函数来覆盖材质ui类

    export default withStyles(styles)(NavigationBar);

3. 现在这些样式可以作为渲染函数中的道具提供给我们 尝试这样做 - console.log(this.props.classes) - 你会得到一个与你包含在样式对象中的属性相对应的类名, 喜欢 - root: "Instructions-root-101"

使用类属性添加它

render() 
   const  classes  = this.props;
   return ( 
       <AppBar classes= root: classes.root >
        // Add other code here
       </AppBar>
   )

【讨论】:

我们现在可以使用 useStyles 钩子了:material-ui.com/ru/styles/basics【参考方案3】:
import React,  Component  from 'react';
import AppBar from '@material-ui/core/AppBar';
import Toolbar from '@material-ui/core/Toolbar';
import logo from '../Assets/logo.svg';
import  withStyles  from '@material-ui/core/styles';

const styles = 
  transparentBar: 
    backgroundColor: 'transparent !important',
    boxShadow: 'none',
    paddingTop: '25px',
    color: '#FFFFFF'
  
;

class NavigationBar extends Component 
  render() 
    return (
      <AppBar className=classes.transparentBar>
        <Toolbar>
          <img src=logo style= height: '28px'  />
        </Toolbar>
      </AppBar>
    );
  


export default withStyles(styles)(NavigationBar);

找到重要的部分:

backgroundColor: 'transparent !important'

更多详情请参阅本指南:https://material-ui.com/customization/overrides/

希望对你有帮助

【讨论】:

这个答案不完整,无法解决问题。我在下面包含了完整的答案

以上是关于如何覆盖(覆盖)material-ui(React)中的类和样式的主要内容,如果未能解决你的问题,请参考以下文章

如何使用样式组件覆盖material-ui css?

抽屉组件后面的material-ui覆盖div

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

Material-UI 对话框覆盖?

使用 styled-components 覆盖 material-ui 按钮样式

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