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

VisuallyHidden

Texto oculto, que o leitor de tela lê mas a tela não mostra. Use para dar o contexto que quem enxerga tira do layout, como a qual fatura um link "Editar" pertence, ou para anunciar uma mudança.

Padrão Visually hidden content (clip pattern)Componente de servidorCódigo ↗

Instalação

Configure o Camaleo uma vez (Instalação) e importe o componente. Ele não tem estado, então renderiza no servidor.

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

Anatomia

Um <span> reduzido a 1 × 1 px e recortado. Ele continua na página e na árvore de acessibilidade, então leitores de tela e ferramentas de tradução ainda recebem o texto.

Por que não display: none ou hidden?

display: none, visibility: hidden e o atributo hidden tiram o elemento da árvore de acessibilidade junto com a tela: ninguém recebe o texto. aria-hidden="true" faz o contrário do que você quer aqui: continua na tela e o leitor de tela pula. O VisuallyHidden é o único jeito de deixar um texto só para a tecnologia assistiva.

Exemplos

Cada exemplo é um arquivo real que você pode copiar. Ligue um leitor de tela (VoiceOver, NVDA ou TalkBack) para ouvir o texto escondido, ou abra a árvore de acessibilidade nas ferramentas de desenvolvedor do navegador.

minimal · light · #3fa34d
Jeitos de esconder conteúdo e quem ainda recebe
TécnicaNa telaLeitor de tela
VisuallyHiddenNãoSim
display: noneNãoNão
atributo hiddenNãoNão
aria-hidden="true"SimNão

Quatro jeitos de esconder

Só o VisuallyHidden tira o texto da tela e mantém para o leitor de tela. display: none e hidden escondem de todo mundo; aria-hidden esconde só do leitor de tela.

aria-label ou texto escondido

Num IconButton, o aria-label basta. Quando parte do nome aparece na tela, acrescente o resto como texto escondido: é texto de verdade, então a tradução do navegador também traduz.

Café do Cerrado, 500 gR$ 49,00Carrinho: 2 itens

Anunciando uma mudança

Adicione ao carrinho. O número muda na tela, e um role="status" escondido, renderizado vazio desde o início, conta a quem usa leitor de tela o que aconteceu.

Clique aqui e aperte Tab.

Pular para o conteúdo

Café do mês

Fazenda Santa Inês, bourbon amarelo, 1.150 m.

Link para pular

Clique na dica e aperte Tab. O SkipLink fica no topo da página e aparece por cima dela no foco: use-o para pular para o conteúdo principal.

Clique aqui e aperte Tab.

Pular para os resultados
Torra

12 cafés

O foco chega aqui, depois dos filtros.

Aparece no foco

Clique na dica e aperte Tab. Com focusable, o link "Pular para os resultados" aparece no lugar enquanto tem foco, e o Enter pula os filtros. Sem ele, o texto continua escondido mesmo com foco.

Faturas de março de 2026, das mais novas para as mais antigas
ClienteValorSituação
Padaria EstrelaR$ 2.060,00Paga
Café AuroraR$ 932,00Em aberto
Mercado Bom PreçoR$ 6.200,00Vencida

Legenda de tabela

Quando o layout já deixa claro para que serve a tabela, uma <caption> escondida ainda dá nome a ela, e à área de rolagem no celular.

Um rótulo que não aparece

Uma caixa de busca sozinha ao lado de um botão de busca pode esconder o rótulo. Ele ainda precisa ser um <label> de verdade; o placeholder some assim que a pessoa digita.

Chaleira bico de gansoNota 4,8 de 5, em 312 avaliaçõesR$ 319,00

Símbolos em palavras

"★ 4,8 (312)" não diz nada em voz alta. Esconda os símbolos com aria-hidden e dê ao leitor de tela a frase inteira.

Em contexto

Texto escondido está em toda interface bem feita. São pedaços inteiros de interface para copiar, no estilo que você escolheu.

Faturas recentes

Faturas de março de 2026, das mais novas para as mais antigas
ClienteValorSituaçãoAções
Padaria Estrelanº 4821R$ 2.060,00PagaEditar fatura nº 4821
Café Auroranº 4822R$ 932,00Em abertoEditar fatura nº 4822
Mercado Bom Preçonº 4823R$ 6.200,00VencidaEditar fatura nº 4823
Tabela de faturasCard · Table · Link · IconButton · VisuallyHidden
Pular para o conteúdo
Loja Acme
Café do mêsFazenda Santa Inês, bourbon amarelo, 1.150 m.
Cabeçalho de lojaSkipLink · Button · Badge · VisuallyHidden
Compare os planos
RecursoGrátisPro
Faturas por mês10Ilimitadas
Lembretes de pagamentoIncluídoIncluído
Conciliação bancáriaNão incluídoIncluído
Suporte por telefoneNão incluídoIncluído
Comparação de planosTable · VisuallyHidden

Boas práticas

FaçaComplete a frase dos links repetidos.

Na tela, "Editar" está na linha certa. Numa lista de links, "Editar fatura nº 4821" continua fazendo sentido.

EviteTrês links chamados Editar.

Quem lista os links no leitor de tela ouve "Editar, Editar, Editar" e não sabe qual é qual.

FaçaRótulos visíveis quando cabe.

Todo mundo ganha com um rótulo: pessoas com dificuldade de memória ou atenção, e quem confere o que digitou.

EviteEsconder rótulos para economizar espaço.

Com os campos preenchidos, nada na tela diz qual é qual.

Props

PropriedadeTipoPadrãoDescrição
focusablebooleanfalseMostra o conteúdo enquanto ele, ou algo dentro dele, tem foco, como um link "Pular para os resultados". Precisa da folha de estilo do Camaleo.
styleCSSProperties—Aplicado depois dos estilos que escondem, então pode sobrescrevê-los. Não faça isso, a menos que queira mostrar o texto.
roleReact.AriaRole—Use "status" (educado) ou "alert" (urgente) para anunciar mudanças. Renderize vazio primeiro e depois coloque o texto.
childrenReactNode—O texto a ler. Mantenha um espaço no começo quando ele continua um texto visível, como em "Editar" + " fatura nº 4821".

Todos os atributos de um <span> passam adiante, como id (para apontar um aria-describedby para ele) ou aria-live.

Styling hooks

Não há o que estilizar: os estilos que escondem são inline, então nenhuma folha de estilo os desfaz sem querer. Com focusable eles vêm da folha de estilo, porque estilos inline não reagem ao foco.

Atributos

data-slot"visually-hidden"
data-focusablecom focusable; escondido enquanto nada dentro tem foco

Tokens que ele lê

Acessibilidade

TabO VisuallyHidden não recebe foco. Um link ou botão dentro dele só cabe com focusable, que o mostra enquanto tem foco; sem isso, ele receberia foco sem aparecer.

Relacionados

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