Proprietà CSS touch-action: come eseguire i gesti tattili con precisione

Ultimo aggiornamento: 11/14/2025
  • Definire qué gestos maneja el navegador: desplazamiento, pellizco-zoom y double toque.
  • Combina valori (pan-x/pan-y/pan-*) e pinch-zoom, o usa la manipolazione dell'attacco.
  • Attenzione all'accessibilità: evitare di bloccare lo zoom salvo effettivamente necessario.
  • Compatibilità ampliata; iOS Safari presenta matices, prova su hardware reale.

Illustrazione touch-action CSS

Quando lavoriamo con le interfacce tattili, c'è un dettaglio che marca la differenza tra un'esperienza fluida e un'altra frustrante: decidere quali gesti gestiranno il navigatore e quali gestiranno il tuo codice. La propiedad CSS touch-action è giusto l'interruttore fino a permettere di regolare questo comportamento al millimetro.

Lejos de ser algo esotérico, touch-action controla el desplazamiento, el zoom por pellizco y otros gesties predeterminados che il navigatore applicherà al tocco di un elemento. Bien usada, evita retros en eventis, choca menos con tu JavaScript e te da control real en componentes como mapas, carruseles o lienzos de juegos.

Che cosa è esattamente l'azione tattile?

In poche parole, touch-action indica all'agente utente quali azioni tattili possono essere eseguite in formato nativo in una regione della pagina e quali devono essere prenotati per i tuoi gestori di eventi. È il complemento tattile di pointer-events, che dobbiamo associare di più alle interazioni con il mouse, ma con un focus specifico su gesti come lo spostamento e lo zoom.

Così, puoi consentire al navigatore di svolgere il suo lavoro (spostare, ingrandire) o bloccarlo per implementare le tue interazioni (por ejemplo, zoom interno de una mappa) sin interferencias ni demoras artificiales en los click.

Esempio touch-action CSS

Sintaxis y formas de uso

La propiedad acepta varias combinaciones con reglas muy concretas. Puoi dichiarare un unico valore o comporre vari valori compatibili per regolare con precisione il comportamento tattile.

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

Se è necessaria la grammatica esatta, esta es la sintaxis formal reconocida:

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

In altre parole, è possibile utilizzare uno dei valori globali (auto, none, manipolazione) o bene una combinazione di combinazioni di spostamento orizzontale e/o verticale, altro ancora pinch-zoom facoltativamente.

Valori dell'azione tattile e cosa fa ciascuno

Questa proprietà offre valori pensati per casi molto concreti. Scegliere il pulsante per evitare di dover reimplementare i gesti con JavaScript o, al contrario, ti lascia la via libera per farlo quando lo desideri.

auto

Deja que el navegador gestione di tutti i gesti di spostamento e zoom. È il comportamento per difetto: l'utente può deslizar per desplazarse e pellizcar per ampliare senza che tengas que hacer nada más.

none

Bloccare completamente l'intervento del navigatore in questi gesti. Non dovrai spostarti nella pellicola-zoom nativa; ti toccherà implementarli con JavaScript se desideri questo comportamento. Es ideal para mapas o lienzos donde el control debe ser 100% tuyo.

manipulation

Consentire lo spostamento e lo zoom della pellicola, ma disattivarli certi gesti non sono standard come il doppio tocco per ampliare. Es, en la práctica, un alias de "pan-x pan-y pinch-zoom" (la combinazione explícita se mantiene valida per compatibilità). Al quitar el doble toque, elimina anche la necessità di restituire la generazione di eventi click tras un tocco, quello che migliora la risposta dell'interfaccia.

pan-x

Attivo el desplazamiento orizzontale con un solo dedo. Puede combinarse con pan-y, pan-up, pan-down e/o pinch-zoom. Es un atajo que engloba pan-left y pan-right.

pan-y

Attivo lo spostamento verticale con un solo dedo. Puede combinarse con pan-x, pan-left, pan-right e/o pinch-zoom. Del stesso modo, è un attacco che includi pan-up y pan-down.

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

Permettono gesti di spostamento con un solo gesto da eseguire nella direzione indicata. Ojo: una volta avviato lo spostamento, è possibile invertire la direzione. C'è un dettaglio che suele confundir: nei termini dell'interfaccia, "panoramica" significa que el usuario arrastra el dedo hacia abajo en lo pantalla para que el contenido se mueva hacia arriba; y "panoramica a sinistra" implica arrastrar el dedo alla derecha affinché il contenuto si sposti verso la izquierda.

pinch-zoom

Abilitare gesti multipli di zoom e spostamento. È possibile combinarli con qualsiasi valore pan-*. Nei navigatori che lo implementano, l'agente utente può avviare lo zoom continuo immediato peccato aspettare che un gestore di eventi lo annulli.

Regole di combinazione e normalizzazione

Quando si combinano le indicazioni, esistono norme di semplificazione. Non tutto quello che puoi scrivere è valido se ha una forma più semplice. Per esempio, "pan-left pan-right" se considerato non valido perché la forma corretta e più corta è pan-x.

Sin embargo, ci sono combinazioni che sì, senti, come "pan-left pan-down" per consentire gli spostamenti che inician hacia la izquierda o hacia abajo. In questo caso, non esiste un'abbreviazione diretta equivalente, poiché è una combinazione accettabile.

Ricorda anche quello puedes mezclar ejes y pellizco. Per esempio, "pan-x pinch-zoom" consente lo spostamento orizzontale per un dedo e lo zoom multi-dedo alla volta, lasciando fuori lo spostamento verticale nativo.

Cuándo usar cada valor: patrones reales

Il caso tipico è una mappa o un luogo di gioco incorporato nella pagina. Se vuoi che il gesto della pellicola influisca sulla propria mappa e sullo zoom del navigatore, te interesa declarar touch-action: none; e scrivi il tuo zoom personalizzato in JavaScript.

Un altro scenario è quando il tuo codice Implementa solo una parte dell'interazione (ad esempio, lo zoom), e si preferisce che il navigatore mantenga lo spostamento nativo. In questo caso, "touch-action: pan-x pan-y;" le dice l'agente dell'utente che gestisce tutto lo spazio e ti lascia libero di occupare lo zoom come vuoi.

Per i componenti dell'interfaccia utente come carrelli orizzontali, pan-x suele ser la mejor opción. Consente lo spostamento laterale con un dito, mantiene lo zoom della pellicola disattivato se non lo si aggiunge ed evita conflitti con lo scorrimento verticale della pagina se non vuoi che sia attivo.

Se la tua priorità è risposta immediata del tocco e eliminazione del ritardo del doppio tocco, manipulation è un attacco stupendo. Quita el double tap para ampliar y con ello la necesidad de retrasar el click, questo dà una sensazione di "reattività" sui bottoni e sui lacci.

Impacto en accesibilidad

Un punto crítico: si dichiara touch-action: none; blocca lo zoom nativo del navigatore. Le persone con scarsa visibilità che necessitano di ampliarsi per leggere perderanno quella capacità che può trasformare la tua interfaccia in inaccessibile.

Quando il contesto lo permette, considera mantener pinch-zoom abilitato o cerca alternative di accessibilità que non impediscono l'aumento. Fare zoom è, per molti utenti, uno strumento di lettura essenziale; no la desactives a la ligera.

Compatibilità tra i navigatori

Il supporto touch-action es amplio, pero con matices. I navigatori moderni sono Chrome (36+), Edge (12+), Firefox (52+) e Opera (23+) implementare la proprietà con i valori principali.

Il punto delicato storicamente è stato Safari. iOS Safari presenta limitazioni, con supporto solido per auto y manipulation, mentre altri valori hanno più variabili a seconda della versione e del contesto. Nelle versioni recenti di Safari da scrivania (13+), la compatibilità è notevolmente migliore, ma conviene convalidare casi specifici, tutto dipende dalle combinazioni avanzate.

Las tablas de compatibilidad públicas (las típicas que consultamos a diario) si aggiorna con i contributi della comunità e le statistiche d'uso; Se il tuo progetto è sensato per i gesti concreti, prova su dispositivi reali. Tengo in considerazione anche quello solo sui dispositivi dotati di schermo tattile sarà possibile verificare il comportamento de forma fidedigna.

Esempi pratici di utilizzo

Abbiamo alcuni patroni della dichiarazione che ti risolveranno la vita. Ricordati di provare sempre tramite l'hardware tattile per verificare se l'esperienza è la speranza.

1) Disattiva tutti i gesti (mappa o tela personalizzata)

Utile quando vuoi implementare l'arrastre e lo zoom interno senza interferenze. Il navigatore non intercetta né lo spostamento né la pellicola.

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

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

2) Permetti lo spostamento nativo, controlla solo lo zoom

Se il tuo JavaScript si carica dello zoom, lascia che il navigatore gestione el scroll en ambos ejes para no reinventar la rueda.

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

3) Spostamento orizzontale con zoom a pellicola

Per carrelli complessi o gallerie: scorri orizzontalmente con un dedo e zoom con due, sin scroll vertical nativo.

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

4) Spostamenti dalla direzione iniziale

In occasioni conviene permetterlo solo gesti che compiono verso una direzione concreta (p. es., para no interferir con otros componentes).

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

5) Atajo pragmático: manipolazione

Quando cerchi una risposta tattica contundente senza doppio tocco, manipulation es un gran comodín. Aiuta ad evitare il ritorno del click post-toque.

button, a {
  touch-action: manipulation;
}

Relazione con pointer-events y eventos de clic

Sebbene a volte siano confusi, touch-action y pointer-events atacan problemas distintos. Il secondo decide se un elemento risponde a "punteros" (ratón, táctil, lápiz) a livello di hit testing; el primo determina qué gesti tattili per difetto può eseguire il navigatore in quella regione.

Inoltre, disattivare i gesti come il doppio tocco con manipulation eliminare il retraso clásico del click tras un tocco sui dispositivi mobili. Questo ritardo esiste per distinguere tra un tocco semplice e l'inizio di un doppio tocco per lo zoom; se il doppio tocco non esiste, il navegador può despachar el click senza aspettare

Note e dettagli di implementazione

Con pinch-zoom, hay navegadores que avviare lo zoom continuo immediatamente non spero di voler annullare l'azione tramite JavaScript. Questo comportamento è favorevole una sensación de inmediatez nel gesto della pellicola sugli elementi che lo consentono.

Devi anche sapere che, anche quando si restringe la direzione in cui si avvia uno spostamento, l'utente potrà invertire la direzione una volta avviato lo scorrimento. Esto alinea la experiencia con lo que la gente aspetta de una lista o un lienzo, y evita blocchi artificiali a metà del gesto.

Buone pratiche

Innanzitutto applicare la regola di intervento minimo: scegli il valore meno restrittivo che risolve il tuo caso. Si te basta con pan-x, nessun utilizzo none. Così preserva gesti nativi e accessibilità.

Secondo, su componenti complessi provati su hardware reale: quello che sembra ottimale con l'emulatore non può riflettere l'inerzia e l'attrito reale. Le sensazioni tattili sono sottili e ci sono piccoli cambiamenti touch-action se notan.

Terzo, se si blocca lo zoom per necessità del prodotto, offre alternative di accessibilità (controlli della dimensione del testo, zoom interno chiaro, contrasto adeguato). Privar dello zoom senza alternativa perjudica la lectura.

Cuarto, documenta e segui il comportamento con l'attrezzatura: contrassegnare i contratti chiari tra CSS e JavaScript evita conflitti, soprattutto quando ci sono ascoltatori che cancellano eventi o librerie di gesti di medio.

Classi utilitarie e framework

Molti framework di utilità ofrecen classi que mapean 1:1 a touch-action, lo quale accelerazione prototipado y cambiamenti. È normale trovare varianti come questa 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>

Queste funzionalità aiutano a mantenere il CSS pulito e coerente; ricordo che sotto il capo siguen siendo valores de touch-action, con le stesse regole di combinazione ed effetti.

Test e debug

Per verificare l'effetto, l'ideale è un dispositivo tattile. Alcuni navigatori offrono l'emulazione tattile sui loro DevTools, ma non riproduce alla perfezione la fisica del gesto né los multiples dedos simultáneos.

Se non ho risposto, controlla le priorità: ¿l'elemento riceve davvero gli eventi? ¿hey ascoltatori che cancellano por preventDefault()? Confermare il computed style de touch-action y controlla sovrapposizioni con pointer-events ti fa risparmiare ore.

Fragmentos listos para copiar

Unos cuantos atajos útiles para el día a día. Usalo come base e regolalo nel tuo 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 soporte específicas

Nel passato il valore pinch-zoom è diventato popolare con il supporto di Chrome a partire dalla versione 56, e il suo comportamento lo ha fatto raffinare. Sulle piattaforme in cui il film è un'azione di sistema, verifica che la tua app non entri in conflitto con gestos del SO (ad esempio, gesti di navigazione da bordo).

Se il tuo obiettivo pubblico include iOS, ricorda il formato: le combinazioni avanzate non possono comportarsi come su Chromium. Le prove crociate sono obbligatorie quando si basa la UX nelle direzioni iniziali o si blocca il doppio tocco.

Sintassi riassume e modelli mentali

Un modo per non equivocare è pensare in capas. Primero eliges el eje o las direcciones consentidas (pan-x, pan-y, pan-sinistra, ecc.); después decide si añades pinch-zoom; sì, si lo tuyo es la rapidez, USAS manipulation come scorciatoia a lo típico sin doble toque.

E non ho dimenticato la semplificazione: se la tua combinazione può essere scritta con un inserto, usa l'inserto. È leggibile ed evita valori non validi (il classico "pan-left pan-right" che dovrebbe essere pan-x).

Pianta di stile per progetti

Questo blocco è bloccato in sistemi di progettazione e librerie di componenti. Definisci le utilità nel tuo CSS per gli usi più frequenti e avrai coerenza tra i team.

/* 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; }

Con estas clases, documentas la intención (por ejemplo, "sensible" implicando respuesta ágil) en lugar de un detalle técnico aislado, lo que facilita la adopción por parte de otros desarrolladores.

Piccola checklist prima della pubblicazione

– ¿Has escogido el valor menos intrusivo que compil tu objetivo? Si qualcosa può essere nativo, lascialo nativo.
– ¿La tua app continua a essere utilizzabile con zoom? Nessun sacrificio di accessibilità se non è imprescindibile.
– ¿Ha comprobado iOS y Android reale? L'emulazione è utile, ma non definitiva.
– ¿Gli ascoltatori non interferiscono con il comportamento sperato? Evita cancelaciones globales.

È chiaro che touch-action è una cosa essenziale per affinare l'esperienza tattile: ti permette di delimitare quali gesti sono nativi e quali controlli tu, riduci le latenze come il click tras il tocco, y ofrece combinazioni ricas para casos avanzados; se questo viene eseguito su dispositivi reali e un occhio accessibile, avrai componenti tattili che sembrano naturali e affidabili.

Articolo correlato:
Risolto: scrollview nasconde la barra di scorrimento
Related posts: