How to style Material-UI's tooltip? How to style Material-UI's tooltip? reactjs reactjs

How to style Material-UI's tooltip?


The other popular answer (by André Junges) on this question is for the 0.x versions of Material-UI. Below I've copied in my answer from Material UI's Tooltip - Customization Style which addresses this for v3 and v4. Further down, I have added a version of the example using v5.

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


Here is a similar example, but updated to work with v5 of Material-UI:

import React from "react";import ReactDOM from "react-dom";import { createTheme, ThemeProvider, styled } from "@material-ui/core/styles";import Tooltip, { tooltipClasses } from "@material-ui/core/Tooltip";const defaultTheme = createTheme();const theme = createTheme({  components: {    MuiTooltip: {      styleOverrides: {        tooltip: {          fontSize: "2em",          color: "yellow",          backgroundColor: "red"        }      }    }  }});const BlueOnGreenTooltip = styled(({ className, ...props }) => (  <Tooltip {...props} classes={{ popper: className }} />))(`  & .${tooltipClasses.tooltip} {    color: lightblue;    background-color: green;    font-size: 1.5em;  }`);const TextOnlyTooltip = styled(({ className, ...props }) => (  <Tooltip {...props} classes={{ popper: className }} />))(`  & .${tooltipClasses.tooltip} {    color: black;    background-color: transparent;  }`);function App(props) {  return (    <ThemeProvider theme={defaultTheme}>      <div className="App">        <ThemeProvider 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>        </ThemeProvider>        <BlueOnGreenTooltip title="This tooltip is customized via styled">          <div style={{ marginBottom: "20px" }}>            Hover to see blue-on-green tooltip customized via styled          </div>        </BlueOnGreenTooltip>        <TextOnlyTooltip title="This tooltip is customized via styled">          <div>Hover to see text-only tooltip customized via styled</div>        </TextOnlyTooltip>      </div>    </ThemeProvider>  );}const rootElement = document.getElementById("root");ReactDOM.render(<App />, rootElement);

Edit Tooltip customization

Documentation on changes to the theme structure between v4 and v5: https://next.material-ui.com/guides/migration-v4/#theme

Tooltip customization examples in the Material-UI documentation: https://next.material-ui.com/components/tooltips/#customized-tooltips


This answer is out of date. This answer was written in 2016 for the 0.x versions of Material-UI. Please see this answer for an approach that works with versions 3 and 4.

well, you can change the text color and the element background customizing the mui theme.

color - is the text color

rippleBackgroundColor - is the tooltip bbackground

Example: Using IconButton - but you could you the Tooltip directly..

import React from 'react';import IconButton from 'material-ui/IconButton';import MuiThemeProvider from 'material-ui/lib/styles/MuiThemeProvider';import getMuiTheme from 'material-ui/lib/styles/getMuiTheme';const muiTheme = getMuiTheme({  tooltip: {    color: '#f1f1f1',    rippleBackgroundColor: 'blue'  },});const Example = () => (  <div>    <MuiThemeProvider muiTheme={muiTheme}>        <IconButton iconClassName="muidocs-icon-custom-github" tooltip="test" />    </MuiThemeProvider>  </div>);

You can also pass a style object for the Tooltip (in IconButton it's tooltipStyles) - but these styles will only be applied for the root element.

It's not possible yet to change the label style to make it wrap in multiple lines.


I ran into this issue as well, and want for anyone seeking to simply change the color of their tooltip to see this solution that worked for me:

import React from 'react';import { makeStyles } from '@material-ui/core/styles';import Tooltip from '@material-ui/core/Tooltip';import Button from '@material-ui/core/Button';import DeleteIcon from '@material-ui/icons/Delete';const useStyles = makeStyles(theme => ({  customTooltip: {    // I used the rgba color for the standard "secondary" color    backgroundColor: 'rgba(220, 0, 78, 0.8)',  },  customArrow: {    color: 'rgba(220, 0, 78, 0.8)',  },});export default TooltipExample = () => {  const classes = useStyles();  return (    <>      <Tooltip        classes={{          tooltip: classes.customTooltip,          arrow: classes.customArrow        }}        title="Delete"        arrow      >        <Button color="secondary"><DeleteIcon /></Button>      </Tooltip>    </>  );};