PatternFly

Sidebar

A sidebar splits content into a secondary area that can be placed relative to the main content on a page.

Examples

Basic

Sidebar panel

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse dapibus nulla id augue dictum commodo. Donec mollis arcu massa, sollicitudin venenatis est rutrum vitae. Integer pulvinar ligula at augue mollis, ac pulvinar arcu semper. Maecenas nisi lorem, malesuada ac lectus nec, porta pretium neque. Ut convallis libero sit amet metus mattis, vel facilisis lorem malesuada. Duis consectetur ante sit amet magna efficitur, a interdum leo vulputate.

Praesent at odio nec sapien ultrices tincidunt in non mauris. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Duis consectetur nisl quis facilisis faucibus. Sed eu bibendum risus. Suspendisse porta euismod tortor, at elementum odio suscipit sed. Cras eget ultrices urna, ac feugiat lectus. Integer a pharetra velit, in imperdiet mi. Phasellus vel hendrerit velit. Vestibulum ut augue vitae erat vulputate bibendum a ut magna.

Stack

Sidebar panel stacked on top

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse dapibus nulla id augue dictum commodo. Donec mollis arcu massa, sollicitudin venenatis est rutrum vitae. Integer pulvinar ligula at augue mollis, ac pulvinar arcu semper. Maecenas nisi lorem, malesuada ac lectus nec, porta pretium neque. Ut convallis libero sit amet metus mattis, vel facilisis lorem malesuada. Duis consectetur ante sit amet magna efficitur, a interdum leo vulputate.

Praesent at odio nec sapien ultrices tincidunt in non mauris. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Duis consectetur nisl quis facilisis faucibus. Sed eu bibendum risus. Suspendisse porta euismod tortor, at elementum odio suscipit sed. Cras eget ultrices urna, ac feugiat lectus. Integer a pharetra velit, in imperdiet mi. Phasellus vel hendrerit velit. Vestibulum ut augue vitae erat vulputate bibendum a ut magna.

Panel right with gutter

Sidebar panel on the right

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse dapibus nulla id augue dictum commodo. Donec mollis arcu massa, sollicitudin venenatis est rutrum vitae. Integer pulvinar ligula at augue mollis, ac pulvinar arcu semper. Maecenas nisi lorem, malesuada ac lectus nec, porta pretium neque. Ut convallis libero sit amet metus mattis, vel facilisis lorem malesuada. Duis consectetur ante sit amet magna efficitur, a interdum leo vulputate.

Praesent at odio nec sapien ultrices tincidunt in non mauris. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Duis consectetur nisl quis facilisis faucibus. Sed eu bibendum risus. Suspendisse porta euismod tortor, at elementum odio suscipit sed. Cras eget ultrices urna, ac feugiat lectus. Integer a pharetra velit, in imperdiet mi. Phasellus vel hendrerit velit. Vestibulum ut augue vitae erat vulputate bibendum a ut magna.

Sticky panel

A tabIndex should be added to the Sidebar when there is scrollable content in order for the overflow content to be accessible by keyboard.

Sticky sidebar panel

Scroll me!

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse dapibus nulla id augue dictum commodo. Donec mollis arcu massa, sollicitudin venenatis est rutrum vitae. Integer pulvinar ligula at augue mollis, ac pulvinar arcu semper. Maecenas nisi lorem, malesuada ac lectus nec, porta pretium neque. Ut convallis libero sit amet metus mattis, vel facilisis lorem malesuada. Duis consectetur ante sit amet magna efficitur, a interdum leo vulputate.

Praesent at odio nec sapien ultrices tincidunt in non mauris. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Duis consectetur nisl quis facilisis faucibus. Sed eu bibendum risus. Suspendisse porta euismod tortor, at elementum odio suscipit sed. Cras eget ultrices urna, ac feugiat lectus. Integer a pharetra velit, in imperdiet mi. Phasellus vel hendrerit velit. Vestibulum ut augue vitae erat vulputate bibendum a ut magna.

Static panel

A tabIndex should be added to the Sidebar when there is scrollable content in order for the overflow content to be accessible by keyboard.

Static sidebar panel

Scroll me!

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse dapibus nulla id augue dictum commodo. Donec mollis arcu massa, sollicitudin venenatis est rutrum vitae. Integer pulvinar ligula at augue mollis, ac pulvinar arcu semper. Maecenas nisi lorem, malesuada ac lectus nec, porta pretium neque. Ut convallis libero sit amet metus mattis, vel facilisis lorem malesuada. Duis consectetur ante sit amet magna efficitur, a interdum leo vulputate.

Praesent at odio nec sapien ultrices tincidunt in non mauris. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Duis consectetur nisl quis facilisis faucibus. Sed eu bibendum risus. Suspendisse porta euismod tortor, at elementum odio suscipit sed. Cras eget ultrices urna, ac feugiat lectus. Integer a pharetra velit, in imperdiet mi. Phasellus vel hendrerit velit. Vestibulum ut augue vitae erat vulputate bibendum a ut magna.

Responsive panel width

A tabIndex should be added to the Sidebar when there is scrollable content in order for the overflow content to be accessible by keyboard.

Sidebar panel

Resize me!

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse dapibus nulla id augue dictum commodo. Donec mollis arcu massa, sollicitudin venenatis est rutrum vitae. Integer pulvinar ligula at augue mollis, ac pulvinar arcu semper. Maecenas nisi lorem, malesuada ac lectus nec, porta pretium neque. Ut convallis libero sit amet metus mattis, vel facilisis lorem malesuada. Duis consectetur ante sit amet magna efficitur, a interdum leo vulputate.

Praesent at odio nec sapien ultrices tincidunt in non mauris. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Duis consectetur nisl quis facilisis faucibus. Sed eu bibendum risus. Suspendisse porta euismod tortor, at elementum odio suscipit sed. Cras eget ultrices urna, ac feugiat lectus. Integer a pharetra velit, in imperdiet mi. Phasellus vel hendrerit velit. Vestibulum ut augue vitae erat vulputate bibendum a ut magna.

Border

Sidebar panel

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse dapibus nulla id augue dictum commodo. Donec mollis arcu massa, sollicitudin venenatis est rutrum vitae. Integer pulvinar ligula at augue mollis, ac pulvinar arcu semper. Maecenas nisi lorem, malesuada ac lectus nec, porta pretium neque. Ut convallis libero sit amet metus mattis, vel facilisis lorem malesuada. Duis consectetur ante sit amet magna efficitur, a interdum leo vulputate.

Praesent at odio nec sapien ultrices tincidunt in non mauris. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Duis consectetur nisl quis facilisis faucibus. Sed eu bibendum risus. Suspendisse porta euismod tortor, at elementum odio suscipit sed. Cras eget ultrices urna, ac feugiat lectus. Integer a pharetra velit, in imperdiet mi. Phasellus vel hendrerit velit. Vestibulum ut augue vitae erat vulputate bibendum a ut magna.

Padding on panel

Sidebar panel, with padding

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse dapibus nulla id augue dictum commodo. Donec mollis arcu massa, sollicitudin venenatis est rutrum vitae. Integer pulvinar ligula at augue mollis, ac pulvinar arcu semper. Maecenas nisi lorem, malesuada ac lectus nec, porta pretium neque. Ut convallis libero sit amet metus mattis, vel facilisis lorem malesuada. Duis consectetur ante sit amet magna efficitur, a interdum leo vulputate.

Praesent at odio nec sapien ultrices tincidunt in non mauris. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Duis consectetur nisl quis facilisis faucibus. Sed eu bibendum risus. Suspendisse porta euismod tortor, at elementum odio suscipit sed. Cras eget ultrices urna, ac feugiat lectus. Integer a pharetra velit, in imperdiet mi. Phasellus vel hendrerit velit. Vestibulum ut augue vitae erat vulputate bibendum a ut magna.

Padding on content

Sidebar panel

Sidebar content, with padding.

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse dapibus nulla id augue dictum commodo. Donec mollis arcu massa, sollicitudin venenatis est rutrum vitae. Integer pulvinar ligula at augue mollis, ac pulvinar arcu semper. Maecenas nisi lorem, malesuada ac lectus nec, porta pretium neque. Ut convallis libero sit amet metus mattis, vel facilisis lorem malesuada. Duis consectetur ante sit amet magna efficitur, a interdum leo vulputate.

Praesent at odio nec sapien ultrices tincidunt in non mauris. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Duis consectetur nisl quis facilisis faucibus. Sed eu bibendum risus. Suspendisse porta euismod tortor, at elementum odio suscipit sed. Cras eget ultrices urna, ac feugiat lectus. Integer a pharetra velit, in imperdiet mi. Phasellus vel hendrerit velit. Vestibulum ut augue vitae erat vulputate bibendum a ut magna.

Props

*required
NameTypeDefaultDescription
childrenReact.ReactNode
hasBorderbooleanAdds a border between the panel and content.
hasGutterbooleanAdds space between the panel and content.
hasNoBackgroundbooleanRemoves the background color.
isPanelRightbooleanfalseIndicates that the panel is displayed to the right of the content when the oritentation is split.
orientation'stack' | 'split'Indicates the direction of the layout. Default orientation is stack on small screens, and split on medium screens and above.

SidebarContent

*required
NameTypeDefaultDescription
childrenrequiredReact.ReactNode
hasNoBackgroundbooleanRemoves the background color.
hasPaddingbooleanAdds padding to the content.

SidebarPanel

*required
NameTypeDefaultDescription
childrenrequiredReact.ReactNode
hasNoBackgroundbooleanRemoves the background color.
hasPaddingbooleanAdds padding to the panel.
variant'default' | 'sticky' | 'static''default'Indicates whether the panel is positioned statically or sticky to the top. Default is sticky on small screens when the orientation is stack, and static on medium and above screens when the orientation is split.
width{ default?: 'default' | 'width_25' | 'width_33' | 'width_50' | 'width_66' | 'width_75' | 'width_100'; sm?: 'default' | 'width_25' | 'width_33' | 'width_50' | 'width_66' | 'width_75' | 'width_100'; md?: 'default' | 'width_25' | 'width_33' | 'width_50' | 'width_66' | 'width_75' | 'width_100'; lg?: 'default' | 'width_25' | 'width_33' | 'width_50' | 'width_66' | 'width_75' | 'width_100'; xl?: 'default' | 'width_25' | 'width_33' | 'width_50' | 'width_66' | 'width_75' | 'width_100'; '2xl'?: 'default' | 'width_25' | 'width_33' | 'width_50' | 'width_66' | 'width_75' | 'width_100'; }Sets the panel width at various breakpoints. Default is 250px when the orientation is split.

CSS variables

Expand or collapse columnSelectorVariableValue
.pf-v5-c-sidebar--pf-v5-c-sidebar--inset
1rem
.pf-v5-c-sidebar--pf-v5-c-sidebar--xl--inset
1.5rem
.pf-v5-c-sidebar--pf-v5-c-sidebar--BackgroundColor
#fff
.pf-v5-c-sidebar--pf-v5-c-sidebar--BorderWidth--base
1px
.pf-v5-c-sidebar--pf-v5-c-sidebar--BorderColor--base
#d2d2d2
.pf-v5-c-sidebar--pf-v5-c-sidebar__panel--PaddingTop
0
.pf-v5-c-sidebar--pf-v5-c-sidebar__panel--PaddingRight
0
.pf-v5-c-sidebar--pf-v5-c-sidebar__panel--PaddingBottom
0
.pf-v5-c-sidebar--pf-v5-c-sidebar__panel--PaddingLeft
0
.pf-v5-c-sidebar--pf-v5-c-sidebar__panel--Order
-1
.pf-v5-c-sidebar--pf-v5-c-sidebar__panel--m-padding--PaddingTop
1rem
.pf-v5-c-sidebar--pf-v5-c-sidebar__panel--m-padding--PaddingRight
1rem
.pf-v5-c-sidebar--pf-v5-c-sidebar__panel--m-padding--PaddingBottom
1rem
.pf-v5-c-sidebar--pf-v5-c-sidebar__panel--m-padding--PaddingLeft
1rem
.pf-v5-c-sidebar--pf-v5-c-sidebar__content--PaddingTop
0
.pf-v5-c-sidebar--pf-v5-c-sidebar__content--PaddingRight
0
.pf-v5-c-sidebar--pf-v5-c-sidebar__content--PaddingBottom
0
.pf-v5-c-sidebar--pf-v5-c-sidebar__content--PaddingLeft
0
.pf-v5-c-sidebar--pf-v5-c-sidebar__content--Order
1
.pf-v5-c-sidebar--pf-v5-c-sidebar__content--m-padding--PaddingTop
1rem
.pf-v5-c-sidebar--pf-v5-c-sidebar__content--m-padding--PaddingRight
1rem
.pf-v5-c-sidebar--pf-v5-c-sidebar__content--m-padding--PaddingBottom
1rem
.pf-v5-c-sidebar--pf-v5-c-sidebar__content--m-padding--PaddingLeft
1rem
.pf-v5-c-sidebar--pf-v5-c-sidebar__main--FlexDirection
column
.pf-v5-c-sidebar--pf-v5-c-sidebar__main--md--FlexDirection
row
.pf-v5-c-sidebar--pf-v5-c-sidebar__main--AlignItems
stretch
.pf-v5-c-sidebar--pf-v5-c-sidebar__main--md--AlignItems
flex-start
.pf-v5-c-sidebar--pf-v5-c-sidebar__main--child--MarginTop
0
.pf-v5-c-sidebar--pf-v5-c-sidebar--m-gutter__main--Gap
1rem
.pf-v5-c-sidebar--pf-v5-c-sidebar__main--m-border--before--Display
none
.pf-v5-c-sidebar--pf-v5-c-sidebar__main--m-border--before--md--Display
block
.pf-v5-c-sidebar--pf-v5-c-sidebar__main--m-border--before--BorderWidth
1px
.pf-v5-c-sidebar--pf-v5-c-sidebar__main--m-border--before--BorderColor
#d2d2d2
.pf-v5-c-sidebar--pf-v5-c-sidebar--m-panel-right__panel--Order
-1
.pf-v5-c-sidebar--pf-v5-c-sidebar--m-panel-right__panel--md--Order
1
.pf-v5-c-sidebar--pf-v5-c-sidebar--m-panel-right__content--md--Order
-1
.pf-v5-c-sidebar--pf-v5-c-sidebar--m-stack__main--FlexDirection
column
.pf-v5-c-sidebar--pf-v5-c-sidebar--m-stack__main--AlignItems
stretch
.pf-v5-c-sidebar--pf-v5-c-sidebar--m-stack__panel--Position
sticky
.pf-v5-c-sidebar--pf-v5-c-sidebar--m-stack__panel--Top
0
.pf-v5-c-sidebar--pf-v5-c-sidebar--m-stack__panel--BoxShadow
0 0.25rem 0.25rem -0.25rem rgba(3, 3, 3, 0.16)
.pf-v5-c-sidebar--pf-v5-c-sidebar--m-stack--m-panel-right__panel--Order
-1
.pf-v5-c-sidebar--pf-v5-c-sidebar--m-split__main--AlignItems
flex-start
.pf-v5-c-sidebar--pf-v5-c-sidebar--m-split__main--FlexDirection
row
.pf-v5-c-sidebar--pf-v5-c-sidebar--m-split__panel--Position
static
.pf-v5-c-sidebar--pf-v5-c-sidebar--m-split__panel--Top
auto
.pf-v5-c-sidebar--pf-v5-c-sidebar--m-split--m-panel-right__panel--Order
1
.pf-v5-c-sidebar--pf-v5-c-sidebar--m-split__main--m-border--before--Display
block
.pf-v5-c-sidebar--pf-v5-c-sidebar__panel--FlexBasis-base
auto
.pf-v5-c-sidebar--pf-v5-c-sidebar__panel--BoxShadow--base
0 0.25rem 0.25rem -0.25rem rgba(3, 3, 3, 0.16)
.pf-v5-c-sidebar--pf-v5-c-sidebar__panel--BoxShadow
0 0.25rem 0.25rem -0.25rem rgba(3, 3, 3, 0.16)
.pf-v5-c-sidebar--pf-v5-c-sidebar__panel--Top
0
.pf-v5-c-sidebar--pf-v5-c-sidebar__panel--md--Top
auto
.pf-v5-c-sidebar--pf-v5-c-sidebar__panel--Position
sticky
.pf-v5-c-sidebar--pf-v5-c-sidebar__panel--md--Position
static
.pf-v5-c-sidebar--pf-v5-c-sidebar__panel--FlexBasis
auto
.pf-v5-c-sidebar--pf-v5-c-sidebar__panel--md--FlexBasis
15.625rem
.pf-v5-c-sidebar--pf-v5-c-sidebar__panel--m-split--FlexBasis
15.625rem
.pf-v5-c-sidebar--pf-v5-c-sidebar__panel--m-stack--FlexBasis
auto
.pf-v5-c-sidebar--pf-v5-c-sidebar__panel--ZIndex
100
.pf-v5-c-sidebar--pf-v5-c-sidebar__panel--BackgroundColor
#fff
.pf-v5-c-sidebar--pf-v5-c-sidebar__content--BackgroundColor
#fff
.pf-v5-c-sidebar--pf-v5-c-sidebar__panel--m-sticky--Top
0
.pf-v5-c-sidebar--pf-v5-c-sidebar__panel--m-sticky--Position
sticky
.pf-v5-c-sidebar.pf-m-panel-right--pf-v5-c-sidebar__panel--Order
-1
.pf-v5-c-sidebar.pf-m-panel-right--pf-v5-c-sidebar__content--Order
undefined
.pf-v5-c-sidebar.pf-m-stack--pf-v5-c-sidebar__main--FlexDirection
column
.pf-v5-c-sidebar.pf-m-stack--pf-v5-c-sidebar__main--AlignItems
stretch
.pf-v5-c-sidebar.pf-m-stack--pf-v5-c-sidebar__panel--Position
sticky
.pf-v5-c-sidebar.pf-m-stack--pf-v5-c-sidebar__panel--Top
0
.pf-v5-c-sidebar.pf-m-stack--pf-v5-c-sidebar__panel--BoxShadow
0 0.25rem 0.25rem -0.25rem rgba(3, 3, 3, 0.16)
.pf-v5-c-sidebar.pf-m-stack--pf-v5-c-sidebar__panel--FlexBasis
auto
.pf-v5-c-sidebar.pf-m-stack--pf-v5-c-sidebar__main--m-border--before--Display
none
.pf-v5-c-sidebar.pf-m-stack--pf-v5-c-sidebar--m-panel-right__panel--Order
-1
.pf-v5-c-sidebar.pf-m-split--pf-v5-c-sidebar__main--FlexDirection
row
.pf-v5-c-sidebar.pf-m-split--pf-v5-c-sidebar__main--AlignItems
flex-start
.pf-v5-c-sidebar.pf-m-split--pf-v5-c-sidebar__panel--Position
static
.pf-v5-c-sidebar.pf-m-split--pf-v5-c-sidebar__panel--Top
auto
.pf-v5-c-sidebar.pf-m-split--pf-v5-c-sidebar__panel--BoxShadow
none
.pf-v5-c-sidebar.pf-m-split--pf-v5-c-sidebar__panel--FlexBasis
15.625rem
.pf-v5-c-sidebar.pf-m-split--pf-v5-c-sidebar__main--m-border--before--Display
block
.pf-v5-c-sidebar.pf-m-split--pf-v5-c-sidebar--m-panel-right__panel--Order
1
.pf-v5-c-sidebar__panel.pf-m-padding--pf-v5-c-sidebar__panel--PaddingTop
1rem
.pf-v5-c-sidebar__panel.pf-m-padding--pf-v5-c-sidebar__panel--PaddingRight
1rem
.pf-v5-c-sidebar__panel.pf-m-padding--pf-v5-c-sidebar__panel--PaddingBottom
1rem
.pf-v5-c-sidebar__panel.pf-m-padding--pf-v5-c-sidebar__panel--PaddingLeft
1rem
.pf-v5-c-sidebar__panel.pf-m-sticky--pf-v5-c-sidebar__panel--Position
sticky
.pf-v5-c-sidebar__panel.pf-m-sticky--pf-v5-c-sidebar__panel--Top
0
.pf-v5-c-sidebar__panel.pf-m-static--pf-v5-c-sidebar__panel--Position
static
.pf-v5-c-sidebar__panel.pf-m-static--pf-v5-c-sidebar__panel--Top
auto
.pf-v5-c-sidebar__content.pf-m-padding--pf-v5-c-sidebar__content--PaddingTop
1rem
.pf-v5-c-sidebar__content.pf-m-padding--pf-v5-c-sidebar__content--PaddingRight
1rem
.pf-v5-c-sidebar__content.pf-m-padding--pf-v5-c-sidebar__content--PaddingBottom
1rem
.pf-v5-c-sidebar__content.pf-m-padding--pf-v5-c-sidebar__content--PaddingLeft
1rem
.pf-v5-c-sidebar__content.pf-m-no-background--pf-v5-c-sidebar__content--BackgroundColor
transparent
.pf-v5-c-sidebar__content + .pf-v5-c-sidebar__panel--pf-v5-c-sidebar__panel--Order
1
:where(.pf-v5-c-sidebar__content:first-child)--pf-v5-c-sidebar__content--Order
-1
.pf-v5-c-sidebar__panel.pf-m-width-default--pf-v5-c-sidebar__panel--FlexBasis
auto
.pf-v5-c-sidebar__panel.pf-m-width-25--pf-v5-c-sidebar__panel--FlexBasis
25%
.pf-v5-c-sidebar__panel.pf-m-width-33--pf-v5-c-sidebar__panel--FlexBasis
33%
.pf-v5-c-sidebar__panel.pf-m-width-50--pf-v5-c-sidebar__panel--FlexBasis
50%
.pf-v5-c-sidebar__panel.pf-m-width-66--pf-v5-c-sidebar__panel--FlexBasis
66%
.pf-v5-c-sidebar__panel.pf-m-width-75--pf-v5-c-sidebar__panel--FlexBasis
75%
.pf-v5-c-sidebar__panel.pf-m-width-100--pf-v5-c-sidebar__panel--FlexBasis
100%

View source on GitHub