Popper

This section defines popper styles that include a button option from the Buttons section and popper types.
The Popper open and close animations are controlled through Classic Interactions, found in the right-side Interactions tab alongside Style and Settings. These interactions are connected to the Dropdown component used within the Popper structure and are named Popper Open and Popper Close.

Popper Open runs when the Dropdown enters its open state, while Popper Close runs when the Dropdown returns to its closed state. Both interactions use the native Dropdown states to control the corresponding Popper entrance and exit animations.

Keep these interactions connected to the Dropdown component and the documented Popper structure so the animations remain synchronized with the Dropdown's open and closed states.

Responsive Positioning

Enables responsive adjustment of popper placement across breakpoints. Use positioning addons to redefine alignment when layout direction changes, ensuring consistent visual flow and spatial balance.
Tablet
Mobile
Mobile Portrait
Relative
popper-navigation
is-tablet-position-relative
popper-navigation
is-mobile-position-relative
popper-navigation
is-mobile-portrait-position-relative
Fixed
popper-navigation
is-tablet-position-fixed
popper-navigation
is-mobile-position-fixed
popper-navigation
is-mobile-portrait-position-fixed
Note: Elements are hidden by default.

Elements

Popper System Container
popper
Toggle Wrapper
Toggle
popper-toggle
Show/Hide Content
Closed (Default State)
popper-closed
Open
popper-open
Note: Before publishing, set popper-open to display none to prevent it from appearing briefly during the initial page load.
Navigation
popper-navigation
Note: Element is hidden by default.
Content
Use this area to adjust container width (add a container-height-* class if you need to control the popper content height), as well as background styling, padding, text, and other internal content. For all container width and height options, refer to the Width & Height page.
Content
popper-content
Example of Content with Container Set Width
container-width-xl
|
|
popper-content
This popper contains extended example content to demonstrate how container width impacts text flow, line length, and visual hierarchy. By applying different container width classes, you can observe how the popper adapts structurally while maintaining consistent padding, spacing, and background styling across variations.
Bridge Wrapper & Arrow
Defines the arrow element used to visually connect the popper to its trigger, designed to be placed inside the toggle button.
To show or hide the arrow, switch the popper-arrow element between Grid and None in the Style panel, or remove the background styling element applied to it.

The popper-bridge element itself should remain in place. It acts as a structural bridge between the popper-toggle and the popper-navigation, ensuring continuous hover interaction. Removing the element may cause the popper to close when moving the cursor between the toggle and the navigation panel.

Keep the popper-bridge element present whenever hover-based open/close behavior is used.
Bridge
popper-bridge
Note: Element is hidden by default.
Arrow (Show/Hide Globally)
popper-arrow
Arrow Position
Bottom (Default)
popper-bridge
|
|
popper-arrow
|
|
Add background here
Popper
Top
popper-bridge
is-top
|
|
popper-arrow
|
|
Add background here
Popper
Left
popper-bridge
is-left
|
|
popper-arrow
is-left
|
|
Add background here
Popper
Right
popper-bridge
is-right
|
|
popper-arrow
is-right
|
|
Add background here
Popper
Custom Behavior -
Popper

Add Smart Positioning to every Popper component on the page. Each Popper is expected to be wrapped in a parent element with the class popper, and includes a popper-navigation element (the positioning container) and a popper-content element (the content that must remain inside the viewport).

‍

Preferred Position (Reset Behavior)

The script treats the initial positioning state as the Popper’s “preferred” placement:

On every recalculation (open, scroll, resize, or content size change), the script first restores the Popper to its preferred placement. If the Popper fits inside the viewport, no further changes are made. This ensures the Popper always returns to its intended default position whenever possible.

‍

Viewport Overflow Detection

The script measures the popper-content element using getBoundingClientRect() and checks whether it overflows the viewport, with a small padding buffer to prevent edge-touching. Overflow can be detected on any side (top, right, bottom, left).

‍

Center Alignment Adjustment

If the Popper is using a centered placement:

…and the content overflows horizontally, the script shifts alignment before flipping the Popper:

This keeps the Popper on the same vertical side (above or below) while correcting horizontal clipping.

‍

Auto Flip (Opposite Side)

If the Popper still overflows after the center alignment adjustment, the script automatically flips the Popper to the opposite side by replacing the current is-float-* or is-overlay-* addon with its matching opposite:

This flip check can run up to two times to ensure the Popper resolves fully into a visible position.

Flip behavior adapts based on placement type:

‍

Arrow / Bridge Sync

The script automatically keeps the Popper arrow system visually aligned with the final resolved placement.

This syncing is applied only for standard float poppers.

Rules:

Behavior:

This ensures arrow elements always reflect the final resolved position without requiring manual setup.

‍

When It Recalculates

The Popper recalculates automatically when:

This keeps Popper positioning consistent across breakpoints, scroll positions, and changing content.