Skip to main content
Vuetify0 v1.0 is here
Vuetify0 Logo
Theme
Mode
Palettes
Accessibility
Vuetify One
Sign in to Vuetify One

Access premium tools across the Vuetify ecosystem — Bin, Play, Studio, and more.

Not a subscriber? See what's included

Popover

A headless component for creating popovers and tooltips using modern CSS anchor positioning.

Edit this page
Report a Bug
Open issues
View on GitHub
Copy Markdown

PreviewRenderlessIntermediateJul 19, 2026
Browser Support: CSS Anchor Positioning
Chrome 125+ Edge 125+ Firefox 147+ Safari 26+

The component works in all browsers, but automatic anchor positioning requires CSS Anchor Positioning support. In older browsers without it, you’ll need to position the popover manually or use Floating UI↗︎.

Usage

The Popover component leverages the CSS Anchor Positioning API to create popovers, tooltips, and dropdown menus without JavaScript-based positioning. It provides v-model support for open/closed state management.

This is a popover using CSS anchor positioning.

<script setup lang="ts">
  import { Popover } from '@vuetify/v0'
</script>

<template>
  <div class="flex justify-center">
    <Popover.Root>
      <Popover.Activator class="px-4 py-2 bg-primary text-on-primary rounded-md text-sm font-medium">
        Open Popover
      </Popover.Activator>

      <Popover.Content class="p-4 rounded-lg bg-surface border border-divider shadow-lg max-w-xs">
        <p class="text-sm text-on-surface">
          This is a popover using CSS anchor positioning.
        </p>
      </Popover.Content>
    </Popover.Root>
  </div>
</template>

Anatomy

vue
<script setup lang="ts">
  import { Popover } from '@vuetify/v0'
</script>

<template>
  <Popover.Root>
    <Popover.Activator />

    <Popover.Content />
  </Popover.Root>
</template>

Recipes

Positioning

Use position-area on Popover.Content to control where the popover appears relative to its anchor. Accepts any CSS position-area↗︎ value (default: 'bottom'):

vue
<template>
  <Popover.Content position-area="top">
    <!-- Appears above the anchor -->
  </Popover.Content>

  <Popover.Content position-area="end">
    <!-- Appears to the right of the anchor -->
  </Popover.Content>
</template>

Use position-try to specify fallback positions when the preferred position doesn’t fit in the viewport (default: 'most-width bottom'):

vue
<template>
  <!-- Try bottom first; fall back to most available width -->
  <Popover.Content position-area="bottom" position-try="most-width bottom">
    Tooltip content
  </Popover.Content>
</template>

Accessibility

Popover uses the native Popover API — the popover attribute on the content plus popovertarget on the trigger — so opening, closing, light-dismiss (clicking outside), and Escape-to-close are all handled by the browser. Placement uses CSS Anchor Positioning.

ARIA Attributes

AttributeValueElement
popovertargetContent popover IDActivator
aria-expandedtrue / falseActivator
aria-controlsContent popover IDActivator
popoverautoContent

Popover.Activator renders a <button> by default and toggles the popover through the native popovertarget attribute. Popover.Content is unstyled and carries no semantic role of its own — assign one that matches what the popover contains (for example menu, listbox, or tooltip).

Keyboard Navigation

KeyAction
Enter / SpaceToggles the popover (native button activating popovertarget)
EscapeCloses the popover (native popover="auto" light-dismiss)

FAQ

Discord
Need help? Join our community for support and discussions ↗

API Reference

The following API details are for all variations of the Popover component.
Was this page helpful?

© 2016-1970 Vuetify, LLC
Services
Ctrl+/