Search code examples
reactjstooltipmaterial-ui

Material UI's Tooltip - Customization Style


How can I change the background color and color for Material UI's Tooltip. I tried as below but it is not working.

import { createMuiTheme } from '@material-ui/core/styles';
export const theme = createMuiTheme({
tooltip: {
        color: '#ffffff',
        rippleBackgroundColor: 'red'
    }
});

import MuiThemeProvider from '@material-ui/core/styles/MuiThemeProvider';
import { theme } from "my-path";

<MuiThemeProvider theme={theme} >
<Tooltip
    title={this.props.title}
    placement={this.props.placement} className="customTooltipStyle">
    <em className="fa fa-info-circle"></em>
</Tooltip>
</MuiThemeProvider>

Solution

  • Below are examples of how to override all tooltips via the theme, or to just customize a single tooltip using withStyles (two different examples). The second approach could also be used to create a custom tooltip component that you could reuse without forcing it to be used globally.

    import React from "react";
    import ReactDOM from "react-dom";
    
    import {
      createMuiTheme,
      MuiThemeProvider,
      withStyles
    } from "@material-ui/core/styles";
    import Tooltip from "@material-ui/core/Tooltip";
    
    const defaultTheme = createMuiTheme();
    const theme = createMuiTheme({
      overrides: {
        MuiTooltip: {
          tooltip: {
            fontSize: "2em",
            color: "yellow",
            backgroundColor: "red"
          }
        }
      }
    });
    const BlueOnGreenTooltip = withStyles({
      tooltip: {
        color: "lightblue",
        backgroundColor: "green"
      }
    })(Tooltip);
    
    const TextOnlyTooltip = withStyles({
      tooltip: {
        color: "black",
        backgroundColor: "transparent"
      }
    })(Tooltip);
    
    function App(props) {
      return (
        <MuiThemeProvider theme={defaultTheme}>
          <div className="App">
            <MuiThemeProvider theme={theme}>
              <Tooltip title="This tooltip is customized via overrides in the theme">
                <div style={{ marginBottom: "20px" }}>
                  Hover to see tooltip customized via theme
                </div>
              </Tooltip>
            </MuiThemeProvider>
            <BlueOnGreenTooltip title="This tooltip is customized via withStyles">
              <div style={{ marginBottom: "20px" }}>
                Hover to see blue-on-green tooltip customized via withStyles
              </div>
            </BlueOnGreenTooltip>
            <TextOnlyTooltip title="This tooltip is customized via withStyles">
              <div>Hover to see text-only tooltip customized via withStyles</div>
            </TextOnlyTooltip>
          </div>
        </MuiThemeProvider>
      );
    }
    const rootElement = document.getElementById("root");
    ReactDOM.render(<App />, rootElement);
    

    Edit Tooltip customization

    Here is documentation on tooltip CSS classes available to control different aspects of tooltip behavior: https://material-ui.com/api/tooltip/#css

    Here is documentation on overriding these classes in the theme: https://material-ui.com/customization/components/#global-theme-override