Skip to main content

Theme config

Theme mode

Color palette

Grays

Border radii/radiuses/radiopedes/you know
Border radius
Field border radius
Button border radius
All
Components
Guides
API
Recent

Components

Anchor

A structural primitive to enable CSS Anchor Positioning on stuff.

Full support Supported since v144. Full support Supported since v149. Partial support Missing: popover-hint.

Always Visible

Floating content that is always shown.

Floating content
<span class="ui-anchor">
<button>Hover me</button>
<span class="ui-anchor-floating">
<span
style="
background: var(--surface-2);
padding: var(--size-2) var(--size-3);
border-radius: var(--radius-2);
box-shadow: var(--shadow-3);
"
>Floating content</span
>
</span>
</span>

Hover Trigger

Add interestfor on the trigger element pointing to the .ui-anchor-floating ID.

Add interestfor, commandfor, and command="toggle-popover" to the anchor trigger so touch devices can tap to show the floating content.

Tooltip content
<span class="ui-anchor">
<button
interestfor="anchor-hover-1"
commandfor="anchor-hover-1"
command="toggle-popover"
>
Hover me
</button>
<span class="ui-anchor-floating" id="anchor-hover-1" popover="hint">
<div class="ui-card ui-elevated">Tooltip content</div>
</span>
</span>

Used By

API

Type Modifiers Default Description
Container .ui-anchor - Wrapper element. Provides anchor-scope and sets anchor-name on its first child.
Floating .ui-anchor-floating - Positioned floating element. Uses position-anchor and position-area.
Position --anchor-position-area start end CSS custom property. Any valid position-area value.
Trigger data-trigger="hover" - Shows floating content on hover/focus. Add interestfor on the trigger element pointing to the .ui-anchor-floating ID.

Browser support

Full support Supported since v144. Full support Supported since v149. Partial support Missing: popover-hint.

See also the full browser support guide.

Installation

@layer components.root {
:where(.ui-anchor) {
anchor-name: --anchor;
anchor-scope: --anchor;
display: inline-block;
inline-size: fit-content;
/* Always-visible */
& > .ui-anchor-floating:not([popover]) {
block-size: max-content;
inline-size: max-content;
position: absolute;
position-anchor: --anchor;
position-area: var(--anchor-position-area, start end);
translate: var(--_anchor-tx, 0) var(--_anchor-ty, 0);
}
/* Hover-triggered */
& > .ui-anchor-floating[popover] {
inset: unset;
margin: 0;
position: absolute;
position-area: var(--anchor-position-area, start end);
translate: var(--_anchor-tx, 0) var(--_anchor-ty, 0);
}
}
}