Tooltip

A popup that appears when an element is hovered or focused, showing a hint for sighted users.

API reference

Import the component and assemble its parts:

Anatomy
import { Tooltip } from '@base-ui-components/react/tooltip';
<Tooltip.Provider>  <Tooltip.Root>    <Tooltip.Trigger />    <Tooltip.Portal>      <Tooltip.Positioner>        <Tooltip.Popup>          <Tooltip.Arrow />        </Tooltip.Popup>      </Tooltip.Positioner>    </Tooltip.Portal>  </Tooltip.Root></Tooltip.Provider>

Provider

Provides a shared delay for multiple tooltips. The grouping logic ensures that once a tooltip becomes visible, the adjacent tooltips will be shown instantly.

PropTypeDefault
delay

number

undefined

closeDelay

number

undefined

timeout

number

400

Root

Groups all parts of the tooltip. Doesn’t render its own HTML element.

PropTypeDefault
defaultOpen

boolean

false

open

boolean

undefined

onOpenChange

(open, event, reason) => void

undefined

trackCursorAxis

'none' | 'x' | 'y' | 'both'

'none'

delay

number

600

closeDelay

number

0

hoverable

boolean

true

Trigger

An element to attach the tooltip to. Renders a <button> element.

PropTypeDefault
className

string | (state) => string

undefined

render

| React.ReactElement
| (props, state) => React.ReactElement

undefined

Attribute
Description
data-popup-open

Portal

A portal element that moves the popup to a different part of the DOM. By default, the portal element is appended to <body>.

PropTypeDefault
container

React.Ref | HTMLElement | null

undefined

keepMounted

boolean

false

Positioner

Positions the tooltip against the trigger. Renders a <div> element.

PropTypeDefault
align

'start' | 'center' | 'end'

'center'

alignOffset

number

0

side

| 'bottom'
| 'inline-end'
| 'inline-start'
| 'left'
| 'right'
| 'top'

'top'

sideOffset

number

0

arrowPadding

number

5

anchor

| React.Ref
| Element
| VirtualElement
| (() => Element | VirtualElement | null)
| null

undefined

collisionBoundary

| 'clipping-ancestors'
| Element
| Element[]
| Rect

'clipping-ancestors'

collisionPadding

number | Rect

5

sticky

boolean

false

positionMethod

'absolute' | 'fixed'

'absolute'

className

string | (state) => string

undefined

keepMounted

boolean

false

render

| React.ReactElement
| (props, state) => React.ReactElement

undefined

Attribute
Description
data-open
data-closed
data-anchor-hidden
data-side
CSS Variable
Description
--anchor-height
--anchor-width
--available-height
--available-width
--transform-origin

A container for the tooltip contents. Renders a <div> element.

PropTypeDefault
className

string | (state) => string

undefined

render

| React.ReactElement
| (props, state) => React.ReactElement

undefined

Attribute
Description
data-open
data-closed
data-instant
data-side
data-starting-style
data-ending-style

Arrow

Displays an element positioned against the tooltip anchor. Renders a <div> element.

PropTypeDefault
className

string | (state) => string

undefined

render

| React.ReactElement
| (props, state) => React.ReactElement

undefined

Attribute
Description
data-open
data-closed
data-uncentered
data-anchor-hidden
data-side