Pular para o conteúdo
// visualizar em
salvo em todas as páginas

Slider

Controle deslizante que define um valor, ou um intervalo, arrastando ao longo de uma trilha. Ideal para quantidades aproximadas, em que ver a posição importa mais do que digitar um número exato.

Feito com Base UIPadrão WAI-ARIA SliderComponente clienteCódigo ↗
minimal · light · #3fa34d
thumbAlignment
disabled

Instalação

Configure o Camaleo uma vez (Instalação) e importe. O estilo carregado cuida da trilha e dos marcadores.

import { Slider } from "@camaleo/react";

Anatomia

Um componente que renderiza o controle, a trilha, o preenchimento e um marcador por valor. Cada parte tem um data-slot que você pode usar no CSS.

━━━━━━●──────
[data-slot="slider"] › [data-slot="slider-control"][data-slot="slider-track"] · [data-slot="slider-indicator"][data-slot="slider-thumb"]

Exemplos

Cada exemplo é um arquivo real que você pode copiar. Todos usam o estilo, o modo e a cor escolhidos na barra acima.

minimal · light · #3fa34d

Intervalo

Passe um array e você ganha um marcador por valor; dê nome a cada um com getAriaLabel, já que "mínimo" e "máximo" não aparecem na tela.

R$ 25.000

Com o valor à mostra

Arraste. Mostre o valor ao lado do rótulo e passe o mesmo format e locale para o leitor de tela dizer "R$ 25.000" em vez de "25000".

16 px

Passos

O step encaixa nos valores que fazem sentido; o largeStep é o salto do Page Up e do Page Down.

Horário de trabalho09:00 – 18:00

Intervalo com distância mínima

O minStepsBetweenValues mantém os marcadores afastados, aqui pelo menos duas horas entre início e fim.

Solte para salvar

Salvar ao soltar

Arraste e solte. O onValueCommitted dispara uma vez no fim, então você salva ou busca uma vez, não a cada pixel.

Mostra clínicas até essa distância de Curitiba, PR.

Dentro de um Field

O FieldLabel dá nome ao marcador e o FieldDescription explica a escala, sem precisar de getAriaLabel.

Equalizador

Vertical

orientation="vertical" põe sliders lado a lado, como num equalizador; o getAriaValueText acrescenta a unidade, e o leitor de tela diz "+4 decibéis".

Assine o Pro para assistir acima de 720p.

Desativado, com o motivo

Um slider travado ainda mostra o valor atual; diga logo abaixo o que libera.

Em contexto

Sliders ficam em painéis e players. São pedaços inteiros de interface para copiar, no estilo que você escolheu.

Maré Alta

Luiza Prado

1:12

3:32

Player de áudioCard · Slider · IconButton · Text

Preço

R$ 150R$ 600
Filtro de preçoCard · Slider · Checkbox · Button

Tela

16 px

Seu pedido nº 48213 sai amanhã.

Tamanho do textoCard · Field · Slider · Switch

Boas práticas

R$ 25.000
FaçaMostre o número quando ele importa.

Quem escolhe um empréstimo precisa ver o valor, não adivinhar pela posição.

EviteTrilha sem número para um valor preciso.

Onde fica R$ 25.000 nessa barra? Ninguém sabe.

FaçaValores aproximados.

Volume, brilho, zoom: o próprio efeito é o retorno.

EviteValores exatos numa escala longa.

Arrastar até 1987 entre 90 anos é chato; use um NumberField ou um campo de texto.

Props

PropriedadeTipoPadrãoDescrição
getAriaLabel((index: number) => string)—Nome acessível de cada marcador, por exemplo (i) => ["Mínimo", "Máximo"][i]. Dispensável dentro de um Field com rótulo.
getAriaValueTextfunction—O valor falado de cada marcador, por exemplo (texto) => texto + " reais". Por padrão, o valor formatado.
defaultValuenumber | number[]—O valor inicial, sem controle. Um array cria um intervalo.
disabledbooleanfalseDesativa o slider.
formatIntl.NumberFormatOptions—Opções do Intl.NumberFormat para o valor lido pelo leitor de tela (aria-valuetext).
localeIntl.LocalesArgument—O idioma usado no format, por exemplo "pt-BR".
maxnumber100O maior valor.
minnumber0O menor valor.
minStepsBetweenValuesnumber0Quantos passos, no mínimo, entre os marcadores de um intervalo.
namestring—O nome do campo no envio do formulário.
orientationOrientation'horizontal'A direção da trilha: horizontal ou vertical (de baixo para cima).
stepnumber1O passo entre valores.
largeStepnumber10O passo do Page Up / Page Down e das setas com Shift.
thumbAlignment"center" | "edge" | "edge-client-only"'center'Como o marcador se alinha às pontas: centralizado no valor ou contido na trilha.
thumbCollisionBehavior"none" | "push" | "swap"'push'O que acontece quando os marcadores se encontram: empurrar, trocar ou parar.
valuenumber | number[]—O valor controlado. Um array cria um intervalo.
onValueChange(value, details) => void—Chamado a cada mudança, inclusive durante o arraste.
onValueCommitted(value, details) => void—Chamado uma vez quando a pessoa solta o marcador ou termina pelo teclado.

Passe um array em value ou defaultValue para um intervalo. Dentro de um Field, o rótulo e a descrição chegam aos marcadores, e disabled / name também podem vir de lá.

Styling hooks

Mude o visual sem fazer fork: use os atributos ou defina os tokens num elemento pai, num estilo ou no próprio slider.

Atributos

data-slot"slider" · "slider-control" · "slider-track" · "slider-indicator" · "slider-thumb"
data-draggingpresente enquanto um marcador é arrastado
data-orientation"horizontal" · "vertical"
data-disabledpresente quando desativado

Tokens que ele lê

Cor

--cml-accent--cml-border--cml-border-control--cml-fg--cml-field-shadow--cml-focus-offset--cml-focus-ring--cml-focus-width

Forma e tamanho

--cml-radius-pill

Tipografia e movimento

--cml-duration-fast--cml-ease-standard

Só deste componente

--cml-disabled-opacity--cml-slider-fill--cml-slider-fill-image--cml-slider-fill-inset--cml-slider-thumb-bg--cml-slider-thumb-border--cml-slider-thumb-h--cml-slider-thumb-shadow--cml-slider-thumb-w--cml-slider-track--cml-slider-track-border--cml-slider-track-h

Acessibilidade

→ / ↑Aumenta o valor em um passo.
← / ↓Diminui o valor em um passo.
Page Up / Page DownMuda o valor pelo largeStep.
Home / EndVai para o mínimo ou o máximo.
TabPassa de um marcador para o outro, em ordem.

Relacionados

Esta página foi útil? · Editar esta página no GitHub