The accessible, human friendly label to use for
screen readers.
If passed, tooltip will show the content label
but expose only `aria-label` to assistive technologies
Tooltip
A tooltip is a brief, informative message that appears when a user interacts with an element.
Import#
import { Tooltip } from '@chakra-ui/react'
Usage#
If the children of Tooltip is a string, we wrap with in a span with
tabIndex set to 0, to ensure it meets the accessibility requirements.
Note 🚨: If the
Tooltipis wrapping a functional component, ensure that the functional component accepts arefusingforwardRef.
Using custom components#
const CustomCard = React.forwardRef(({ children, ...rest }, ref) => (<Box p="1"><Tag ref={ref} {...rest}>{children}</Tag></Box>))const CustomToolTip = () => (<Tooltip label="Hover me"><CustomCard>Tag Here</CustomCard></Tooltip>)render(<CustomToolTip />)
<Tooltip label="Hey, I'm here!" aria-label="A tooltip">Hover me</Tooltip>
With an icon#
<Tooltip label="Phone number" fontSize="md"><PhoneIcon /></Tooltip>
Note 🚨: If you're wrapping an icon from
react-icons, you need to also wrap the icon in aspanelement asreact-iconsicons do not useforwardRef.
With arrow#
<Tooltip hasArrow label="Search places" bg="gray.300" color="black"><SearchIcon /></Tooltip>
Tooltip with focusable content#
If the children of the tooltip is a focusable element, the tooltip will show when you focus or hover on the element, and will hide when you blur or move cursor out of the element.
<Tooltip hasArrow label="Search places" bg="red.600"><Button>Button</Button></Tooltip>
Disabling Tooltip#
To disable showing a tooltip, pass the isDisabled prop to the Tooltip
component.
<Tooltip isDisabled><SearchIcon /></Tooltip>
Placement#
Using the placement prop you can adjust where your tooltip will be displayed.
<VStack spacing={6}><HStack spacing={6}><Tooltip label="Auto start" placement="auto-start"><Button>Auto-Start</Button></Tooltip><Tooltip label="Auto" placement="auto"><Button>Auto</Button></Tooltip><Tooltip label="Auto end" placement="auto-end"><Button>Auto-End</Button></Tooltip></HStack><HStack spacing={6}><Tooltip label="Top start" placement="top-start"><Button>Top-Start</Button></Tooltip><Tooltip label="Top" placement="top"><Button>Top</Button></Tooltip><Tooltip label="Top end" placement="top-end"><Button>Top-End</Button></Tooltip></HStack><HStack spacing={6}><Tooltip label="Right start" placement="right-start"><Button>Right-Start</Button></Tooltip><Tooltip label="Right" placement="right"><Button>Right</Button></Tooltip><Tooltip label="Right end" placement="right-end"><Button>Right-End</Button></Tooltip></HStack><HStack spacing={6}><Tooltip label="Bottom start" placement="bottom-start"><Button>Bottom Start</Button></Tooltip><Tooltip label="Bottom" placement="bottom"><Button>Bottom</Button></Tooltip><Tooltip label="Bottom end" placement="bottom-end"><Button>Bottom End</Button></Tooltip></HStack><HStack spacing={6}><Tooltip label="Left start" placement="left-start"><Button>Left-Start</Button></Tooltip><Tooltip label="Left" placement="left"><Button>Left</Button></Tooltip><Tooltip label="Left end" placement="left-end"><Button>Left-End</Button></Tooltip></HStack></VStack>
More examples#
<Wrap spacing={6}><WrapItem><Tooltip label="I close on click"><Button>Close on Click - true(default)</Button></Tooltip></WrapItem><WrapItem><Tooltip label="I don't close on click" closeOnClick={false}><Button>Close on Click - false</Button></Tooltip></WrapItem><WrapItem><Tooltip label="I am always open" placement="top" isOpen><Button>Always Open</Button></Tooltip></WrapItem><WrapItem><Tooltip label="I am open by default" placement="left" defaultIsOpen><Button>Open on startup</Button></Tooltip></WrapItem><WrapItem><Tooltip label="Opened after 500ms" openDelay={500}><Button>Delay Open - 500ms</Button></Tooltip></WrapItem><WrapItem><Tooltip label="Closed after 500ms" closeDelay={500}><Button>Delay Close - 500ms</Button></Tooltip></WrapItem><WrapItem><Tooltip label="I have 15px arrow" hasArrow arrowSize={15}><Button>Arrow size - 15px</Button></Tooltip></WrapItem></Wrap>
Props#
aria-label
aria-labelstringarrowPadding
arrowPaddingThe padding required to prevent the arrow from reaching the very edge of the popper.
number8arrowShadowColor
arrowShadowColorstringarrowSize
arrowSizenumber10closeDelay
closeDelayDelay (in ms) before hiding the tooltip
number0mscloseOnClick
closeOnClickIf true, the tooltip will hide on click
booleancloseOnEsc
closeOnEscIf true, the tooltip will hide on pressing Esc key
booleancloseOnMouseDown
closeOnMouseDownIf true, the tooltip will hide while the mouse is down
booleancloseOnPointerDown
closeOnPointerDownIf true, the tooltip will hide while the pointer is down
booleancloseOnScroll
closeOnScrollbooleandefaultIsOpen
defaultIsOpenIf true, the tooltip will be initially shown
booleandirection
directionTheme direction ltr or rtl. Popper's placement will
be set accordingly
"ltr" | "rtl"ltrgutter
gutterThe distance or margin between the reference and popper.
It is used internally to create an offset modifier.
NB: If you define offset prop, it'll override the gutter.
number8hasArrow
hasArrowIf true, the tooltip will show an arrow tip
booleanisDisabled
isDisabledbooleanisOpen
isOpenIf true, the tooltip will be shown (in controlled mode)
booleanlabel
labelThe label of the tooltip
type ONLY_FOR_FORMAT =
| string
| number
| boolean
| ReactElement<any, string | JSXElementConstructor<any>>
| ReactFragment
| ReactPortalmodifiers
modifiersArray of popper.js modifiers. Check the docs to see the list of possible modifiers you can pass.
Partial<Modifier<string, any>>[]motionProps
motionPropsHTMLMotionProps<"div">offset
offsetThe main and cross-axis offset to displace popper element from its reference element.
[number, number]onClose
onCloseCallback to run when the tooltip hides
() => voidonOpen
onOpenCallback to run when the tooltip shows
() => voidopenDelay
openDelayDelay (in ms) before showing the tooltip
number0msplacement
placementThe placement of the popper relative to its reference.
PlacementWithLogicalbottomportalProps
portalPropsProps to be forwarded to the portal component
Pick<
PortalProps,
"appendToParentPortal" | "containerRef"
>shouldWrapChildren
shouldWrapChildrenIf true, the tooltip will wrap its children
in a `<span/>` with `tabIndex=0`
boolean