メインコンテンツまでスキップ

Slider

カスタマイズできるスライダーのコンポーネント。

Source Style
Loading...
function App() {
  const [value, setValue] = useState(64)

  return (
    <div
      style={{
        display: 'flex',
        justifyContent: 'center',
        alignItems: 'center',
        gap: 8,
      }}
    >
      <Slider.Root
        className={sliderTheme.root}
        value={value}
        min={0}
        max={100}
        onChange={(v) => setValue(v)}
      >
        <Slider.Track className={sliderTheme.track}>
          <Slider.Thumb className={sliderTheme.thumb} aria-label="Level" />
        </Slider.Track>
      </Slider.Root>
      <span
        style={{
          width: '2rem',
        }}
      >
        {value}
      </span>
    </div>
  )
}

インポート​

import { Slider } from '@tremolo-ui/react'

API リファレンス​

各パートには、そのパート独自の props を載せています。これに加えて、描画する要素の属性(className や style など)も受け取ります。

Svelte / Vue でも props は同じで、書き方だけがそれぞれの流儀になります(className ではなく class、bind:value や v-model、中身は snippet やスロットなど)。Svelte と Vue を参照してください。

状態は data 属性として要素に乗っているので、セレクタ 1 つで届きます(スタイリングを参照)。属性はその状態が on の間だけ付きます。

Root​

値と設定を持ち、中のパートに渡します。

Prop型既定値
value*number—
min*number—
max*number—
stepnumber1
scaleScalelinearScale
orientation"horizontal" | "vertical"'horizontal'
reversebooleanfalse
dragCursorCursor'pointer'
wheelModifierValue<InputEventOption> | null['raw', 1]
dragSensitivityModifierValue<number>{ default: 1, shift: 0.1 }
keyboardModifierValue<InputEventOption> | null{ default: ['raw', 1], shift: ['raw', 0.1] }
disabledboolean—
readOnlyboolean—
onChange(value: number) => void—
onChangeStart(value: number, source: ChangeSource) => void—
onChangeEnd(value: number, source: ChangeSource) => void—
changeEndDelaynumber500
children*ReactNode—
actionsRefRef<SliderMethods>—

すべての説明: SliderProps

Data 属性値
[data-orientation]"horizontal" | "vertical"
[data-disabled]disabled のときに付きます
[data-readonly]readonly のときに付きます

Track​

値が動くバー。値の位置を --percent に書くので、テーマは値より下の部分を塗れます。Slider.Thumb はこの中に置きます。

Prop型既定値
lengthstring | number—
thicknessstring | number—
activeColorstring—
inactiveColorstring—

すべての説明: SliderTrackProps

カスタムプロパティ書き込む prop決めるもの
--lengthlengthスライダーの向きに沿ったトラックの長さ。
--thicknessthicknessそれと直交する方向のトラックの太さ。
--active-coloractiveColormin から値までの部分の色。
--inactive-colorinactiveColorトラックの残りの部分の色。
--percentコンポーネント値の位置(パーセント)。

--percent は CSS だけでは算出できない唯一の値で、トラックが自分では何も塗らない 理由でもあります。塗りはパッケージが描くものではなく、テーマのルールです。

.track {
background: linear-gradient(
var(--axis),
var(--active-color) var(--percent),
var(--inactive-color) var(--percent)
);
}

このルールを置き換えれば、色を足す、画像を敷く、値に応じて埋まる目盛りにするなど、 トラックは何にでもできます。

Data 属性値
[data-orientation]"horizontal" | "vertical"
[data-disabled]disabled のときに付きます
[data-flipped]値が向こう側の端から伸びるとき(縦向きと reverse のどちらか一方)に付きます

Thumb​

つまみ。中にある視覚的に隠れた range input が、フォーカスを受け取り ARIA を持ちます。

子はつまみの中に描かれます。つまみはどちらにしても 1 つの要素なので、子はつまみを置き換えるのではなく、その上に載る飾りです。つまみ自体の見た目は className と style で変えます。

Prop型既定値
colorstring—
actionsRefRef<SliderThumbMethods>—

すべての説明: SliderThumbProps

カスタムプロパティ書き込む prop決めるもの
--colorcolorつまみの色。
Data 属性値
[data-disabled]disabled のときに付きます
[data-readonly]readonly のときに付きます

Marks​

トラックに沿って並ぶ目盛り。options か、目盛りごとに置いた子の Slider.MarksOption から作ります。options を設定している間、子は無視されます。

Prop型既定値
gapstring | number—
optionsMarksOptions—

すべての説明: SliderMarksProps

カスタムプロパティ書き込む prop決めるもの
--gapgap目盛りとトラックの間隔。
Data 属性値
[data-orientation]"horizontal" | "vertical"

MarksOption​

value の位置に置く、1 つの目盛りとそのラベル。

Prop型既定値
value*number—
markbooleantrue
labelstring | number | null—
thicknessstring | number—
lengthstring | number—
gapstring | number—
classes{ mark?: string; label?: string }—
styles{ mark?: CSSProperties; label?: CSSProperties }—

すべての説明: SliderMarksOptionProps

カスタムプロパティ書き込む prop決めるもの
--thicknessthickness目盛りの太さ。
--lengthlength目盛りの長さ。
--gapgap目盛りとラベルの間隔。

ラベルの幅は styles.label または classes.label のクラスで指定します。

Data 属性値
[data-orientation]"horizontal" | "vertical"

中の目盛りにも [data-orientation] が付きます。