Skip to content
Oruga
Bulma
Bootstrap

Popover

experimental

The Popover component is a wrapper for rich content that floats above other elements on the page. It is shown or hidden by interacting with a trigger element such as a button. Unlike a tooltip, it is usually triggered via click instead of hover, and it can contain interactive elements. The component is implemented using the native Popover API.

Examples

Base

Usually the trigger element for a popover is a <button> element. However, you can also use any other HTML element. By default, opening a popover will close any other open popovers and it can be closed by clicking outside the content. The behavior can be changed with the behavior property.

Accessibility Note:

If your trigger does not have a visible label, provide an accessible or visually hidden label and communicates the popover's state to assistive technologies.

Accessibility Note:

Use the aria-haspopup attribute on the trigger to indicate the type of interactive popup that this element triggers, usually dialog or `menu´; this should match the role of the popover content. You can see all possible values here.

html
<section>
    <o-popover>
        <o-button> Open popover! </o-button>

        <template #content>
            <b>Lorem ipsum dolor sit amet</b>, consectetur warning elit.
            <i>Fusce id fermentum quam</i>.
            <o-icon icon="heart" variant="danger" />
        </template>
    </o-popover>
</section>

Position

The direction in which the popover opens can be explicity defined using the position property. By default, the direction is automatically calculated based on the distance to the edge of the window.

Additionally, adding the teleport property will move the content to the referenced DOM location instead of the current one.

html
<section class="odocs-spaced">
    <o-field>
        <o-switch v-model="teleport" label="Teleport to Body" />
    </o-field>

    <p>
        <o-popover position="right" :teleport="teleport">
            <o-button label="Right Popover" />

            <template #content>
                <h4>Heading</h4>
                <p>
                    Lorem ipsum dolor sit amet, consectetur warning elit.
                    Fusce id fermentum quam
                </p>
                <a href="#">Some Link</a>
            </template>
        </o-popover>

        <o-popover position="top" :teleport="teleport">
            <o-button label="Top Popover" />

            <template #content>
                <h4>Heading</h4>
                <p>
                    Lorem ipsum dolor sit amet, consectetur warning elit.
                    Fusce id fermentum quam
                </p>
                <a href="#">Some Link</a>
            </template>
        </o-popover>

        <o-popover position="bottom" :teleport="teleport">
            <o-button label="Bottom Popover" />

            <template #content>
                <h4>Heading</h4>
                <p>
                    Lorem ipsum dolor sit amet, consectetur warning elit.
                    Fusce id fermentum quam
                </p>
                <a href="#">Some Link</a>
            </template>
        </o-popover>

        <o-popover position="left" :teleport="teleport">
            <o-button label="Left Popover" />

            <template #content>
                <h4>Heading</h4>
                <p>
                    Lorem ipsum dolor sit amet, consectetur warning elit.
                    Fusce id fermentum quam
                </p>
                <a href="#">Some Link</a>
            </template>
        </o-popover>
    </p>
</section>
javascript
import { ref } from "vue";

const teleport = ref(false);

Delay

The appearance of the content can be delayed using the delay property.

html
<section>
    <o-popover content="The content is shown after 1000ms" :delay="1000">
        <o-button variant="warning" label="Delayed" />
    </o-popover>
</section>

Popover Component

A popover is a content container that displays rich content over the top of other content.

html
<o-popover></o-popover>

Props

Prop nameDescriptionTypeValuesDefault
activeWhether popover is active or not, use v-model:active to make it two-way bindingboolean-false
animationShow and dismiss animationstring-
From config:
popover: {
  animation: "fade"
}
behaviorThe behavior of the popover."auto" | "hint" | "manuell"auto, hint, manuell"auto"
contentContent text, unnecessary when content slot is usedstring-
delayDefines a delay (in ms) before the content appearsnumber-
disabledThe component will be disabledboolean-false
idA unique HTML id for the popover elementstring-useId()
overrideOverride existing theme classes completelyboolean-
positionThe position of the popover relative to the trigger"bottom" | "center" | "left" | "right" | "top"top, bottom, left, right, center
From config:
popover: {
  position: "top"
}
teleportAppend the component to another part of the DOM.
Set true to append the component to the body.
In addition, any CSS selector string or an actual DOM node can be used.
boolean | object | string-
From config:
popover: {
  teleport: false
}

Events

Event namePropertiesDescription
update:activevalue boolean - updated active propactive prop two-way binding
closeevent Event - native eventon active state changes to false
openevent Event - native eventon active state changes to true

Slots

NameDescriptionBindings
defaultDefine a trigger hereactive boolean - popover active state
open (): void - function to open the popover
contentOverride the popover content, default is content propclose (): void - function to close the popover

Class Inspector

Classes applied to the element:
Want to know how does the Class Inspector work?
Class propDescriptionPropsSuffixes
rootClass
Class of the root element.
teleportClass
Class of the root element when teleported.
teleport
triggerClass
Class of the trigger element.
contentClass
Class of the content element.

Sass Variables

Current theme ➜ Oruga

The theme does not have any custom variables for this component.

Current theme ➜ Bulma

The theme does not have any custom variables for this component.

Current theme ➜ Bootstrap

The theme does not have any custom variables for this component.

Released under the MIT License.