Skip to main content
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

PreviewRenderlessIntermediateAug 25, 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, pass the shipped FloatingUIPopoverAdapter (@vuetify/v0/popover/adapters/floating-ui) as adapter on Popover.Root.

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.

Theme
Mode
Palettes
Accessibility
<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+/