Pro组件、模板与 AI 工具
HeroUI
27.7k

Slider 滑块

Slider 允许用户在范围内选择一个或多个值。

用法

import { Slider } from '@heroui/react';

组件结构

import { Slider, Label } from '@heroui/react';

export default () => (
  <Slider>
    <Label />
    <Slider.Output />
    <Slider.Track>
      <Slider.Fill />
      <Slider.Thumb />
    </Slider.Track>
  </Slider>
)

示例

禁用

范围滑块结构

import { Slider, Label } from '@heroui/react';

export default () => (
  <Slider defaultValue={[25, 75]}>
    <Label />
    <Slider.Output />
    <Slider.Track>
      {({state}) => (
        <>
          <Slider.Fill />
          {state.values.map((_, i) => (
            <Slider.Thumb key={i} index={i} />
          ))}
        </>
      )}
    </Slider.Track>
  </Slider>
)

垂直方向

范围选择

受控数值

使用 value 和 onChange 控制数值。

自定义数值格式

使用 formatOptions 格式化显示的数值。此示例将数值格式化为美元。

自定义输出展示

自定义 Slider.Output,控制已选数值的展示方式。

渲染函数

自定义样式

Tailwind CSS

全局 CSS

若要自定义组件类,可使用 @layer components 指令。了解更多。

@layer components {
  .slider {
    @apply flex flex-col gap-2;
  }

  .slider__output {
    @apply text-muted-fg text-sm;
  }

  .slider-track {
    @apply relative h-2 w-full rounded-full bg-surface-secondary;
  }

  .slider-fill {
    @apply absolute h-full rounded-full bg-accent;
  }

  .slider-thumb {
    @apply size-4 rounded-full bg-accent border-2 border-background;
  }
}

样式参考

HeroUI 遵循 BEM 方法论,确保组件变体与状态可复用且易于自定义。

CSS 类

Slider 组件使用以下 CSS 类(查看源码样式):

基础类

  • .slider - Slider 根容器
  • .slider__output - 显示当前值的输出元素
  • .slider-track - 包含填充与滑块的轨道元素
  • .slider-fill - 显示已选范围的填充元素
  • .slider-thumb - 单个滑块控制点

状态类

  • .slider[data-disabled="true"] - 禁用状态
  • .slider[data-orientation="vertical"] - 纵向方向
  • .slider-thumb[data-dragging="true"] - 滑块正在拖动
  • .slider-thumb[data-focus-visible="true"] - 滑块键盘聚焦
  • .slider-thumb[data-disabled="true"] - 滑块禁用状态
  • .slider-track[data-fill-start="true"] - 填充从起点开始
  • .slider-track[data-fill-end="true"] - 填充在终点结束

交互状态

该组件同时支持 CSS 伪类与 data 属性,以提供更灵活的状态控制:

  • 悬停:滑块上的 :hover 或 [data-hovered="true"]
  • 聚焦:滑块上的 :focus-visible 或 [data-focus-visible="true"]
  • 拖动:滑块上的 [data-dragging="true"]
  • 禁用:Slider 或滑块上的 :disabled 或 [data-disabled="true"]

API 参考

Slider

Prop类型默认值描述
valuenumber | number[]-当前值(受控)。
defaultValuenumber | number[]-默认值(非受控)。
onChange(value: number | number[]) => void-值变化时的事件处理函数。
onChangeEnd(value: number | number[]) => void-拖动结束时的事件处理函数。
minValuenumber0Slider 的最小值。
maxValuenumber100Slider 的最大值。
stepnumber1Slider 的步进值。
formatOptionsIntl.NumberFormatOptions-数值标签的显示格式。
orientation"horizontal" | "vertical""horizontal"Slider 的方向。
isDisabledboolean-Slider 是否禁用。
aria-labelstring-Slider 的无障碍标签。
aria-labelledbystring-标注 Slider 的元素 ID。
classNamestring-额外的 CSS 类。
childrenReactNode | RenderFunction-Slider 内容或渲染函数。
renderDOMRenderFunction<keyof React.JSX.IntrinsicElements, SliderRenderProps>-使用自定义渲染函数覆盖默认 DOM 元素。

Slider.Output

Prop类型默认值描述
classNamestring-额外的 CSS 类。
childrenReactNode | RenderFunction-输出内容或渲染函数。
renderDOMRenderFunction<keyof React.JSX.IntrinsicElements, SliderOutputRenderProps>-使用自定义渲染函数覆盖默认 DOM 元素。

Slider.Track

Prop类型默认值描述
classNamestring-额外的 CSS 类。
childrenReactNode | RenderFunction-轨道内容或渲染函数。
renderDOMRenderFunction<keyof React.JSX.IntrinsicElements, SliderTrackRenderProps>-使用自定义渲染函数覆盖默认 DOM 元素。

Slider.Fill

Prop类型默认值描述
classNamestring-额外的 CSS 类。
styleCSSProperties-行内样式。

Slider.Thumb

Prop类型默认值描述
indexnumber0滑块在 Slider 内的索引。
isDisabledboolean-该滑块是否禁用。
namestring-输入元素名称,用于提交 HTML 表单。
classNamestring-额外的 CSS 类。
childrenReactNode | RenderFunction-滑块内容或渲染函数。
renderDOMRenderFunction<keyof React.JSX.IntrinsicElements, SliderThumbRenderProps>-使用自定义渲染函数覆盖默认 DOM 元素。

RenderProps

对 Slider.Output 或 Slider.Track 使用渲染函数时,会提供以下值:

Prop类型描述
stateSliderStateSlider 的状态。
valuesnumber[]按滑块索引管理的数值。
getThumbValueLabel(index: number) => string返回指定滑块数值的字符串标签。
orientation"horizontal" | "vertical"Slider 的方向。
isDisabledbooleanSlider 是否禁用。

无障碍

Slider 组件实现 ARIA slider 模式,并提供:

  • 完整的键盘导航支持(方向键、Home、End、Page Up/Down)
  • 数值变化时的屏幕阅读器播报
  • 合理的焦点管理
  • 禁用状态支持
  • 通过隐藏 input 元素与 HTML 表单集成
  • 结合区域设置进行数值格式化的国际化支持
  • 从右到左(RTL)语言支持

更多信息见 React Aria Slider 文档。

相关组件

本页目录