Flyout
EuiFlyout is a fixed position panel that pops in from the side of the window. It should be used to reveal more detailed contextual information or to provide complex forms without losing the user's current state. It is a good alternative to modals when the action is not transient.
Like modals, you control the visibility of the flyout using your own state management, but EuiFlyout requires an onClose
handler for it's internal dismiss buttons.
Component
Accessibility requirement
Use aria-labelledby={headingId}
to ensure the flyout is announced to screen readers.
Usage
More complicated flyout
This component also comes with related child components for ease of creating headers, footers and scrolling body content. EuiFlyoutHeader and EuiFlyoutFooter are pinned to the top and bottom of the flyout, respectively, to allow for always visible navigation and actions. The EuiFlyoutBody component will then automatically overflow.
Sizing
Flyouts come in three predefined size
s of 's' | 'm' | 'l'
, which define the width relative to the window size with a minimum width defined in pixels. You can otherwise supply your own fixed width in number or string format.
Padding
All the inner flyout components inherit their padding from the wrapping EuiFlyout component. This ensures that all the horizontal edges line up no matter the paddingSize
. When using the "none"
size, you will need to accommodate your content with some other way of creating distance to the edges of the flyout.
Banners
To highlight some information at the top of a flyout, you can pass an EuiCallOut to the banner
prop available in EuiFlyoutBody and its layout will adjust appropriately.
Without ownFocus
Like modals, you will usually want to obscure the page content beneath with ownFocus
which wraps the flyout with an EuiOverlayMask . However, there are use-cases where flyouts present more information or controls, but need to maintain the interactions of the page content. By setting ownFocus={false}
, the underlying page content will be visible and clickable.
Understanding max-width
By default, flyouts will continue to grow with the width of the window. To stop this growth at an ideal width, set maxWidth
to true
, or pass your own custom size.
Note that there are some caveats to providing a maxWidth that is smaller than the minWidth.
Focus management
EuiFlyout
used with type="overlay"
manages focus for keyboard navigation and accessibility. This ensures users can navigate modal content effectively,
especially those using screen readers or keyboard-only navigation.
When a EuiFlyout
is used, it will automatically:
- Move focus to the flyout when opened
- Trap focus inside the flyout while open
- Return focus to the trigger element when closed
Manual return focus control
Use focusTrapProps
to customize the focus behavior:
tsx code block:<EuiFlyout focusTrapProps={{ returnFocus: (triggerElement) => { // Return true to use default behavior (focus triggerElement) // Return false to prevent default behavior if (customElement.current) { customElement.current.focus(); return false; } return true; }, }} />
Manually return focus when the trigger element is removed
If the trigger element is removed from the DOM before the flyout closes, focus will be "lost" to the document body.
In this case, manually return focus to an appropriate element using focusTrapProps.returnFocus
.
Push flyout
Another way to allow for continued interactions of the page content while a flyout is visible is to change the type
from overlay
to push
.
Push flyouts require manual accessibility management
Push flyouts do not use a focus trap, do not close on Escape keypress, do not inherit a dialog role, and do not include any of the default screen reader guidance that overlay flyouts contain out-of-the-box.
Please be cautious when using push flyouts, and make sure you are managing your own focus and screen reader UX.
A pushed flyout still positions itself as fixed
, but adds padding to the document's body element to accommodate for the flyout's width. Because this squishes the page content, the flyout changes back to overlay
at smaller window widths. You can adjust this minimum breakpoint with pushMinBreakpoint
.
Relative positioning
Push flyouts automatically set global CSS variables that you can use to position other elements in your application relative to the flyout's width:
--euiPushFlyoutOffsetInlineStart
(Set whenside="left"
)--euiPushFlyoutOffsetInlineEnd
(Set whenside="right"
)
These variables are automatically updated when the flyout resizes and are removed when the flyout is closed.
css code block:.custom-fixed-sidebar { /* Adjust sidebar position when left push flyout is open */ inset-inline-start: var(--euiPushFlyoutOffsetInlineStart, 0); }
Props
EuiFlyout
Prop | Description and type | Default value |
---|---|---|
No items found |
Resizable flyout
Use EuiFlyoutResizable to render a flyout that users can drag with their mouse or use arrow keys to resize. This may be useful for scenarios where the available space can be unpredictable due to dynamic content. Resizable flyouts allow users to adjust content to better fit their personal screens and workflows.
We strongly recommend setting reasonable numerical minWidth
and maxWidth
props based on the flyout content and page content that you can predict.
Child flyout (Beta)
Note
This component is still in beta and may change in the future.
Use EuiFlyoutChild
to create a nested flyout that aligns to the left edge of a parent EuiFlyout
. On smaller screens, the child flyout stacks above the parent.
tsx code block:<EuiFlyout> <EuiFlyoutHeader>Parent header</EuiFlyoutHeader> <EuiFlyoutBody>Parent body</EuiFlyoutBody> <EuiFlyoutFooter>Parent footer</EuiFlyoutFooter> <EuiFlyoutChild> <EuiFlyoutHeader>Child header</EuiFlyoutHeader> <EuiFlyoutBody>Child body</EuiFlyoutBody> <EuiFlyoutFooter>Child footer</EuiFlyoutFooter> </EuiFlyoutChild> </EuiFlyout>
The EuiFlyoutChild
must include an EuiFlyoutBody
child and can only be used within a parent EuiFlyout
. When present, the parent flyout's side
prop will be forced to "right"
and the close button to "inside"
. Size options are also limited - parent flyouts can only be s
or m
, and if the parent is m
, the child must be s
.
Both parent and child flyouts use role="dialog"
and aria-modal="true"
for accessibility. Focus is managed automatically between them, with the child flyout taking focus when open and returning focus to the parent when closed.
Flyout menu (Beta)
Note
This component is still in beta and may change in the future.
Use EuiFlyoutChild
to create a nested flyout that aligns to the left edge of a parent EuiFlyout
. On smaller screens, the child flyout stacks above the parent.
tsx code block:<EuiFlyout> <EuiFlyoutMenu> Hi mom </EuiFlyoutMenu> <EuiFlyoutHeader>Parent header</EuiFlyoutHeader> <EuiFlyoutBody>Parent body</EuiFlyoutBody> <EuiFlyoutFooter>Parent footer</EuiFlyoutFooter> </EuiFlyout>
Props
EuiFlyout
Prop | Description and type | Default value |
---|---|---|
Prop onClose# | Description and type A required callback function fired when the flyout is closed. Use this callback to toggle your internal (event?: EuiFlyoutCloseEvent) => void | Default value Required |
Prop size# | Description and type Defines the width of the panel. Width<string | number> | Default value m |
Prop style# | Description and type Type: CSSProperties | Default value |
Prop className# | Description and type Type: string | Default value |
Prop css# | Description and type Type: Interpolation<Theme> | Default value |
Prop side# | Description and type Which side of the window to attach to. "left" | "right" | Default value right |
Prop maxWidth# | Description and type Sets the max-width of the panel, string | number | boolean | Default value false |
Prop minWidth# | Description and type Sets the minimum width of the panel. number | Default value |
Prop type# | Description and type How to display the the flyout in relation to the body content; "push" | "overlay" | Default value overlay |
Prop aria-label# | Description and type Defines a string value that labels the current element. string | Default value |
Prop data-test-subj# | Description and type Type: string | Default value |
Prop onResize# | Description and type Optional callback that fires when the flyout is resized. (width: number) => void | Default value |
Prop paddingSize# | Description and type Customize the padding around the content of the flyout header, body and footer "s" | "m" | "l" | "none" | Default value l |
Prop closeButtonProps# | Description and type Extends EuiButtonIconProps onto the close button Partial<EuiButtonIconPropsForButton> | Default value |
Prop isOpen# | Description and type Whether the flyout is open (visible) or closed (hidden). boolean | Default value true |
Prop onClosing# | Description and type An optional callback function fired when the flyout begins closing. Use in case you need to support any extra logic that relies on the flyout (event?: EuiFlyoutCloseEvent) => void | Default value |
Prop ownFocus# | Description and type Adds an EuiOverlayMask and wraps in an EuiPortal boolean | Default value true |
Prop hideCloseButton# | Description and type Hides the default close button. You must provide another close button somewhere within the flyout. boolean | Default value false |
Prop closeButtonPosition# | Description and type Position of close button. "inside" | "outside" | Default value inside |
Prop maskProps# | Description and type Adjustments to the EuiOverlayMask that is added when EuiOverlayMaskProps | Default value |
Prop outsideClickCloses# | Description and type Forces this interaction on the mask overlay or body content. boolean | Default value |
Prop pushMinBreakpoint# | Description and type Named breakpoint ( string | Default value l |
Prop pushAnimation# | Description and type Enables a slide in animation on push flyouts boolean | Default value false |
Prop focusTrapProps# | Description and type Object of props passed to EuiFocusTrap. Pick<EuiFocusTrapProps, "returnFocus" | "shards" | "closeOnMouseup"> | Default value |
Prop includeFixedHeadersInFocusTrap# | Description and type By default, EuiFlyout will consider any fixed Set this to boolean | Default value |
Prop includeSelectorInFocusTrap# | Description and type Specify additional css selectors to include in the focus trap. string | string[] | Default value |
Prop flyoutMenuProps# | Description and type Props for the flyout menu to have one rendered in the flyout. EuiFlyoutMenuProps | Default value |
Prop resizable# | Description and type Whether the flyout should be resizable. boolean | Default value false |
Prop as# | Description and type Type: "div" | "nav" | Default value |
Prop session# | Description and type Type: boolean | Default value |
Prop onActive# | Description and type Type: () => void | Default value |
Prop ref# | Description and type Allows getting a ref to the component instance. LegacyRef<HTMLElement | HTMLDivElement> | Default value |
EuiFlyoutBody
Prop | Description and type | Default value |
---|---|---|
Prop className# | Description and type Type: string | Default value |
Prop aria-label# | Description and type Defines a string value that labels the current element. string | Default value |
Prop data-test-subj# | Description and type Type: string | Default value |
Prop css# | Description and type Type: Interpolation<Theme> | Default value |
Prop banner# | Description and type Use to display a banner at the top of the body. It is suggested to use ReactNode | Default value |
Prop scrollableTabIndex# | Description and type Scrollable regions (or their children) should be focusable By default, EuiFlyoutBody's scroll overflow wrapper sets a number | Default value 0 |
EuiFlyoutFooter
Prop | Description and type | Default value |
---|---|---|
Prop className# | Description and type Type: string | Default value |
Prop aria-label# | Description and type Defines a string value that labels the current element. string | Default value |
Prop data-test-subj# | Description and type Type: string | Default value |
Prop css# | Description and type Type: Interpolation<Theme> | Default value |
EuiFlyoutHeader
Prop | Description and type | Default value |
---|---|---|
Prop className# | Description and type Type: string | Default value |
Prop aria-label# | Description and type Defines a string value that labels the current element. string | Default value |
Prop data-test-subj# | Description and type Type: string | Default value |
Prop css# | Description and type Type: Interpolation<Theme> | Default value |
Prop hasBorder# | Description and type Type: boolean | Default value false |
EuiFlyoutResizable
Prop | Description and type | Default value |
---|---|---|
Prop onClose# | Description and type A required callback function fired when the flyout is closed. Use this callback to toggle your internal (event?: EuiFlyoutCloseEvent) => void | Default value Required |
Prop size# | Description and type Defines the width of the panel. Width<string | number> | Default value m |
Prop style# | Description and type Type: CSSProperties | Default value |
Prop className# | Description and type Type: string | Default value |
Prop css# | Description and type Type: Interpolation<Theme> | Default value |
Prop side# | Description and type Which side of the window to attach to. "left" | "right" | Default value right |
Prop maxWidth# | Description and type Type: number | Default value |
Prop minWidth# | Description and type Sets the minimum width of the panel. number | Default value |
Prop type# | Description and type How to display the the flyout in relation to the body content; "push" | "overlay" | Default value overlay |
Prop aria-label# | Description and type Defines a string value that labels the current element. string | Default value |
Prop data-test-subj# | Description and type Type: string | Default value |
Prop onResize# | Description and type Optional callback that fires when the flyout is resized. (width: number) => void | Default value |
Prop paddingSize# | Description and type Customize the padding around the content of the flyout header, body and footer "s" | "m" | "l" | "none" | Default value l |
Prop closeButtonProps# | Description and type Extends EuiButtonIconProps onto the close button Partial<EuiButtonIconPropsForButton> | Default value |
Prop isOpen# | Description and type Whether the flyout is open (visible) or closed (hidden). boolean | Default value true |
Prop onClosing# | Description and type An optional callback function fired when the flyout begins closing. Use in case you need to support any extra logic that relies on the flyout (event?: EuiFlyoutCloseEvent) => void | Default value |
Prop ownFocus# | Description and type Adds an EuiOverlayMask and wraps in an EuiPortal boolean | Default value true |
Prop hideCloseButton# | Description and type Hides the default close button. You must provide another close button somewhere within the flyout. boolean | Default value false |
Prop closeButtonPosition# | Description and type Position of close button. "inside" | "outside" | Default value inside |
Prop maskProps# | Description and type Adjustments to the EuiOverlayMask that is added when EuiOverlayMaskProps | Default value |
Prop outsideClickCloses# | Description and type Forces this interaction on the mask overlay or body content. boolean | Default value |
Prop pushMinBreakpoint# | Description and type Named breakpoint ( string | Default value l |
Prop pushAnimation# | Description and type Enables a slide in animation on push flyouts boolean | Default value false |
Prop focusTrapProps# | Description and type Object of props passed to EuiFocusTrap. Pick<EuiFocusTrapProps, "returnFocus" | "shards" | "closeOnMouseup"> | Default value |
Prop includeFixedHeadersInFocusTrap# | Description and type By default, EuiFlyout will consider any fixed Set this to boolean | Default value |
Prop includeSelectorInFocusTrap# | Description and type Specify additional css selectors to include in the focus trap. string | string[] | Default value |
Prop flyoutMenuProps# | Description and type Props for the flyout menu to have one rendered in the flyout. EuiFlyoutMenuProps | Default value |
Prop as# | Description and type Type: "div" | "nav" | Default value |
Prop session# | Description and type Type: boolean | Default value |
Prop onActive# | Description and type Type: () => void | Default value |
Prop ref# | Description and type Allows getting a ref to the component instance. LegacyRef<HTMLElement | HTMLDivElement> | Default value |