---
title: Tooltip
description: >-
The Tooltip component displays helpful information in a small floating label
when users hover over or focus on an element. Use tooltips to provide
additional context or clarify terms without cluttering the interface.
api_version: 2025-07
api_name: customer-account-ui-extensions
source_url:
html: >-
https://shopify.dev/docs/api/customer-account-ui-extensions/2025-07/ui-components/overlays/tooltip
md: >-
https://shopify.dev/docs/api/customer-account-ui-extensions/2025-07/ui-components/overlays/tooltip.md
---
Migrate to Polaris
Version 2025-07 is the last API version to support React-based UI components. Later versions use [web components](https://shopify.dev/docs/api/customer-account-ui-extensions/latest/polaris-web-components), native UI elements with built-in accessibility, better performance, and consistent styling with [Shopify's design system](https://shopify.dev/docs/apps/design). Check out the [migration guide](https://shopify.dev/docs/apps/build/customer-accounts/migrate-to-web-components) to upgrade your extension.
# Tooltip
The Tooltip component displays helpful information in a small floating label when users hover over or focus on an element. Use tooltips to provide additional context or clarify terms without cluttering the interface.
The library automatically applies the [WAI-ARIA Tooltip Widget pattern](https://www.w3.org/WAI/ARIA/apg/patterns/tooltip/) to both the activator and the tooltip content. Expect screen readers to read the tooltip content when the user focuses the activator. For interactive content like links or buttons, use [Popover](https://shopify.dev/docs/api/customer-account-ui-extensions/2025-07/ui-components/overlays/popover) instead.
### Support Targets (25)
### Supported targets
* CustomerAccount::KitchenSink
* [customer-account.footer.render-after](https://shopify.dev/docs/api/customer-account-ui-extensions/2025-07/targets/footer#footer-render-after-)
* [customer-account.order-index.announcement.render](https://shopify.dev/docs/api/customer-account-ui-extensions/2025-07/targets/order-index#order-index-targets)
* [customer-account.order-index.block.render](https://shopify.dev/docs/api/customer-account-ui-extensions/2025-07/targets/order-index#order-index-block-)
* [customer-account.order-status.announcement.render](https://shopify.dev/docs/api/customer-account-ui-extensions/2025-07/targets/order-status#order-status-announcement-)
* [customer-account.order-status.block.render](https://shopify.dev/docs/api/customer-account-ui-extensions/2025-07/targets/order-status#order-status-block-)
* [customer-account.order-status.cart-line-item.render-after](https://shopify.dev/docs/api/customer-account-ui-extensions/2025-07/targets/order-status#cart-line-item-render-after-)
* [customer-account.order-status.cart-line-list.render-after](https://shopify.dev/docs/api/customer-account-ui-extensions/2025-07/targets/order-status#cart-line-list-render-after-)
* [customer-account.order-status.customer-information.render-after](https://shopify.dev/docs/api/customer-account-ui-extensions/2025-07/targets/order-status#customer-information-render-after-)
* [customer-account.order-status.fulfillment-details.render-after](https://shopify.dev/docs/api/customer-account-ui-extensions/2025-07/targets/fulfillment-status#fulfillment-status-targets)
* [customer-account.order-status.payment-details.render-after](https://shopify.dev/docs/api/customer-account-ui-extensions/2025-07/targets/payments-and-returns#payments-and-returns-targets)
* [customer-account.order-status.return-details.render-after](https://shopify.dev/docs/api/customer-account-ui-extensions/2025-07/targets/payments-and-returns#return-details-render-after-)
* [customer-account.order-status.unfulfilled-items.render-after](https://shopify.dev/docs/api/customer-account-ui-extensions/2025-07/targets/fulfillment-status#unfulfilled-items-render-after-)
* [customer-account.order.action.menu-item.render](https://shopify.dev/docs/api/customer-account-ui-extensions/2025-07/targets/order-actions#order-action-menu-item-)
* [customer-account.order.action.render](https://shopify.dev/docs/api/customer-account-ui-extensions/2025-07/targets/order-actions#order-action-)
* [customer-account.order.page.render](https://shopify.dev/docs/api/customer-account-ui-extensions/2025-07/targets/full-page#order-specific-full-page-)
* [customer-account.page.render](https://shopify.dev/docs/api/customer-account-ui-extensions/2025-07/targets/full-page#customer-account-full-page-)
* [customer-account.profile.addresses.render-after](https://shopify.dev/docs/api/customer-account-ui-extensions/2025-07/targets/profile-page-default#profile-page-default-targets-)
* [customer-account.profile.announcement.render](https://shopify.dev/docs/api/customer-account-ui-extensions/2025-07/targets/profile-page-default#announcement-)
* [customer-account.profile.block.render](https://shopify.dev/docs/api/customer-account-ui-extensions/2025-07/targets/profile-page-default#profile-block-)
* [customer-account.profile.company-details.render-after](https://shopify.dev/docs/api/customer-account-ui-extensions/2025-07/targets/profile-page-b2b#profile-page-b2b-targets-)
* [customer-account.profile.company-location-addresses.render-after](https://shopify.dev/docs/api/customer-account-ui-extensions/2025-07/targets/profile-page-b2b#company-location-addresses-render-after-)
* [customer-account.profile.company-location-payment.render-after](https://shopify.dev/docs/api/customer-account-ui-extensions/2025-07/targets/profile-page-b2b#company-location-payment-render-after-)
* [customer-account.profile.company-location-staff.render-after](https://shopify.dev/docs/api/customer-account-ui-extensions/2025-07/targets/profile-page-b2b#company-location-staff-render-after-)
* customer-account.profile.payment.render-after
#### Use cases
* **Icon labels:** Describe the purpose of icon-only buttons so customers understand what each action does.
* **Term definitions:** Clarify unfamiliar terms, abbreviations, or statuses inline without adding permanent text.
* **Supplementary details:** Surface secondary information like estimated delivery dates or status explanations on demand.
* **Accessible descriptions:** Provide text alternatives for visual elements that screen readers can announce.
***
## Properties
Configure the following properties on the Tooltip component.
* **id**
**string**
A unique identifier for the component. Use this to target the component in scripts or stylesheets, or to distinguish it from other instances of the same component.
***
## Examples
### Add context to an icon
Attach a tooltip to an info icon to provide supplementary information on hover. This example shows a tooltip triggered by a pressable icon that explains why contact information is needed.
## Add context to an icon

## Add context to an icon
##### React
```tsx
import {
reactExtension,
Icon,
Pressable,
Tooltip,
} from '@shopify/ui-extensions-react/customer-account';
export default reactExtension(
'customer-account.page.render',
() => ,
);
function Extension() {
return (
In case we need to contact you about
your order
}
>
);
}
```
##### JS
```js
import {
extension,
Icon,
Pressable,
Tooltip,
} from '@shopify/ui-extensions/customer-account';
export default extension('customer-account.page.render', (root) => {
const tooltipFragment = root.createFragment();
const tooltip = root.createComponent(
Tooltip,
{},
'In case we need to contact you about your order',
);
tooltipFragment.appendChild(tooltip);
const pressable = root.createComponent(
Pressable,
{overlay: tooltipFragment},
[root.createComponent(Icon, {source: 'questionFill'})],
);
root.appendChild(pressable);
});
```
### Describe icon buttons
Add tooltips to icon-only elements to clarify their purpose and provide an accessible description. This example shows tooltips on delivery tracking and help icons.
## Describe icon buttons
##### React
```tsx
import {
reactExtension,
Icon,
InlineStack,
Pressable,
Tooltip,
} from '@shopify/ui-extensions-react/customer-account';
export default reactExtension(
'customer-account.order-status.block.render',
() => ,
);
function Extension() {
return (
Track your delivery
}
>
Get help with this order
}
>
);
}
```
##### JS
```js
import {
extension,
Icon,
InlineStack,
Pressable,
Tooltip,
} from '@shopify/ui-extensions/customer-account';
export default extension(
'customer-account.order-status.block.render',
(root) => {
const tooltip1Fragment = root.createFragment();
const tooltip1 = root.createComponent(
Tooltip,
{},
'Track your delivery',
);
tooltip1Fragment.appendChild(tooltip1);
const tooltip2Fragment = root.createFragment();
const tooltip2 = root.createComponent(
Tooltip,
{},
'Get help with this order',
);
tooltip2Fragment.appendChild(tooltip2);
const stack = root.createComponent(
InlineStack,
{spacing: 'base'},
[
root.createComponent(
Pressable,
{overlay: tooltip1Fragment},
[root.createComponent(Icon, {source: 'delivery'})],
),
root.createComponent(
Pressable,
{overlay: tooltip2Fragment},
[root.createComponent(Icon, {source: 'questionFill'})],
),
],
);
root.appendChild(stack);
},
);
```
### Explain a status badge
Wrap a badge in a pressable element with a tooltip to explain what a status means. This example shows a "Processing" badge with a tooltip that describes the next steps for the customer.
## Explain a status badge
##### React
```tsx
import {
reactExtension,
Badge,
Pressable,
Tooltip,
} from '@shopify/ui-extensions-react/customer-account';
export default reactExtension(
'customer-account.order-status.block.render',
() => ,
);
function Extension() {
return (
Your order is being prepared and will
ship within 1–2 business days
}
>
Processing
);
}
```
##### JS
```js
import {
extension,
Badge,
Pressable,
Tooltip,
} from '@shopify/ui-extensions/customer-account';
export default extension(
'customer-account.order-status.block.render',
(root) => {
const tooltipFragment = root.createFragment();
const tooltip = root.createComponent(
Tooltip,
{},
'Your order is being prepared and will ship within 1\u20132 business days',
);
tooltipFragment.appendChild(tooltip);
const pressable = root.createComponent(
Pressable,
{overlay: tooltipFragment},
[root.createComponent(Badge, {tone: 'info'}, 'Processing')],
);
root.appendChild(pressable);
},
);
```
***
## Best practices
* **Reserve tooltips for non-essential information:** The component works best for supplementary details that enhance understanding without being critical. Never hide essential information, errors, or required instructions in tooltips.
* **Add tooltips to icon-only elements:** Icon buttons need tooltips to clarify what they do. Include the element's action to help customers work efficiently.
* **Keep tooltip content brief and clear:** Aim for a short sentence or phrase. Long tooltip content is hard to read and suggests the information might need a more prominent placement in the UI.
* **Reconsider your design if many tooltips are needed:** If you're adding many tooltips to explain your interface, the design itself might be unclear. Improve labels, layout, or information architecture instead.
* **Design for touch-device fallbacks:** If the information is important enough to need a tooltip, consider making it visible by default on mobile.
***
## Limitations
* Tooltips only appear on devices with a mouse or trackpad. They don't work on touch devices like phones and tablets, which limits their usefulness for mobile customers.
* Tooltips can't contain interactive elements like links or buttons. They dismiss when the user moves away, making interaction impossible.
* The component doesn't provide built-in positioning controls. Tooltip placement is automatic and might not always appear in the ideal location for complex layouts.
***