Ir para o conteúdo principal
WBC - GovBR-DS
Copiar página como Markdown para IA

Slider

Componente estável e recomendada para novos projetos.
Anatomia, uso, comportamento visual e recomendações conceituais são mantidos pelo Padrão Digital de Governo. Esta página documenta a implementação Web Components e sua API executável.

Visão Geral​

O componente br-slider é o controle deslizante do GovBR-DS, desenvolvido para permitir que a pessoa usuária selecione um valor numérico único ou uma faixa contínua de valores dentro de um intervalo delimitado.

Para que serve​

  • Seleção numérica fluida: Permite escolher valores deslizando uma alça (thumb) ao longo de uma trilha graduada, com atualização em tempo real.
  • Modo simples e composto (faixa / range): Suporta uma única alça para valor individual ou duas alças para delimitação de intervalo mínimo e máximo (ex.: faixa de preços, período de anos).
  • Entrada numérica sincronizada: Oferece campo de entrada numérico integrado opcional para digitação exata com sincronização bidirecional.
  • Acessibilidade WAI-ARIA: Suporta controle total por teclado (setas direcionais, Page Up, Page Down, Home e End) e comunica valores atuais via aria-valuenow.

Quando utilizar​

  • Utilize quando:
    • O usuário precisar definir grandezas graduais onde a exploração intuitiva seja mais conveniente do que a digitação manual isolada.
    • Para filtros de faixa de valores (ex.: "De R$ 100 até R$ 500").
  • Evite e prefira outro componente quando:
    • A precisão exata for estritamente necessária e o intervalo for arbitrário (prefira br-input numérico).
    • O valor for uma escolha categórica sem escala quantitativa (prefira br-select ou br-radio).

Estrutura e Slots​

O br-slider possui estrutura rica com slots de referência, validação e customização da alça:

  • ref-start: Slot para customização do rótulo de início da trilha.
  • ref-end: Slot para customização do rótulo de fim da trilha.
  • feedback: Slot para mensagens de validação (como br-message).
  • thumb-icon: Slot para ícone personalizado na alça de controle em modo simples.
  • thumb-start-icon: Slot para ícone na alça inicial em modo composto (range).
  • thumb-end-icon: Slot para ícone na alça final em modo composto (range).

Para a documentação completa de design, incluindo diretrizes de acessibilidade e especificações visuais, consulte o Design System do GovBR.

Exemplo(s)​

Desktop (100%)
Tablet - 768px
iPhone (iOS) - 390x844
Android - 360x800
Padrão
Compartilhar URL
Ativar movimento reduzido
Mudar fundo
Abrir no StackBlitz
Mais opções
Tela cheia
Carregando preview…
HTML
Controles do componente
Console: logs, eventos e erros
Angular (Somente leitura)
React (Somente leitura)
Vue (Somente leitura)
Acessibilidade
Recolher controles e código
Desfazer alteração
Refazer alteração
Comparar alterações
Formatar código
Resetar código para o estado inicial
Escolher formato para copiar

Propriedades​

customId​

Atributocustom-id
DescriçãoIdentificador único.
Caso não seja fornecido, um ID gerado automaticamente será usado.
Tipostring
Valor padrãogenerateUniqueId()

density​

Atributodensity
DescriçãoDensidade visual do componente.
Altera exclusivamente as dimensões da alça de controle (thumb).
Valores aceitos: 'small' (16px), 'medium' (20px - padrão), 'large' (24px).
'high' e 'low' são aceitos como sinônimos de 'small' e 'large'.
Tipo"high" | "large" | "low" | "medium" | "small"
Valor padrão'medium'

disabled​

Atributodisabled
DescriçãoDesativa o slider, tornando-o não interativo.
Tipoboolean
Valor padrãofalse

gradient​

Atributogradient
DescriçãoHabilita gradiente de cores na trilha e sincroniza dinamicamente a cor da alça (thumb)
e da etiqueta de valor (tooltip) com a cor correspondente à posição atual.
Pode ser um booleano (usa gradiente padrão verde -> amarelo -> vermelho)
ou uma string com cores/gradiente customizado (ex.: '#168821, #ffcd07, #e52207' ou 'linear-gradient(...)').
Tipoboolean | string
Valor padrão---

label​

Atributolabel
DescriçãoTexto descritivo associado ao slider para acessibilidade.
Tipostring
Valor padrão---

max​

Atributomax
DescriçãoValor máximo aceito pelo slider. Deve ser maior que min; valores inválidos usam 100 e relações inválidas usam min + 100.
Tiponumber
Valor padrão100

min​

Atributomin
DescriçãoValor mínimo aceito pelo slider. Valores inválidos usam 0.
Tiponumber
Valor padrão0

name​

Atributoname
DescriçãoNome do campo, utilizado em formulários nativos (<form>).
Tipostring
Valor padrão---

orientation​

Atributoorientation
DescriçãoOrientação canônica. Quando informada, tem precedência sobre vertical; valores inválidos usam horizontal.
Tipo"horizontal" | "vertical"
Valor padrão---

range​

Atributorange
DescriçãoAtiva o modo composto com duas alças para seleção de faixa.
Tipoboolean
Valor padrãofalse

rangeValue​

Atributo---
DescriçãoValor estruturado das duas alças no modo range.
Deve conter start e end finitos; valores inválidos mantêm o último valor efetivo.
Passe o objeto por property binding.
Exemplo de uso
const slider = document.querySelector('br-slider');
slider.range = true;
slider.rangeValue = { start: 20, end: 80 };
Tipo{ start: number; end: number; }
Valor padrão---

showBounds​

Atributoshow-bounds
DescriçãoExibe os limites nas referências inicial e final: min no início e max no fim
(limites fixos), tanto em modo simples quanto em modo composto (range). O valor
selecionado por cada alça é exibido na etiqueta (show-label), não nas referências.
Quando ativo, sobrescreve o conteúdo dos slots ref-start e ref-end.
Tipoboolean
Valor padrãofalse

showInput​

Atributoshow-input
DescriçãoExibe um br-input numérico sincronizado com a alça.
No modo range, exibe um campo para o início e outro para o fim; na
orientação horizontal ficam nas extremidades esquerda e direita, e na
vertical ficam acima e abaixo da trilha. Quando ativo, a etiqueta de valor
não é exibida.
Tipoboolean
Valor padrãofalse

showLabel​

Atributoshow-label
DescriçãoExibe etiqueta com o valor atual acima da alça (horizontal) ou à esquerda (vertical).
Ignorado quando show-input está ativo.
Tipoboolean
Valor padrãofalse

showTickLabels​

Atributoshow-tick-labels
DescriçãoExibe os valores das marcações derivadas de min, max e step.
Tipoboolean
Valor padrãofalse

showTicks​

Atributoshow-ticks
DescriçãoExibe gradações na trilha como pequenos espaços que indicam os steps disponíveis,
forçando a alça de controle a saltar entre os valores predefinidos e
impossibilitando a seleção de valores aleatórios.
Tipoboolean
Valor padrãofalse

step​

Atributostep
DescriçãoIncremento aplicado a cada passo. Deve ser maior que 0; valores inválidos usam 1.
Tiponumber
Valor padrão1

steps​

Atributosteps
DescriçãoLista de passos customizados para o slider.
Cada passo pode definir value, label (texto exibido no tooltip e/ou abaixo da trilha)
e icon (nome do ícone exibido abaixo da marcação do passo).
Aceita array de objetos SliderStep[], array de strings string[], ou string JSON.
Exemplo de uso
<br-slider
steps='[{"value": 1, "label": "Péssimo", "icon": "fa-solid:face-frown"}, {"value": 5, "label": "Excelente", "icon": "fa-solid:face-laugh"}]'
></br-slider>

const slider = document.querySelector('br-slider');
slider.steps = [
{ value: 1, label: 'Péssimo', icon: 'fa-solid:face-frown' },
{ value: 5, label: 'Excelente', icon: 'fa-solid:face-laugh' },
];
TipoSliderStep[] | string
Valor padrão---

thumbEndIcon​

Atributothumb-end-icon
DescriçãoNome do ícone da alça final (no modo range, alça à direita/superior).
Tipostring
Valor padrão---

thumbIcon​

Atributothumb-icon
DescriçãoNome do ícone a ser exibido no interior da alça de controle (thumb).
No modo range, aplica-se a ambas as alças caso thumbStartIcon ou thumbEndIcon não sejam especificados.
Exemplo: 'fa-solid:arrows-left-right', 'fa-solid:circle'.
Tipostring
Valor padrão---

thumbStartIcon​

Atributothumb-start-icon
DescriçãoNome do ícone da alça inicial (no modo range, alça à esquerda/inferior).
Tipostring
Valor padrão---

validator Componente/funcionalidade ainda em testes. Use com cuidado, pois podemos fazer alterações.​

Atributo---
DescriçãoRegra síncrona ou assíncrona aplicada ao número ou intervalo selecionado.
No modo range, recebe um objeto com start e end.
Exemplo de uso
const slider = document.querySelector('br-slider');
slider.validator = (value) => {
const minimum = typeof value === 'number' ? value : value.start;
return minimum >= 18 ? null : 'O valor inicial deve ser pelo menos 18';
};
Tipo(value: number | SliderRangeValue) => string | Promise<string>
Valor padrão---

value​

Atributovalue
DescriçãoValor atual do slider (alça inicial no modo composto). Valores não finitos usam o limite mínimo;
valores fora do intervalo são limitados.
Tiponumber
Valor padrão0

valueEnd Componente mantido por compatibilidade; prefira a alternativa indicada na documentação.​

Atributovalue-end
DepreciaçãoUse rangeValue.
DescriçãoValor da alça final no modo composto (range).
Quando não fornecido em modo composto, assume o valor de max. Valores não finitos usam max,
valores fora do intervalo são limitados.
Tiponumber
Valor padrãoNaN

vertical Componente mantido por compatibilidade; prefira a alternativa indicada na documentação.​

Atributovertical
DepreciaçãoUse orientation.
DescriçãoExibe o slider na orientação vertical.
Tipoboolean
Valor padrãofalse

Slots​

NomeDescrição
"feedback"Mensagem de validação, normalmente um br-message.
"ref-end"Conteúdo exibido como referência final abaixo da trilha.
"ref-start"Conteúdo exibido como referência inicial abaixo da trilha.
"thumb-end-icon"Ícone customizado na alça final em modo composto.
"thumb-icon"Ícone customizado na alça de controle em modo simples.
"thumb-start-icon"Ícone customizado na alça inicial em modo composto.

Eventos​

EventoDescriçãoDepreciaçãoPropagação
brDidChangeValue Componente mantido por compatibilidade; prefira a alternativa indicada na documentação.Disparado após alteração do valor da alça inicial.Use o evento nativo input.true
brDidChangeValueEnd Componente mantido por compatibilidade; prefira a alternativa indicada na documentação.Disparado após alteração do valor da alça final (modo composto).Use o evento nativo input e leia event.target.rangeValue.true
brSliderValidationChange Componente/funcionalidade ainda em testes. Use com cuidado, pois podemos fazer alterações.Emitido ao iniciar e concluir a validação customizada.---true

Métodos​

checkValidity​

DescriçãoRetorna se o slider atende às constraints configuradas.
AssinaturacheckValidity() => Promise<boolean>
Parâmetros---

getValidationState​

DescriçãoRetorna um snapshot serializável da Constraint Validation API.
AssinaturagetValidationState() => Promise<FormValidationState>
Parâmetros---

reportValidity​

DescriçãoValida e solicita ao navegador a apresentação do erro atual.
AssinaturareportValidity() => Promise<boolean>
Parâmetros---

setCustomValidity​

DescriçãoDefine ou limpa uma mensagem de validade customizada.
AssinaturasetCustomValidity(message: string) => Promise<void>
Parâmetrosmessage:

validate Componente/funcionalidade ainda em testes. Use com cuidado, pois podemos fazer alterações.​

DescriçãoExecuta o validator do slider e retorna se o valor atual é válido.
Assinaturavalidate() => Promise<boolean>
Parâmetros---

CSS Shadow Parts​

NomeDescrição
"base"Contêiner principal do slider.
"body"Área que agrupa trilha e referências.
"feedback"Contêiner da mensagem de validação.
"filled-track"Trecho preenchido da trilha.
"input-wrapper"Contêiner do campo numérico.
"input"Campo numérico sincronizado com o slider.
"layout"Contêiner de layout do slider.
"reference-bound"Valor fixo de limite renderizado por show-bounds.
"reference-end"Referência final.
"reference-start"Referência inicial.
"references"Contêiner das referências inicial e final.
"step"Botão indicador de passo customizado individual.
"steps"Contêiner das marcações de passos customizados.
"thumb-end"Alça final do slider em modo composto.
"thumb-start"Alça inicial do slider.
"thumb"Alça de controle do slider.
"tick-label"Etiqueta de uma marcação intermediária.
"tick-labels"Contêiner das etiquetas das marcações.
"track-visual"Trilha visual do slider.
"track"Área interativa da trilha.
"value-label-arrow"Seta da etiqueta de valor.
"value-label"Etiqueta com o valor da alça.

Validação​

Para o contrato geral e a matriz de componentes, consulte o guia de formulários. Esta seção documenta o contrato específico do br-slider.

Defina min, max e step para validar o valor escalar. Em intervalos, use range-value com { start, end }; o intervalo deve estar dentro dos limites e ordenado.

input representa alteração contínua e change o commit. Regras de domínio podem usar setCustomValidity(); consulte os flags por getValidationState().

A mensagem é renderizada como br-message quando não existe feedback. Use o slot feedback para fornecer o conteúdo e manter a referência ARIA sem mensagens duplicadas.

Para regras de domínio síncronas ou assíncronas, use validator. Ele recebe o número selecionado ou { start, end } no modo range. A validação também pode ser acionada por await slider.validate() e emite brSliderValidationChange.

Acessibilidade​

Forneça label e limites que expliquem a escala. As setas alteram o valor em um step, Home e End vão aos limites e Page Up e Page Down avançam em passos maiores. No modo range, cada alça recebe um nome com “início” ou “fim” e não pode ultrapassar a outra.

O componente expõe valor, mínimo, máximo e orientação por ARIA. Não use somente cor, posição ou tooltip para explicar o valor; quando a escala não for evidente, mostre referências textuais.

Eventos nativos​

Elemento HTML de referência​

A referência é <input type="range">. br-slider usa thumbs com role="slider"; no modo range combina dois valores.

Como ouvir os eventos​

const slider = document.querySelector('br-slider');
slider.addEventListener('input', () => console.log(slider.value));
slider.addEventListener('change', () => console.log('commit', slider.value));

Eventos nativos suportados​

EventoQuando ocorreBubblesComposedCancelableHostObservações
changeinteração é confirmadaSimSimNãoSimNo teclado acompanha cada passo confirmado.
inputvalor muda durante interaçãoSimSimNãoSimContínuo no ponteiro; uma vez por passo no teclado.
teclado e focothumb recebe comando/fococonforme o tipoSimconforme o tipoSimSetas, Home, End e Page Up/Down.

Eventos não suportados ou ainda não caracterizados​

O modo range não possui equivalente HTML único; use rangeValue. Ponteiro e pointer cancel ainda aguardam matriz completa nos três engines.

Eventos customizados​

brDidChangeValue e brDidChangeValueEnd são aliases depreciados.

Valor, frameworks e acessibilidade​

Leia value e, no intervalo, rangeValue/valueEnd. FormData e validade pertencem ao host. Wrappers usam input/change. Cada thumb expõe nome, limites, orientação e valor por ARIA.

Evidência de teste​

src/shared/contracts/platform-contract.e2e.tsx cobre teclado real, ordem, target e caminho em Chromium headless; _tests/slider.e2e.tsx cobre teclas e modo range.

Atributos nativos​

O host FACE aceita name, form, disabled e autofocus. min, max, step, value e, no modo range, value-end/range-value definem os thumbs e o valor submetido.

list, stepUp() e stepDown() não são copiados de <input type="range">: ticks, dois thumbs e mudanças de valor pertencem ao contrato próprio do slider.

Dependências​

Depende de​

Gráfico​

Migração para <br-slider>​

O br-slider não existia na linha 1.x. Na 2.x, ele oferece seleção numérica simples ou por intervalo e participa de formulários.

Uso básico​

<br-slider name="volume" label="Volume" min="0" max="100" step="5" value="50"></br-slider>
  • use min, max e step para definir os valores permitidos;
  • leia value nos eventos input e change;
  • ative range e use rangeValue para trabalhar com duas alças;
  • use orientation="vertical" em vez do alias legado vertical;
  • use show-label, show-input, show-ticks e show-bounds somente quando essas referências ajudarem a tarefa.

No modo de intervalo, atribua { start, end } à propriedade JavaScript rangeValue. O atributo legado value-end continua disponível por compatibilidade, mas não deve ser usado em novos códigos.

Comece aquiComponentesQuickstartsSobre o projetoRepositório GitLabVersõesDiscordGovBR-DSFAQWikiRedefinir cookies