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 v151. Partial support Missing: popover-hint.

Always Visible

Floating content that is always shown.

Floating content
<script setup lang="ts">
import { Anchor } from "opui-css/vue"
</script>
<template>
<Anchor>
<button>Hover me</button>
<template #anchored
><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
></template
>
</Anchor>
</template>
<span class="ui-anchor" style=""
><!--[--><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

Set trigger="hover". The component adds interestfor and popover="hint" declaratively.

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

Tooltip content
<script setup lang="ts">
import { Anchor } from "opui-css/vue"
</script>
<template>
<Anchor trigger="hover" id="anchor-hover">
<button
interestfor="anchor-hover"
commandfor="anchor-hover"
command="toggle-popover"
>
Hover me
</button>
<template #anchored
><span
><div class="ui-card ui-elevated">Tooltip content</div></span
></template
>
</Anchor>
</template>
<span class="ui-anchor" style="" id="anchor-hover"
><span interestfor="s1-0"
><!--[--><button
interestfor="anchor-hover"
commandfor="anchor-hover"
command="toggle-popover"
>
Hover me</button
><!--]--></span
><span class="ui-anchor-floating" id="s1-0" popover="hint"
><!--[--><span><div class="ui-card ui-elevated">Tooltip content</div></span
><!--]--></span
></span
>

Used By

API

Prop Type Default Description
alignment string "start end" Any valid position-area value. Controls where the floating content is placed.
trigger "always" | "hover" "always" When set to "hover", wraps the anchor slot in an interestfor invoker and uses popover="hint" on the floating element.

Browser support

Full support Supported since v144. Full support Supported since v151. 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);
}
}
}