Skyroc UI
布局容器

ScrollArea

带自定义滚动条的可滚动内容区域

ScrollArea 用于在固定尺寸容器内展示超出范围的内容,并提供一致的自定义滚动条样式。组件基于 Radix Scroll Area 封装,默认组合 Root、Viewport、Scrollbar、Thumb 和 Corner。

import {
  ScrollArea,
  ScrollAreaRoot,
  ScrollAreaScrollbar,
  ScrollAreaThumb,
  ScrollAreaViewport
} from '@skyroc/web-ui';

何时使用

  • 内容高度或宽度固定,但内部列表、图片或文本会溢出。
  • 需要自定义滚动条视觉,而不是完全依赖浏览器默认滚动条。
  • 需要在菜单、侧栏、列表、卡片或预览区域内限制内容尺寸。
  • 页面主体滚动优先使用原生滚动;虚拟长列表优先使用 Virtualizer。

纵向滚动

设置固定高度后,默认 orientation="vertical" 会渲染纵向滚动条。

Preview
Code
Loading...
<ScrollArea className="h-72 w-48">
  <div>Scrollable content</div>
</ScrollArea>

横向滚动

设置 orientation="horizontal" 后,主组件会渲染横向滚动条。内容需要自身产生横向溢出,例如使用 w-maxwhitespace-nowrap

Preview
Code
Loading...
<ScrollArea
  className="w-96 whitespace-nowrap"
  orientation="horizontal"
>
  <div className="w-max">Wide content</div>
</ScrollArea>

尺寸

通过 size 调整滚动条厚度,从 xs2xl 共 6 个尺寸。

Preview
Code
Loading...
尺寸纵向宽度横向高度适用场景
xs6px6px紧凑列表、菜单
sm8px8px小型卡片
md10px10px常规场景(默认)
lg12px12px大号内容区
xl14px14px展示区、图片列表
2xl16px16px触控友好的大滚动条

自定义样式

通过 classNames 覆盖内部 slot。常用 slot 包括 rootviewportscrollbarthumbcorner

Preview
Code
Loading...
<ScrollArea
  classNames={{
    scrollbar: 'bg-muted/60',
    thumb: 'bg-primary'
  }}
>
  <div>Content</div>
</ScrollArea>

API

ScrollArea

主组件组合 Root、Viewport、Scrollbar、Thumb 和 Corner。当前主组件一次渲染一个方向的 Scrollbar;如果需要同时显示横向和纵向滚动条,可使用结构组件手动组合。

属性说明类型默认值
children可滚动内容ReactNode-
orientation滚动条方向'vertical' | 'horizontal''vertical'
type滚动条显示策略,透传给 Radix Root'auto' | 'always' | 'scroll' | 'hover'-
scrollHideDelaytype 为 hover 时滚动条隐藏延迟number-
size尺寸,影响滚动条厚度'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl''md'
className根容器 classClassValue-
classNames各 slot 的自定义 class(root / viewport / scrollbar / thumb / corner)ScrollAreaUi-
viewportProps传递给 ScrollAreaViewport 的额外 propsScrollAreaViewportProps-
scrollbarProps传递给 ScrollAreaScrollbar 的额外 propsScrollAreaScrollbarProps-
thumbProps传递给 ScrollAreaThumb 的额外 propsScrollAreaThumbProps-

结构组件

ScrollArea 也导出结构组件,适合需要同时渲染横向和纵向滚动条,或需要完全控制 DOM 结构时使用。

属性说明类型默认值
ScrollAreaRoot根容器,基于 Radix RootScrollAreaRootProps-
ScrollAreaViewport可滚动内容视口ScrollAreaViewportProps-
ScrollAreaScrollbar滚动条轨道ScrollAreaScrollbarProps-
ScrollAreaThumb滚动条拖拽指示器ScrollAreaThumbProps-

类型

ScrollAreaProps

主组件属性。组合 Root、Viewport 和 Scrollbar props,并增加 slot class 与子组件 props。

字段类型说明
childrenReactNode可滚动内容。
orientation'vertical' | 'horizontal'滚动条方向。
type'auto' | 'always' | 'scroll' | 'hover'滚动条显示策略。
scrollHideDelaynumber滚动条隐藏延迟。
size'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'组件尺寸。
classNameClassValue根容器 class。
classNamesScrollAreaUislot class 配置。
viewportPropsScrollAreaViewportProps视口属性。
scrollbarPropsScrollAreaScrollbarProps滚动条属性。
thumbPropsScrollAreaThumbProps拖拽指示器属性。

ScrollAreaUi

ScrollArea 各 slot 的自定义 class。

字段类型说明
rootClassValue根容器 class。
viewportClassValue可滚动视口 class。
scrollbarClassValue滚动条轨道 class。
thumbClassValue滚动条 thumb class。
cornerClassValue双向滚动时角落区域 class。

ScrollAreaRootProps

根容器属性,继承 Radix ScrollArea Root props,并增加项目 className 类型。

字段类型说明
childrenReactNode子节点。
type'auto' | 'always' | 'scroll' | 'hover'滚动条显示策略。
scrollHideDelaynumber滚动条隐藏延迟。
dir'ltr' | 'rtl'文本方向。
classNameClassValue根容器 class。
size'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'继承字段,Root 当前不直接使用。

ScrollAreaViewportProps

可滚动视口属性,继承 Radix ScrollArea Viewport props。

字段类型说明
childrenReactNode视口内容。
classNameClassValue视口 class。
noncestring传给 Radix Viewport 的 nonce。
size'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'继承字段,Viewport 当前不直接使用。

ScrollAreaScrollbarProps

滚动条属性,继承 Radix ScrollArea Scrollbar props,并增加项目尺寸和 className 类型。

字段类型说明
orientation'vertical' | 'horizontal'滚动条方向。
forceMounttrue强制挂载滚动条。
classNameClassValue滚动条 class。
size'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'滚动条尺寸。

ScrollAreaThumbProps

滚动条 thumb 属性,继承 Radix ScrollArea Thumb props。

字段类型说明
classNameClassValuethumb class。
size'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'继承字段,Thumb 当前不直接使用。

ClassValue

CSS 类名类型

string | null | undefined | Record<string, boolean> | ClassValue[]

On this page