--- title: Tooltip frameworkTitle: html: media-tooltip description: A tooltip component for displaying contextual labels on hover and focus --- import ComponentReference from "@/components/docs/api-reference/ComponentReference.astro"; import FrameworkCase from "@/components/docs/FrameworkCase.astro"; import StyleCase from "@/components/docs/StyleCase.astro"; import Demo from "@/components/docs/demos/Demo.astro"; {/* React demos */} import BasicUsageDemoReact from "@/components/docs/demos/tooltip/react/css/BasicUsage"; import basicUsageReactTsx from "@/components/docs/demos/tooltip/react/css/BasicUsage.tsx?raw"; import basicUsageReactCss from "@/components/docs/demos/tooltip/react/css/BasicUsage.css?raw"; import GroupingDemoReact from "@/components/docs/demos/tooltip/react/css/Grouping"; import groupingReactTsx from "@/components/docs/demos/tooltip/react/css/Grouping.tsx?raw"; import groupingReactCss from "@/components/docs/demos/tooltip/react/css/Grouping.css?raw"; {/* HTML demos */} import BasicUsageDemoHtml from "@/components/docs/demos/tooltip/html/css/BasicUsage.astro"; import basicUsageHtml from "@/components/docs/demos/tooltip/html/css/BasicUsage.html?raw"; import basicUsageHtmlCss from "@/components/docs/demos/tooltip/html/css/BasicUsage.css?raw"; import basicUsageHtmlTs from "@/components/docs/demos/tooltip/html/css/BasicUsage.ts?raw"; import GroupingDemoHtml from "@/components/docs/demos/tooltip/html/css/Grouping.astro"; import groupingHtml from "@/components/docs/demos/tooltip/html/css/Grouping.html?raw"; import groupingHtmlCss from "@/components/docs/demos/tooltip/html/css/Grouping.css?raw"; import groupingHtmlTs from "@/components/docs/demos/tooltip/html/css/Grouping.ts?raw"; ## Anatomy ```tsx Hover me Label text ``` ```html Label text ``` ## Behavior Displays a short label anchored to a trigger element. Opens after a configurable `delay` (default 600ms) on hover or immediately on focus. Closes when the pointer leaves or focus moves away, with an optional `closeDelay`. The `side` and `align` props control placement relative to the trigger. Positioning uses CSS Anchor Positioning where supported, with a JavaScript measurement fallback. The component is composed from four parts: `Root` manages state and context, `Trigger` renders a button that activates the tooltip, `Popup` contains the label content, and `Arrow` renders a decorative pointer. Wrap multiple tooltips in a `Tooltip.Provider` to coordinate open/close timing across a group — once a tooltip becomes visible, adjacent tooltips open instantly within the `timeout` window, skipping the normal `delay`. The `` element is the popup itself. Link it to a trigger using the `commandfor` attribute on any button, pointing to the tooltip's `id`. The element discovers its trigger automatically and manages open/close state, ARIA attributes, and positioning. Wrap tooltip trigger/popup pairs in `` to coordinate timing — the group's `delay`, `close-delay`, and `timeout` attributes control shared timing for all contained tooltips. ## Styling Use [CSS custom properties](#root-css-custom-properties) for positioning offsets: ```css media-tooltip { --media-tooltip-side-offset: 8px; --media-tooltip-align-offset: 0px; } ``` React renders standard DOM elements. Add a `className` to style them: ```css .tooltip-popup { --media-tooltip-side-offset: 8px; --media-tooltip-align-offset: 0px; } ``` Style based on open state and transition phases: ```css media-tooltip[data-open] { display: block; } media-tooltip[data-starting-style] { opacity: 0; } media-tooltip[data-ending-style] { opacity: 0; } media-tooltip[data-side="top"] { transform-origin: bottom center; } media-tooltip[data-side="bottom"] { transform-origin: top center; } ``` ```css .tooltip-popup[data-open] { display: block; } .tooltip-popup[data-starting-style] { opacity: 0; } .tooltip-popup[data-ending-style] { opacity: 0; } .tooltip-popup[data-side="top"] { transform-origin: bottom center; } .tooltip-popup[data-side="bottom"] { transform-origin: top center; } ``` ## Accessibility The trigger receives `aria-describedby` pointing to the popup when open. The popup renders with `role="tooltip"` and `popover="manual"`. Tooltips open on focus and close when focus leaves, ensuring keyboard-only users can access the label. ## Examples ### Basic Usage ### Grouping Wrap multiple tooltips in a `Tooltip.Provider` to share a delay group. Once a tooltip becomes visible, adjacent tooltips open instantly within the `timeout` window, skipping the normal `delay`. Wrap tooltip trigger/popup pairs in `` to coordinate timing. The group's `delay`, `close-delay`, and `timeout` attributes control shared timing for all contained tooltips.