Material UI is a Material Design library made for React.
It’s a set of React components that have Material Design styles.
In this article, we’ll look at how to add tooltips with Material UI.
Simple Tooltips
We can add simple tooltips that display when we hover over another component.
For example, we can add a floating action button with the Fab
component.
Then we surround that with a Tooltip
to display a tooltip.
For example, we can write:
import React from "react";
import AddIcon from "@material-ui/icons/Add";
import Fab from "@material-ui/core/Fab";
import DeleteIcon from "@material-ui/icons/Delete";
import IconButton from "@material-ui/core/IconButton";
import Tooltip from "@material-ui/core/Tooltip";
export default function App() {
return (
<div>
<Tooltip title="Delete File">
<IconButton>
<DeleteIcon />
</IconButton>
</Tooltip>
<Tooltip title="Add Task">
<Fab color="primary">
<AddIcon />
</Fab>
</Tooltip>
</div>
);
}
to add tooltips with the Tooltip
component.
We can surround it around an IconButton
or a Fab
.
The title
has th content that’ll be displayed in the tooltip.
Positioned Tooltips
We can put the tooltip in the position we want.
For example, we can write:
import React from "react";
import AddIcon from "@material-ui/icons/Add";
import Fab from "@material-ui/core/Fab";
import DeleteIcon from "@material-ui/icons/Delete";
import IconButton from "@material-ui/core/IconButton";
import Tooltip from "@material-ui/core/Tooltip";
export default function App() {
return (
<div>
<Tooltip title="Delete File" placement="left-end">
<IconButton>
<DeleteIcon />
</IconButton>
</Tooltip>
<Tooltip title="Add Task" placement="left-start">
<Fab color="primary">
<AddIcon />
</Fab>
</Tooltip>
</div>
);
}
to add a placement
prop to each tooltip to change the placement.
Customized Tooltips
We can style our tooltips with the withStyles
function.
For example, we can write:
import React from "react";
import { withStyles } from "@material-ui/core/styles";
import DeleteIcon from "@material-ui/icons/Delete";
import IconButton from "@material-ui/core/IconButton";
import Tooltip from "@material-ui/core/Tooltip";
const LightTooltip = withStyles(theme => ({
tooltip: {
backgroundColor: theme.palette.common.white,
color: "green",
boxShadow: theme.shadows[1],
fontSize: 11
}
}))(Tooltip);
export default function App() {
return (
<div>
<LightTooltip title="Delete File" placement="left-end">
<IconButton>
<DeleteIcon />
</IconButton>
</LightTooltip>
</div>
);
}
We made the backgroundColor
white and the content color green.
Also, we change the fontSize
to 11.
We can also use the makeStyles
function to create classes that we can pass into the tooltip.
For example, we can write:
import React from "react";
import { makeStyles } from "@material-ui/core/styles";
import DeleteIcon from "@material-ui/icons/Delete";
import IconButton from "@material-ui/core/IconButton";
import Tooltip from "@material-ui/core/Tooltip";
const useStyles = makeStyles(theme => ({
arrow: {
color: theme.palette.common.black
},
tooltip: {
backgroundColor: theme.palette.common.black
}
}));
function BlackTooltip(props) {
const classes = useStyles();
return <Tooltip arrow classes={classes} {...props} />;
}
export default function App() {
return (
<div>
<BlackTooltip title="Delete File">
<IconButton>
<DeleteIcon />
</IconButton>
</BlackTooltip>
</div>
);
}
We created a BlackTooltip
component that adds some classes to the Tooltip
.
Now we have a black tooltip with a black arrow color as indicated in the arrow
and tooltip
properties.
Arrow Tooltips
To add an arrow to a tooltip, we can add the arrow
prop.
For example, we can write;
import React from "react";
import DeleteIcon from "@material-ui/icons/Delete";
import IconButton from "@material-ui/core/IconButton";
import Tooltip from "@material-ui/core/Tooltip";
export default function App() {
return (
<div>
<Tooltip title="Delete File" arrow>
<IconButton>
<DeleteIcon />
</IconButton>
</Tooltip>
</div>
);
}
We use the arrow
prop on the Tooltip
to add it.
Custom Child Element
To add a custom child element, we’ve to use the forwardRef
and return our component inside the callback.
This way, the DOM event listeners for the element are applied.
For example, we can write:
import React from "react";
import DeleteIcon from "@material-ui/icons/Delete";
import IconButton from "@material-ui/core/IconButton";
import Tooltip from "@material-ui/core/Tooltip";
const Content = React.forwardRef((props, ref) => {
return (
<div {...props} ref={ref}>
<IconButton>
<DeleteIcon />
</IconButton>
</div>
);
});
export default function App() {
return (
<div>
<Tooltip title="Delete File" arrow>
<Content />
</Tooltip>
</div>
);
}
to create a Content
component that we can put between the Tooltip
tags.
We put our content inside the forwardRef
callback so the tooltip will show properly.
Conclusion
We can create tooltips with various styles and positions.
The content can also be changed to show what we want.
The styling can be changed in various ways.