【问题标题】:Material UI CSS overriding makeStyles CSSMaterial UI CSS 覆盖 makeStyles CSS
【发布时间】:2022-01-06 01:40:18
【问题描述】:

我正在使用 makeStyles 和 useClasses 创建类。但在大多数情况下,MUI CSS 正在被应用,而我的类只能通过使用“!important”来应用。有没有办法在没有“!important”的情况下覆盖 MUI 样式。在使用重要时,默认情况下有一些 MUI CSS 失败。同样来自相同代码的徽标甚至可以在不使用 !important 的情况下正常工作。 This shows MUI CSS overriding makeStyles CSS.

import React, { useState, useEffect } from "react";
import AppBar from "@mui/material/AppBar";
import { makeStyles, createStyles } from "@mui/styles";
import Tabs from "@mui/material/Tabs";
import Tab from "@mui/material/Tab";
import Toolbar from "@mui/material/Toolbar";
import logo from "../../assets/logo.svg";
import Button from "@mui/material/Button";
import { Link } from "react-router-dom";

const useStyles = makeStyles((theme) => ({
    toolbarMargin: {
        ...theme.mixins.toolbar,
        marginBottom: "3em",
    },
    logo: {
        height: "8em",
    },
    tabContainer: {
        marginLeft: "auto",
    },
    tab: {
        ...theme.typography.tab,
        minWidth: 10,
        marginLeft: "25px !important",
    },
    button: {
        ...theme.typography.estimate,
        borderRadius: "50px !important",
        marginLeft: "50px !important",
        marginRight: "25px !important",
        height: "45px !important",
    },
    logoContainer: {
        padding: "0px !important",
        "&:hover": {
            backgroundColor: "transparent",
        },
    },
}));


export default function Header(props) {
    const classes = useStyles();
    return (
        <React.Fragment>
            <ElevationScroll>
                <AppBar position='fixed'>
                    <Toolbar disableGutters>
                        <Button
                            disableRipple
                            className={classes.logoContainer}
                            component={Link}
                            to='/'
                        >
                            <img src={logo} alt='company Logo' className={classes.logo}></img>
                        </Button>
                        <Tabs
                            className={classes.tabContainer}
                            value={0}
                            textColor='#fff'
                            onChange={handleChnage}
                            indicatorColor='primary'
                        >
                            <Tab
                                className={classes.tab}
                                component={Link}
                                to='/'
                                label='Home'
                            />
                            <Tab
                                className={classes.tab}
                                component={Link}
                                to='/services'
                                label='Services'
                            />
                        </Tabs>
                        <Button
                            variant='contained'
                            className={classes.button}
                            color='secondary'
                        >
                            Free Estimate
                        </Button>
                    </Toolbar>
                </AppBar>
            </ElevationScroll>
        </React.Fragment>
    );
}

【问题讨论】:

  • 你的问题是选择器specitivity。由于两个选择器都具有相同的特定性,因此稍后定义的选择器将覆盖第一个选择器。通过使用!important 你打破了特异性。我不太了解makeCss,但解决方案是增加makeCss 创建的选择器的特异性。这将使它通过特异性覆盖您的 MUI 样式,并且您将能够删除所有 !important

标签: css reactjs material-ui


【解决方案1】:

您可以将所有这些样式放在一个 CSS 文件中,然后将该文件导入到您的 html 文件的最后。

或者你可以在每个被覆盖的样式上使用 !important 标签:

const useStyles = makeStyles((theme) => ({
    toolbarMargin: {
        ...theme.mixins.toolbar,
        marginBottom: "3em" !important,
    },
    logo: {
        height: "8em" !important,
    },
    tabContainer: {
        marginLeft: "auto",
    },
    tab: {
        ...theme.typography.tab,
        minWidth: 10px !important,
        marginLeft: "25px !important",
    },
    button: {
        ...theme.typography.estimate,
        borderRadius: "50px !important",
        marginLeft: "50px !important",
        marginRight: "25px !important",
        height: "45px !important",
    },
    logoContainer: {
        padding: "0px !important",
        "&:hover": {
            backgroundColor: "transparent",
        },
    },
}));

【讨论】:

  • 问题明确询问不使用 !important - “有没有办法在不使用 '!important' 的情况下覆盖 MUI 样式”
  • 使用 CSS 模块或在你的 html 文件末尾导入 CSS 文件
猜你喜欢
  • 2021-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-24
  • 2018-12-26
  • 2020-06-19
  • 2020-08-19
  • 1970-01-01
相关资源
最近更新 更多