Scroll Area
A native scroll container with custom scrollbars.
View as MarkdownAnatomy
Import the component and assemble its parts:
Examples
Both scrollbars
Use <ScrollArea.Corner> to prevent the scrollbars from intersecting.
Gradient scroll fade
Use the viewport overflow CSS variables to drive a CSS mask, which gradually increases the fade as the user scrolls away from the edges.
For SSR, a fallback can be used as part of the end-side var() call so the mask is visible before the overflow CSS variables hydrate.
When the fade is applied to <ScrollArea.Viewport> itself, the variables can be used directly. However, inheritance to children is disabled, so they must explicitly opt-in using the inherit keyword.
Combining with Tabs
Use <Tabs.List>’s render prop to render <ScrollArea.Viewport> directly when the tab list itself needs the viewport overflow values for a mask fade. This keeps the mask logic on the same element that receives the scroll state.
API reference
Root
Groups all parts of the scroll area.
Renders a <div> element.
overflowEdgeThresholdUnion0
- Description
The threshold in pixels that must be passed before the overflow edge attributes are applied. Accepts a single number for all edges or an object to configure them individually.
- Type
- Default
0
classNamestring | function—
- Name
- Description
CSS class applied to the element, or a function that returns a class based on the component’s state.
- Type
styleReact.CSSProperties | function—
- Name
- Description
Style applied to the element, or a function that returns a style object based on the component’s state.
- Type
renderReactElement | function—
- Name
- Description
Allows you to replace the component’s HTML element with a different tag, or compose it with another component.
Accepts a
ReactElementor a function that returns the element to render.- Type
data-has-overflow-x
Present when the scroll area content is wider than the viewport.
data-has-overflow-y
Present when the scroll area content is taller than the viewport.
data-overflow-x-end
Present when there is overflow on the horizontal end side.
data-overflow-x-start
Present when there is overflow on the horizontal start side.
data-overflow-y-end
Present when there is overflow on the vertical end side.
data-overflow-y-start
Present when there is overflow on the vertical start side.
data-scrolling
Present when the user scrolls inside the scroll area.
| Attribute | Description | |
|---|---|---|
data-has-overflow-x | Present when the scroll area content is wider than the viewport. | |
data-has-overflow-y | Present when the scroll area content is taller than the viewport. | |
data-overflow-x-end | Present when there is overflow on the horizontal end side. | |
data-overflow-x-start | Present when there is overflow on the horizontal start side. | |
data-overflow-y-end | Present when there is overflow on the vertical end side. | |
data-overflow-y-start | Present when there is overflow on the vertical start side. | |
data-scrolling | Present when the user scrolls inside the scroll area. | |
--scroll-area-corner-height
The scroll area’s corner height.
--scroll-area-corner-width
The scroll area’s corner width.
| CSS Variable | Description | |
|---|---|---|
--scroll-area-corner-height | The scroll area’s corner height. | |
--scroll-area-corner-width | The scroll area’s corner width. | |
ScrollArea.Root.StateHide
Viewport
The actual scrollable container of the scroll area.
Renders a <div> element.
classNamestring | function—
- Name
- Description
CSS class applied to the element, or a function that returns a class based on the component’s state.
- Type
styleReact.CSSProperties | function—
- Name
- Description
Style applied to the element, or a function that returns a style object based on the component’s state.
- Type
renderReactElement | function—
- Name
- Description
Allows you to replace the component’s HTML element with a different tag, or compose it with another component.
Accepts a
ReactElementor a function that returns the element to render.- Type
data-has-overflow-x
Present when the scroll area content is wider than the viewport.
data-has-overflow-y
Present when the scroll area content is taller than the viewport.
data-overflow-x-end
Present when there is overflow on the horizontal end side.
data-overflow-x-start
Present when there is overflow on the horizontal start side.
data-overflow-y-end
Present when there is overflow on the vertical end side.
data-overflow-y-start
Present when there is overflow on the vertical start side.
data-scrolling
Present when the user scrolls inside the scroll area.
| Attribute | Description | |
|---|---|---|
data-has-overflow-x | Present when the scroll area content is wider than the viewport. | |
data-has-overflow-y | Present when the scroll area content is taller than the viewport. | |
data-overflow-x-end | Present when there is overflow on the horizontal end side. | |
data-overflow-x-start | Present when there is overflow on the horizontal start side. | |
data-overflow-y-end | Present when there is overflow on the vertical end side. | |
data-overflow-y-start | Present when there is overflow on the vertical start side. | |
data-scrolling | Present when the user scrolls inside the scroll area. | |
--scroll-area-overflow-x-end
The distance from the horizontal end edge in pixels.
--scroll-area-overflow-x-start
The distance from the horizontal start edge in pixels.
--scroll-area-overflow-y-end
The distance from the vertical end edge in pixels.
--scroll-area-overflow-y-start
The distance from the vertical start edge in pixels.
| CSS Variable | Description | |
|---|---|---|
--scroll-area-overflow-x-end | The distance from the horizontal end edge in pixels. | |
--scroll-area-overflow-x-start | The distance from the horizontal start edge in pixels. | |
--scroll-area-overflow-y-end | The distance from the vertical end edge in pixels. | |
--scroll-area-overflow-y-start | The distance from the vertical start edge in pixels. | |
ScrollArea.Viewport.StateHide
Content
A container for the content of the scroll area.
Renders a <div> element.
classNamestring | function—
- Name
- Description
CSS class applied to the element, or a function that returns a class based on the component’s state.
- Type
styleReact.CSSProperties | function—
- Name
- Description
Style applied to the element, or a function that returns a style object based on the component’s state.
- Type
renderReactElement | function—
- Name
- Description
Allows you to replace the component’s HTML element with a different tag, or compose it with another component.
Accepts a
ReactElementor a function that returns the element to render.- Type
ScrollArea.Content.StateHide
Scrollbar
A vertical or horizontal scrollbar for the scroll area.
Renders a <div> element.
orientation'vertical' | 'horizontal''vertical'
- Name
- Description
Whether the scrollbar controls vertical or horizontal scroll.
- Type
- Default
'vertical'
classNamestring | function—
- Name
- Description
CSS class applied to the element, or a function that returns a class based on the component’s state.
- Type
styleReact.CSSProperties | function—
- Name
- Description
Style applied to the element, or a function that returns a style object based on the component’s state.
- Type
keepMountedbooleanfalse
- Name
- Description
Whether to keep the HTML element in the DOM when the viewport isn’t scrollable.
- Type
- Default
false
renderReactElement | function—
- Name
- Description
Allows you to replace the component’s HTML element with a different tag, or compose it with another component.
Accepts a
ReactElementor a function that returns the element to render.- Type
data-orientation
Indicates the orientation of the scrollbar.
data-has-overflow-x
Present when the scroll area content is wider than the viewport.
data-has-overflow-y
Present when the scroll area content is taller than the viewport.
data-hovering
Present when the pointer is over the scroll area.
data-overflow-x-end
Present when there is overflow on the horizontal end side.
data-overflow-x-start
Present when there is overflow on the horizontal start side.
data-overflow-y-end
Present when there is overflow on the vertical end side.
data-overflow-y-start
Present when there is overflow on the vertical start side.
data-scrolling
Present when the user scrolls inside the scroll area.
| Attribute | Description | |
|---|---|---|
data-orientation | Indicates the orientation of the scrollbar. | |
data-has-overflow-x | Present when the scroll area content is wider than the viewport. | |
data-has-overflow-y | Present when the scroll area content is taller than the viewport. | |
data-hovering | Present when the pointer is over the scroll area. | |
data-overflow-x-end | Present when there is overflow on the horizontal end side. | |
data-overflow-x-start | Present when there is overflow on the horizontal start side. | |
data-overflow-y-end | Present when there is overflow on the vertical end side. | |
data-overflow-y-start | Present when there is overflow on the vertical start side. | |
data-scrolling | Present when the user scrolls inside the scroll area. | |
--scroll-area-thumb-height
The scroll area thumb’s height.
--scroll-area-thumb-width
The scroll area thumb’s width.
| CSS Variable | Description | |
|---|---|---|
--scroll-area-thumb-height | The scroll area thumb’s height. | |
--scroll-area-thumb-width | The scroll area thumb’s width. | |
ScrollArea.Scrollbar.StateHide
Thumb
The draggable part of the scrollbar that indicates the current scroll position.
Renders a <div> element.
classNamestring | function—
- Name
- Description
CSS class applied to the element, or a function that returns a class based on the component’s state.
- Type
styleReact.CSSProperties | function—
- Name
- Description
Style applied to the element, or a function that returns a style object based on the component’s state.
- Type
renderReactElement | function—
- Name
- Description
Allows you to replace the component’s HTML element with a different tag, or compose it with another component.
Accepts a
ReactElementor a function that returns the element to render.- Type
data-orientation
Indicates the orientation of the scrollbar.
| Attribute | Description | |
|---|---|---|
data-orientation | Indicates the orientation of the scrollbar. | |
ScrollArea.Thumb.StateHide
Corner
A small rectangular area that appears at the intersection of horizontal and vertical scrollbars.
Renders a <div> element.
classNamestring | function—
- Name
- Description
CSS class applied to the element, or a function that returns a class based on the component’s state.
- Type
styleReact.CSSProperties | function—
- Name
- Description
Style applied to the element, or a function that returns a style object based on the component’s state.
- Type
renderReactElement | function—
- Name
- Description
Allows you to replace the component’s HTML element with a different tag, or compose it with another component.
Accepts a
ReactElementor a function that returns the element to render.- Type