Tooltip
<sl-tooltip> | SlTooltip
            Tooltips display additional information based on a specific action.
A tooltip’s target is its first child element, so you should only wrap one element inside of the tooltip. If you need the tooltip to show up for multiple elements, nest them inside a container first.
            Tooltips use display: contents so they won’t interfere with how elements are positioned in a
            flex or grid layout.
          
<sl-tooltip content="This is a tooltip"> <sl-button>Hover Me</sl-button> </sl-tooltip>
Examples
Placement
Use the placement attribute to set the preferred placement of the tooltip.
<div class="tooltip-placement-example"> <div class="tooltip-placement-example-row"> <sl-tooltip content="top-start" placement="top-start"> <sl-button></sl-button> </sl-tooltip> <sl-tooltip content="top" placement="top"> <sl-button></sl-button> </sl-tooltip> <sl-tooltip content="top-end" placement="top-end"> <sl-button></sl-button> </sl-tooltip> </div> <div class="tooltip-placement-example-row"> <sl-tooltip content="left-start" placement="left-start"> <sl-button></sl-button> </sl-tooltip> <sl-tooltip content="right-start" placement="right-start"> <sl-button></sl-button> </sl-tooltip> </div> <div class="tooltip-placement-example-row"> <sl-tooltip content="left" placement="left"> <sl-button></sl-button> </sl-tooltip> <sl-tooltip content="right" placement="right"> <sl-button></sl-button> </sl-tooltip> </div> <div class="tooltip-placement-example-row"> <sl-tooltip content="left-end" placement="left-end"> <sl-button></sl-button> </sl-tooltip> <sl-tooltip content="right-end" placement="right-end"> <sl-button></sl-button> </sl-tooltip> </div> <div class="tooltip-placement-example-row"> <sl-tooltip content="bottom-start" placement="bottom-start"> <sl-button></sl-button> </sl-tooltip> <sl-tooltip content="bottom" placement="bottom"> <sl-button></sl-button> </sl-tooltip> <sl-tooltip content="bottom-end" placement="bottom-end"> <sl-button></sl-button> </sl-tooltip> </div> </div> <style> .tooltip-placement-example { width: 250px; margin: 1rem; } .tooltip-placement-example-row:after { content: ''; display: table; clear: both; } .tooltip-placement-example sl-button { float: left; width: 2.5rem; margin-right: 0.25rem; margin-bottom: 0.25rem; } .tooltip-placement-example-row:nth-child(1) sl-tooltip:first-child sl-button, .tooltip-placement-example-row:nth-child(5) sl-tooltip:first-child sl-button { margin-left: calc(40px + 0.25rem); } .tooltip-placement-example-row:nth-child(2) sl-tooltip:nth-child(2) sl-button, .tooltip-placement-example-row:nth-child(3) sl-tooltip:nth-child(2) sl-button, .tooltip-placement-example-row:nth-child(4) sl-tooltip:nth-child(2) sl-button { margin-left: calc((40px * 3) + (0.25rem * 3)); } </style>
Shortcut
            Set the shortcut attribute to true to make shortcut commands visible in the
            tooltip window.
          
<sl-tooltip> <sl-button>Hover Me</sl-button> <div slot="content"> Open project <sl-tag size="small" variant="neutral">Ctrl + P</sl-tag> </div> </sl-tooltip> <sl-tooltip> <sl-button>Mac Style</sl-button> <div slot="content"> Save file <sl-tag size="small" variant="neutral">⌘ + S</sl-tag> </div> </sl-tooltip> <sl-tooltip> <sl-button>Windows Style</sl-button> <div slot="content"> Find in files <sl-tag size="small" variant="neutral">Ctrl + Shift + F</sl-tag> </div> </sl-tooltip>
Click Trigger
            Set the trigger attribute to click to toggle the tooltip on click instead of
            hover.
          
<sl-tooltip content="Click again to dismiss" trigger="click"> <sl-button>Click to Toggle</sl-button> </sl-tooltip>
Manual Trigger
            Tooltips can be controlled programmatically by setting the trigger attribute to
            manual. Use the open attribute to control when the tooltip is shown.
          
<sl-button style="margin-right: 4rem;">Toggle Manually</sl-button> <sl-tooltip content="This is an avatar" trigger="manual" class="manual-tooltip"> <sl-avatar label="User"></sl-avatar> </sl-tooltip> <script> const tooltip = document.querySelector('.manual-tooltip'); const toggle = tooltip.previousElementSibling; toggle.addEventListener('click', () => (tooltip.open = !tooltip.open)); </script>
Removing Arrows
            You can control the size of tooltip arrows by overriding the --sl-tooltip-arrow-size design
            token. To remove them, set the value to 0 as shown below.
          
<sl-tooltip content="This is a tooltip" style="--sl-tooltip-arrow-size: 0;"> <sl-button>No Arrow</sl-button> </sl-tooltip>
To override it globally, set it in a root block in your stylesheet after the Shoelace stylesheet is loaded.
:root { --sl-tooltip-arrow-size: 0; }
HTML in Tooltips
            Use the content slot to create tooltips with HTML content. Tooltips are designed only for text
            and presentational elements. Avoid placing interactive content, such as buttons, links, and form controls,
            in a tooltip.
          
<sl-tooltip> <div slot="content">I'm not <strong>just</strong> a tooltip, I'm a <em>tooltip</em> with HTML!</div> <sl-button>Hover me</sl-button> </sl-tooltip>
Setting a Maximum Width
            Use the --max-width custom property to change the width the tooltip can grow to before wrapping
            occurs.
          
<sl-tooltip style="--max-width: 80px;" content="This tooltip will wrap after only 80 pixels."> <sl-button>Hover me</sl-button> </sl-tooltip>
Hoisting
            Tooltips will be clipped if they’re inside a container that has overflow: auto|hidden|scroll.
            The hoist attribute forces the tooltip to use a fixed positioning strategy, allowing it to
            break out of the container. In this case, the tooltip will be positioned relative to its
            containing block, which is usually the viewport unless an ancestor uses a transform, perspective,
            or filter.
            Refer to this page
            for more details.
          
<div class="tooltip-hoist"> <sl-tooltip content="This is a tooltip"> <sl-button>No Hoist</sl-button> </sl-tooltip> <sl-tooltip content="This is a tooltip" hoist> <sl-button>Hoist</sl-button> </sl-tooltip> </div> <style> .tooltip-hoist { position: relative; border: solid 2px var(--sl-panel-border-color); overflow: hidden; padding: var(--sl-spacing-medium); } </style>
Slots
| Name | Description | 
|---|---|
| (default) | The tooltip’s target element. Avoid slotting in more than one element, as subsequent ones will be ignored. | 
| content | The content to render in the tooltip. Alternatively, you can use the contentattribute. | 
Learn more about using slots.
Properties
| Name | Description | Reflects | Type | Default | 
|---|---|---|---|---|
| content | The tooltip’s content. If you need to display HTML, use the contentslot instead. | string | '' | |
| placement | The preferred placement of the tooltip. Note that the actual placement may vary as needed to keep the tooltip inside of the viewport. | 
                      'top' | 'top-start' | 'top-end' | 'right' | 'right-start' | 'right-end' | 'bottom' |
                      'bottom-start' | 'bottom-end' | 'left' | 'left-start' | 'left-end' | 'top' | |
| disabled | Disables the tooltip so it won’t show when triggered. |  | boolean | false | 
| distance | The distance in pixels from which to offset the tooltip away from its target. | number | 8 | |
| open | Indicates whether or not the tooltip is open. You can use this in lieu of the show/hide methods. |  | boolean | false | 
| skidding | The distance in pixels from which to offset the tooltip along its target. | number | 0 | |
| trigger | Controls how the tooltip is activated. Possible options include click,hover,focus, andmanual. Multiple options can be passed by
                    separating them with a space. When manual is used, the tooltip must be activated programmatically. | string | 'hover focus' | |
| hoist | Enable this option to prevent the tooltip from being clipped when the component is placed inside a
                    container with overflow: auto|hidden|scroll. Hoisting uses a fixed positioning strategy that works in
                    many, but not all, scenarios. | boolean | false | |
| updateComplete | A read-only promise that resolves when the component has finished updating. | 
Learn more about attributes and properties.
Events
| Name | React Event | Description | Event Detail | 
|---|---|---|---|
| sl-show |  | Emitted when the tooltip begins to show. | - | 
| sl-after-show |  | Emitted after the tooltip has shown and all animations are complete. | - | 
| sl-hide |  | Emitted when the tooltip begins to hide. | - | 
| sl-after-hide |  | Emitted after the tooltip has hidden and all animations are complete. | - | 
Learn more about events.
Methods
| Name | Description | Arguments | 
|---|---|---|
| show() | Shows the tooltip. | - | 
| hide() | Hides the tooltip | - | 
Learn more about methods.
Custom Properties
| Name | Description | Default | 
|---|---|---|
| --max-width | The maximum width of the tooltip before its content will wrap. | |
| --hide-delay | The amount of time to wait before hiding the tooltip when hovering. | |
| --show-delay | The amount of time to wait before showing the tooltip when hovering. | 
Learn more about customizing CSS custom properties.
Parts
| Name | Description | 
|---|---|
| base | The component’s base wrapper, an <sl-popup>element. | 
| base__popup | The popup’s exported popuppart. Use this to target the tooltip’s popup container. | 
| base__arrow | The popup’s exported arrowpart. Use this to target the tooltip’s arrow. | 
| body | The tooltip’s body where its content is rendered. | 
Learn more about customizing CSS parts.
Animations
| Name | Description | 
|---|---|
| tooltip.show | The animation to use when showing the tooltip. | 
| tooltip.hide | The animation to use when hiding the tooltip. | 
Learn more about customizing animations.
Dependencies
This component automatically imports the following dependencies.
- <sl-popup>