Propriedade CSS touch-action: como fazer gestos táteis com precisão

Última atualização: 11/14/2025
  • Defina quais gestos manejam o navegador: deslocamento, pellizco-zoom e toque duplo.
  • Combina valores (pan-x/pan-y/pan-*) e pitada-zoom, ou usa a manipulação de ataque.
  • Atenção à acessibilidade: evite bloquear o zoom salvo se for necessário.
  • Compatibilidade amplia; iOS Safari apresenta tarefas, teste de hardware real.

Ilustração CSS de ação por toque

Quando trabalhamos com interfaces táteis, há um detalhe que marca a diferença entre uma experiência fluida e outra frustrante: Decida quais são os gestos de gerenciamento do navegador e quais são os gestos de gerenciamento do seu código. A propriedade CSS touch-action é apenas o interruptor fino que permite ajustar esse comportamento ao milímetro.

Lejos de ser algo esotérico, touch-action controla o deslocamento, o zoom por pellizco e outros gestos predeterminados que o navegador aplicaria ao tocar um elemento. Bem usado, evita atrasos em eventos, choca menos com seu JavaScript e dá controle real em componentes como mapas, carros ou lienzos de jogos.

O que é exatamente touch-action?

Em poucas palavras, touch-action indica ao agente do usuário quais ações táteis podem executar de forma nativa em uma região da página e quais devem ser reservados para seus gerenciadores de eventos. É o complemento tátil de pointer-events, que apenas associamos mais interações com o rato, mas com um enfoque específico em gestos como o deslocamento e o zoom.

Deste modo, Você pode permitir que o navegador faça seu trabalho (desplazar, fazer zoom) ou bloqueá-lo para implementar suas interações (por exemplo, zoom interno de um mapa) sem interferências nem demoras artificiais nos click.

Exemplo de CSS de ação de toque

Sintaxe e formas de uso

A propriedade aceita varias combinações com regras muito específicas. Você pode declarar um único valor ou compor vários valores compatíveis para ajustar o comportamento tátil com precisão.

/* Declaración típica */
#elemento {
  touch-action: pan-right pinch-zoom;
}

Se você precisar da gramática exata, esta é a sintaxe formal reconhecida:

touch-action =
  auto |
  none |
   ||  || pinch-zoom ] |
  manipulation

Em outras palavras, você pode usar um dos valores globais (auto, none, manipulação) ou bem uma combinação dos conjuntos de deslocamento horizontal e/ou vertical, mais pinch-zoom opcionalmente.

Valores de ação de toque e o que acontece com cada um

Esta propriedade oferece valores pensados ​​para casos muito concretos. Escolha o que toca evita ter que reimplementar gestos com JavaScript ou, ao contrário, você deixa a via livre para fazê-lo quando for necessário.

auto

Deja que el navegador gerenciamento de todos os gestos de deslocamento e zoom. É o comportamento por defeito: o usuário pode deslizar para desplazarse e pellizcar para ampliar sem que você tenha que fazer nada mais.

none

Bloqueie por completo a intervenção do navegador nesses gestos. Não há deslocamento nem pellizco-zoom nativos; você implementará JavaScript se quiser esse comportamento. É ideal para mapas ou garantias onde o controle deve ser 100% seu.

manipulation

Permite o deslocamento e o pellizco-zoom, mas desativa ciertos gestos no padrão como o toque duplo para ampliar. É, na prática, um apelido de "panorâmica horizontal, panorâmica vertical, zoom com os dedos" (a combinação explícita é válida por compatibilidade). Ao desligar o toque duplo, também elimina a necessidade de retroceder a geração de eventos click depois de um toque, o que melhora a resposta da interface.

pan-x

Ativo o deslocamento horizontal com um solo dedo. Puede combinarse con pan-y, pan-up, pan-down e / ou pinch-zoom. É um atajo que engloba pan-left y pan-right.

pan-y

Ativo o deslocamento vertical com um solo dedo. Puede combinarse con pan-x, pan-left, pan-right e / ou pinch-zoom. Do mesmo modo, é um atajo que inclui pan-up y pan-down.

pan-left, pan-right, pan-up, pan-down

Eles permitem gestos de deslocamento com um único gesto que é executado na direção indicada. Olho: o deslocamento foi iniciado uma vez, você pode inverter a direção. Há um detalhe que você pode confundir: nos termos da interface, "panorâmica para cima" significa que o usuário arrastra o dinheiro para baixo na tela para que o conteúdo se mova para baixo; y "panorâmica para a esquerda" implica arrastrar o conteúdo para a direita para que o conteúdo se desloque para a esquerda.

pinch-zoom

Permitir gestos multi-dedo de zoom e deslocamento. Você pode combinar com qualquer valor pan-*. Nos navegadores que você implementa, o agente do usuário pode iniciar o zoom contínuo imediatamente sem esperar que um gerenciador de eventos cancele.

Regras de combinação e normalização

Ao combinar direções, existem regras de simplificação. Tudo o que você pode escrever é válido se tiver uma forma mais simples. Por exemplo, "pan-left pan-right"é considerado inválido porque a forma correta e mais curta é pan-x.

No entanto, há combinações que fazem sentido, como "pan-left pan-down"para permitir deslocamentos que inician para a esquerda ou para baixo. Neste caso, não há uma abreviatura direta equivalente, pois é uma combinação aceitável.

Lembre-se também disso pode mezclar ejes y pellizco. Por exemplo, "pan-x pinch-zoom" permite o deslocamento horizontal por um dedo e zoom multi-dedo uma vez, deixando o deslocamento vertical nativo.

Como usar cada valor: patronos reais

O caso típico é um mapa ou uma garantia de jogo incorporada na página. Se você quiser que o gesto de pellizcar afete o próprio mapa e não o zoom do navegador, te interesa declarar touch-action: none; e escreva seu zoom personalizado em JavaScript.

Outro cenário é quando seu código apenas implemente uma parte da interação (por exemplo, o zoom), e prefere que o navegador mantenha o deslocamento nativo. Nesse caso, "touch-action: pan-x pan-y;"Diga ao agente do usuário que gerencia todo o deslocamento e deixe-o livre para ocupar o zoom como quiser.

Para componentes de UI como carros horizontais, pan-x suele ser la mejor optción. Permite o deslocamento lateral com uma ação, mantém o pellizco-zoom desativado se não houver nenhuma adição e evita conflitos com a rolagem vertical da página se você não quiser ativá-la.

Se sua prioridade é essa resposta imediata do toque e eliminação do retardo do toque duplo, manipulation é um ataque estupendo. Saia da torneira dupla para ampliar e veja a necessidade de retrair o click, o que dá uma sensação de "mal-humorado" em botões e links.

Impacto na acessibilidade

Um ponto crítico: si declaras touch-action: none; Bloqueia o zoom nativo do navegador. As pessoas com baixa visão que precisam ampliar para ler perderão essa capacidade, o que poderá converter sua interface em inacessível.

Quando o contexto permitir, considerar manter pinch-zoom ativado ou pesquise alternativas de acessibilidade que não impede o aumento. Fazer zoom é, para muitos usuários, uma ferramenta de leitura essencial; não la desactives a la ligera.

Compatibilidade entre navegadores

O apoio de touch-action es amplio, pero con matices. Os navegadores modernos como Chrome (36+), Edge (12+), Firefox (52+) e Opera (23+) implementa a propriedade com os valores principais.

O ponto delicado historicamente foi Safari. iOS Safari apresentou limitações, com suporte sólido para auto y manipulation, enquanto outros valores foram mais variáveis ​​dependendo da versão e do contexto. Nas versões recentes do Safari de escritorio (13+), a compatibilidade é notavelmente melhor, mas conviene validar casos específicos, sobre tudo depende de combinações avançadas.

As tabelas de compatibilidade públicas (as típicas que consultamos no diário) é atualizado com contribuições da comunidade e estatísticas de uso; Se seu projeto for sensível a gestos concretos, experimente dispositivos reais. Tens conta também que apenas em dispositivos com tela tátil você poderá verificar o comportamento de forma fidedigna.

Exemplos práticos de uso

Vejamos alguns padrões de declaração que podem solucionar sua vida. Lembre-se de testar sempre o hardware tátil para comprovar que a experiência é a esperada.

1) Desativar todos os gestos (mapa ou canvas personalizado)

Útil quando você deseja implementar o arrasto e o zoom interno sem interferências. O navegador não interceptará nem o deslocamento nem o pellizco.

<!-- HTML -->
<div id='mapa' class='superficie'></div>

<!-- CSS -->
.superficie {
  touch-action: none;
}

2) Permitir deslocamento nativo, controlar apenas o zoom

Se seu JavaScript carregar o zoom, deixe o navegador gerenciar a rolagem em ambos os itens para não reinventar a roda.

.zoom-personalizado {
  touch-action: pan-x pan-y;
}

3) Deslocamento horizontal com pellizco-zoom

Para carrosséis complexos ou galerias: role horizontalmente com um dedo e zoom com dos, sem rolagem vertical nativa.

.galeria-avanzada {
  touch-action: pan-x pinch-zoom;
}

4) Deslocamentos para direção inicial

Em algumas ocasiões, convém permitir apenas gestos que arrancam para uma direção específica (p. ej., para não interferir com outros componentes).

.panel-contextual {
  touch-action: pan-left pan-down;
}

5) Atajo pragmático: manipulação

Quando você busca uma resposta tátil contundente sem toque duplo, manipulation é um grande conforto. Ajuda para evitar o retrocesso do click pós-toque.

button, a {
  touch-action: manipulation;
}

Relacionamento com pointer-events e eventos de clic

Embora às vezes sejam confundidos, touch-action y pointer-events atacan problemas distintos. O segundo decide se um elemento responde a "punteros" (ratón, táctil, lápiz) no nível de teste de acerto; o primeiro determinado quais gestos táteis por defeito podem executar o navegador naquela região.

Adicionalmente, desativar gestos como el toque duplo con manipulation eliminar o retrocesso clássico do click tras un toque en móviles. Esse atraso existia para distinguir entre um toque simples e o início de um toque duplo para zoom; se o toque duplo não existir, o navegador pode despachar o click sem esperar

Notas e detalhes de implementação

Com pinch-zoom, há navegadores que inicia o zoom contínuo imediatamente sem esperar até que você tente cancelar a ação por JavaScript. Este comportamento é favorável uma sensação de imediato no gesto de pellizco sobre elementos que você permite.

Você também deve saber que, mesmo quando a direção é restringida, inicia um deslocamento, o usuário poderá inverter a direção uma vez iniciado a rolagem. Isso alinha a experiência com o que as pessoas esperam de uma lista ou de uma garantia, e evita bloqueios artificiais na metade do gesto.

Boas práticas

Primeiro, aplique a regra de intervenção mínima: escolha o valor menos restritivo que resolverá seu caso. Si te basta con pan-x, sem usos none. Assim preserva gestos nativos e acessibilidade.

Em segundo lugar, os componentes complexos são testados em hardware real: o que parece ótimo com o emulador pode não refletir a inércia e a fricção real. As sensações táteis são sutiles e pequenas mudanças em touch-action não é verdade.

Terceiro, se o zoom estiver bloqueado por necessidade do produto, oferece alternativas de acessibilidade (controles de tamanho de texto, zoom interno claro, contraste adequado). Privar o zoom sem uma alternativa prejudica a leitura.

Quarto, documente e informe o comportamento do equipamento: marcar contratos claros entre CSS e JavaScript evita conflitos, sobretudo quando há ouvintes que cancelam eventos ou bibliotecas de gestos de mídia.

Aulas utilitárias e frameworks

Muitos frameworks de utilidades domésticas oferecem clases que mapean 1:1 a touch-action, a aceleração prototipada e alterada. É habitual encontrar variantes como touch-auto, touch-none, touch-pan-x o touch-pan-y.

<div class='h-48 w-full touch-auto overflow-auto'>
  <img class='h-auto w- max-w-none' src='...' alt=''>
</div>
<div class='h-48 w-full touch-none overflow-auto'>
  <img class='h-auto w- max-w-none' src='...' alt=''>
</div>
<div class='h-48 w-full touch-pan-x overflow-auto'>
  <img class='h-auto w- max-w-none' src='...' alt=''>
</div>
<div class='h-48 w-full touch-pan-y overflow-auto'>
  <img class='h-auto w- max-w-none' src='...' alt=''>
</div>

Essas utilidades ajudam a manter o CSS limpo e coerente; Lembre-se de que baixo o capó segue sentindo valores de touch-action, com as mesmas regras de combinação e efeitos.

Teste e depuração

Para verificar o efeito, o ideal é um dispositivo tátil. Alguns navegadores oferecem emulação tátil em seu DevTools, mas não reproduz com perfeição a física do gesto nem os vários dedos simultâneos.

Se algo não responder, revise as prioridades: O elemento realmente recebe os eventos? Há ouvintes que cancelam por preventDefault()? Confirme o computed style de touch-action e verificar superposições com pointer-events economiza horas.

Fragmentos prontos para copiar

Alguns detalhes úteis para o dia a dia. Use-os como base e ajuste-os ao seu caso.

/* Desactiva todo (señal de: me ocupo yo por JS) */
.superficie { touch-action: none; }

/* Solo desplazamiento horizontal */
.carrusel { touch-action: pan-x; }

/* Solo desplazamiento vertical */
.lista { touch-action: pan-y; }

/* Inicios hacia derecha + hacia arriba */
.panel { touch-action: pan-right pan-up; }

/* Pellizco-zoom + desplazamiento en cualquier eje (sin doble tap) */
.interactivo { touch-action: manipulation; }

Notas de suporte específicas

No passado, o valor pinch-zoom foi popularizado com suporte no Chrome a partir da versão 56, e seu comportamento foi refinando. Nas plataformas onde o pellizco apresenta uma ação de sistema, verifique se seu aplicativo não entra em conflito com gestos del SO (por exemplo, gestos de navegação por fronteiras).

Se seu objetivo público incluir iOS, lembre-se do matiz: as combinações avançadas podem não se comportar da mesma forma que no Chromium. As tentativas cruzadas são obrigatórias quando o UX é baseado nas direções iniciais ou no bloqueio do toque duplo.

Sintaxe resumida e modelos mentais

Uma maneira de não equívoco é pensar em capas. Primeiro elege o eje ou as direções permitidas (pan-x, pan-y, pan-left, etc.); depois decide si añades pinch-zoom; e, se você é rápido, voce usa manipulation como um atalho a lo típico sin doble toque.

E não esqueça a simplificação: se sua combinação puder ser escrita com um link, use o link. É legível e evita valores inválidos (o clássico "pan-left pan-right" que deveria ser pan-x).

Plantas de estilos para projetos

Este bloco geralmente envolve sistemas de design e bibliotecas de componentes. Defina russas em seu CSS para usos frequentes e haverá coerência entre equipes.

/* Utilidades corporativas */
.u-touch-auto { touch-action: auto; }
.u-touch-none { touch-action: none; }
.u-touch-pan-x { touch-action: pan-x; }
.u-touch-pan-y { touch-action: pan-y; }
.u-touch-zoom { touch-action: pinch-zoom; }
.u-touch-sensible { touch-action: manipulation; }

Com estas aulas, documenta a intenção (por exemplo, "sensível" implicando resposta ágil) em vez de um técnico detalhado isolado, que facilita a adoção por parte de outros desenvolvedores.

Lista de verificação pequena antes de publicar

– Você escolheu o valor menos intrusivo que cumpre seu objetivo? Se algo pode ser nativo, deixe-o nativo.
– Seu aplicativo ainda pode ser usado com zoom? Não sacrifique a acessibilidade se não for imprescindível.
– Tem versões iOS e Android comprovadas? A emulação é útil, mas não definitiva.
– Os ouvintes não interferem no comportamento esperado? Evita cancelamentos globais.

É claro que touch-action é uma palanca essencial para aprimorar a experiência tátil: você permite delimitar quais gestos são nativos e quais controlam você, reduzir latências como a do click traz o toque e oferece combinações ricas para casos avançados; Se isso resume alguns testes em dispositivos reais e um olho em acessibilidade, haverá componentes táteis que se sentem naturais e confiáveis.

Artigo relacionado:
Resolvido: scrollview ocultar barra de rolagem
Artigos relacionados: