css - 覆盖一些material-ui类样式但保留默认样式

标签 css reactjs material-ui overriding

我正在与 material-ui tooltip 合作并且只想更改 tooltipPlacementTop 类的一种样式(边距):

    const useStyles = makeStyles(theme => ({
      tooltipPlacementTop: {
         margin: '4px 0' 
      },
    });
    ....
    <Tooltip classes={{ tooltipPlacementTop: classes.tooltipPlacementTop }} >

但是这样它就会覆盖该类默认具有的所有样式。如何保留默认的 Material-ui 样式并仅更改我需要的样式?


我发现了这个问题,在我的例子中,Tooltip是一个使用material-ui工具提示的自定义组件,我实际上覆盖了其中的classes属性...

结束问题

最佳答案

在material ui api 文档中,您可以随时查看implementation of the component 。如果我理解正确的话,您想要覆盖 tooltipPlacementTop 的边距,但想要保留其余的样式。如果您以这种方式添加样式,它们将扩展现有样式而不是覆盖它们。您可能忽略了 theme.breakpoint。

看看这个

import React from "react";
import "./styles.css";
import Tooltip from "@material-ui/core/Tooltip";
import { makeStyles } from "@material-ui/core/styles";

const useStyles = makeStyles((theme) => ({
  tooltipPlacementTop: {
    margin: "4px 0",
    [theme.breakpoints.up("sm")]: {
      margin: "4px 0"
    }
  }
}));

function App() {
  const classes = useStyles();
  return (
    <div className="App" style={{ marginTop: 100 }}>
      <Tooltip title="hi there" classes={classes} placement="top">
        <h2>Hover me!</h2>
      </Tooltip>
    </div>
  );
}

const { Tooltip, makeStyles } = MaterialUI;

const useStyles = makeStyles((theme) => ({
  tooltipPlacementTop: {
    margin: "4px 0",
    [theme.breakpoints.up("sm")]: {
      margin: "4px 0"
    }
  }
}));

function App() {
  const classes = useStyles();
  return (
    <div className="App" style={{ marginTop: 50 }}>
      <Tooltip title="hi there" classes={classes} placement="top">
        <h2 style={{ textAlign: 'center' }}>Hover me!</h2>
      </Tooltip>
      <Tooltip title="hi there (normal)" placement="top">
        <h2 style={{ textAlign: 'center', marginTop: 50 }}>Hover me (default)!</h2>
      </Tooltip>
    </div>
  );
}

ReactDOM.render(<App />, document.getElementById("root"));
<script src="https://unpkg.com/react@17/umd/react.production.min.js" crossorigin></script>
<script src="https://unpkg.com/react-dom@17/umd/react-dom.production.min.js" crossorigin></script>
<script src="https://unpkg.com/@material-ui/core@latest/umd/material-ui.production.min.js" crossorigin></script>

<div id="root"></div>

关于css - 覆盖一些material-ui类样式但保留默认样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65585942/

相关文章:

reactjs - 当组件重新渲染 React Material UI 时保留 Autocomplete 值

css - rangeslider thumb behind on track for firefox browser only..how to fix it?我的代码如下

html - Rails 图片 link_to 不工作

reactjs - React JS如何在子类中调用父类函数

javascript - 将默认主文件 "index.js"更改为 react 中的其他文件?

reactjs - 尝试创建可共享的 React 组件 - 但未能导入它

html - 如何使图像轮播工作?

javascript - 我需要扩展悬停显示 block 的最简单的 js 代码是什么,以便它在那里停留一秒钟

reactjs - 如何为使用 Table 组件 Material UI 的 Component 编写测试?

reactjs - 使用 Material-UI 切换过滤器列表