Popup
The Popup component is a utility that lets you display content in tooltips and popovers.
Introduction
The Popup is a utility component for creating various kinds of popups. It relies on the third-party Floating UI library for positioning.
Component
import { Unstable_Popup as Popup } from '@mui/base/Unstable_Popup';
By default, the Popup is mounted to the DOM when its open
prop is set to true
, and removed from the DOM when open
is false
.
anchor
is passed as the reference element to Floating UI's useFloating
hook.
The children are placed in a Portal prepended to the body of the document to avoid rendering problems.
You can disable this behavior with disablePortal
prop.
See how it's done in the Disable portal section below.
The following demo shows how to create and style a basic Popup. Click Toggle Popup to see how it behaves:
Customization
Placement
The Popup's default placement is bottom
.
You can change it using the placement
prop.
Try changing this value to top
in the interactive demo below to see how it works:
Transitions
You can animate the opening and closing of the Popup using CSS transitions, CSS animations, or third-party animation libraries.
To enable transitions, first set the withTransition
prop.
This will make the Popup wait for the exit animation to finish before unmounting.
Then, instead of placing the Popup contents directly as its children, wrap them in a function that receives an object with requestOpen: boolean
, onEnter: () => void
, and onExited: () => void
fields.
Run the open transition when requestOpen
becomes true
and the close transition when it changes to false
.
Call the onEnter
once the entering transition is about to start.
When the exit transition finishes, call the provided onExited
function to let the Popup know it can be unmounted.
If using CSS transitions or animations, you can use the onTransitionEnd
or onAnimationEnd
events, respectively, to detect when the transition is over.
Disable portal
To render the Popup where it's defined in the source, without using React portals, pass in the disablePortal
prop.
Note that it may cause visual clipping if a Popup is placed in a container without visible overflow.
You can use fixed positioning to prevent clipping when not using portals.
The Popup has the strategy
prop which is responsible for determining how the position is calculated.
When set to "fixed"
, the fixed CSS position will be used and the Popup won't be subject to overflow hiding.
Floating UI middleware
If you need to modify the underlying Floating UI middleware, you can do so via the middleware
prop.
By default, the Popup uses the offset
(with the value provided in the offset
prop) and flip
functions.
If you provide your own middleware array, these defaults won't be applied.