- Definiu què gestos maneja el navegador: desplaçament, pellizco-zoom i doble toque.
- Combina valors (pan-x/pan-y/pan-*) i pinch-zoom, o usa l'atajo manipulation.
- Atenció a l'accessibilitat: evitar bloquejar el zoom salva necessitat real.
- Compatibilitat amplia; iOS Safari presenta màtiques, prova en hardware real.
Quan treballem amb interfícies tàctils, hi ha un detall que marca la diferència entre una experiència fluida i una altra frustrant: decidir quins gestos gestiona el navegador i les quals gestiona el teu codiLa propietat CSS touch-action és justo l'interruptor fins que permet ajustar aquest comportament al milímetre.
Lluny de ser alguna cosa esotèrica, touch-action controla el desplaçament, el zoom per pellizco i altres gestos predeterminats que el navegador aplicaria a tocar un element. Bien usada, evita retrasos en eventos, choca menos con el teu JavaScript i et donen control real en components com a mapes, carruseles o lienzos de jocs.
Què és exactament touch-action?
En poques paraules, touch-action indica a l'agent de l'usuari quines accions tàctils pot executar de forma nativa en una regió de la pàgina i les quadres s'ha de reservar per als vostres manejadors d'esdeveniments. És el complement tàctil de pointer-events, que solem associar més a interaccions amb rató, però amb un enfocament específic en gestos com el desplaçament i el zoom.
D'aquesta manera, pots permetre que el navegador faci el seu treball (desplaçar, fer zoom) o bloquejar-lo per implementar les interaccions (per exemple, zoom interior d'un mapa) sense interferències ni demoras artificials en els click.

Sintaxi i formes d'ús
La propietat accepta diverses combinacions amb regles molt concretes. Pots declarar un valor únic, o compondre diversos valors compatibles per ajustar el comportament tàctil amb precisió.
/* Declaración típica */
#elemento {
touch-action: pan-right pinch-zoom;
}
Si necessites la gramàtica exacta, esta és la sintaxis formal reconocida:
touch-action =
auto |
none |
|| || pinch-zoom ] |
manipulation
Dit d'una altra manera, podeu utilitzar un dels valors globals (auto, cap, manipulació) o bé una combinació dels conjunts de desplaçament horitzontal i/o vertical, més pinch-zoom de manera opcional.
Valors de touch-action i què fa cada un
Esta propietat ofereix valors pensats per a casos molt concrets. Elegir el que toca evitar tenir que reimplementar gestos amb JavaScript o, al contrari, et deixa via lliure per fer-ho quan ho necessitis.
auto-
Deixa que el navegador gestió de tots els gestos de desplaçament i zoom. És el comportament per defecto: l'usuari pot deslizar-se per desplaçar-se i pellizcar-se per ampliar sense que tinguis que fer res més.
none-
Bloquea por completo la intervenció del navegador en aquests gestos. No habrá desplaçament ni pellizco-zoom natius; et tocarà implementar-los amb JavaScript si vols aquest comportament. És ideal per a mapes o lienzos on el control ha de ser 100% tuyo.
manipulation-
Permet el desplaçament i el pellizco-zoom, però desactiva certs gestos no estàndard com el doble toque per ampliar. És, en la pràctica, un àlies de "panoràmica panoràmica i zoom de pinça" (la combinació explícita se manté vàlida per compatibilitat). Al quitar el doble toque, també elimina la necessitat de retrasar la generació d'esdeveniments
clicktras un toque, lo que millora la resposta de la interfície. pan-x-
Activa el desplaçament horitzontal amb un sol dedoEs pot combinar amb
pan-y,pan-up,pan-downi / opinch-zoomÉs un ataix que envolta.pan-leftypan-right. pan-y-
Activa el desplaçament vertical amb un sol dedoEs pot combinar amb
pan-x,pan-left,pan-righti / opinch-zoom. Del mateix modo, és un ataxo que incloupan-upypan-down. pan-left,pan-right,pan-up,pan-down-
permeten gestos de desplaçament amb un sol fet que empiezan a la direcció indicada. Ojo: una vegada iniciat el desplaçament, es pot invertir la direcció. Hi ha un detall que s'ha de confondre: en termes de la interfície, "panoràmica" significa que l'usuari arrastra el dedo hacia abajo a la pantalla per que el contingut es mostri cap a dalt; i "panoràmica esquerra" implica arrastrar el dedo a la dreta per al contingut es desplace cap a la izquierda.
pinch-zoom-
habilita gestos multi-dedo de zoom i desplaçament. Es pot combinar amb qualsevol dels valors
pan-*. En navegadors per implementar, l'agent de l'usuari pot iniciar el zoom continu de manera immediata sense esperar a que un manejador d'esdeveniments ho cancel·leu.
Regles de combinació i normalització
Al combinar direccions, existeixen regles de simplificació. No tot lo que se pot escriure és vàlid si hi ha una forma més simple. Per exemple, "pan-left pan-right" es considera invàlid perquè la forma correcta i més curta és pan-x.
Sense embargo, hi ha combinacions que sí tenen sentit, com "pan-left pan-down"per permetre desplaçaments que iniciar hacia la izquierda o hacia abajo. En aquest cas, no hi ha una abreviatura directa equivalent, pel que és una combinació acceptable.
Recorda a més que pots barrejar ejes i pellizco. Per exemple, "pan-x pinch-zoom" permet el desplaçament horitzontal per un desplaçament vertical natiu.
Cuándo usar cada valor: patrones reals
El cas típic és un mapa o un lienzo de joc embebido a la pàgina. Si vols que el gest de pell afectar al propi mapa i no al zoom del navegador, t'interessa declarar touch-action: none; i escriu el teu zoom personalitzat en JavaScript.
Un altre escenari és quan el teu codi només implementa una part de la interacció (per exemple, el zoom), i prefereix que el navegador mantingui el desplaçament natiu. En aquest cas,"touch-action: pan-x pan-y;" le dice a l'agent d'usuari que gestiona tot el desplaçament i et deixa lliure per ocupar el zoom com a vols.
Per a components de UI com a carruseles horitzontals, pan-x sol ser la millor opció. Permet el desplaçament lateral amb un desplaçament, manté el pellizco-zoom desactivat si no ho aconseguim, i evites conflictes amb el scroll vertical de la pàgina si no vol que s'active.
Si la teva prioritat és la resposta inmediata del toque i l'eliminació del retard del doble toque, manipulation és un ataxo estupendo. Quita el doble tap per ampliar i amb ell la necessitat de retrasar el click, el que dóna una sensació de "snappiness" en botons i enllaços.
Impacte en l'accessibilitat
Un punt crític: si ho declares touch-action: none; bloqueja el zoom natiu del navegador. Les persones amb baixa visió que necessiten ampliar per a perdre aquesta capacitat, el que pot convertir la vostra interfície en inaccessible.
Quan el context ho permeti, considera mantenir pinch-zoom habilitat o cerca alternatives d'accessibilitat que no impidan l'augment. Fer zoom és, per a molts usuaris, una eina de lectura essencial; no la desactives a la ligera.
Compatibilitat entre navegadors
El suport de touch-action és ampli, però amb màtics. Els navegadors moderns com Chrome (36+), Edge (12+), Firefox (52+) i Opera (23+) implementar la propietat amb els valors principals.
El punt delicat històricament ha estat Safari. iOS Safari ha presentat limitacions, amb suport sòlid per a auto y manipulation, mentre que altres valors han estat més variables segons versió i context. En versions recents de Safari d'escriptori (13+), la compatibilitat és notablement millor, però conviene validar casos específics, sobre tot si depèn de combinacions avançades.
Los tablas de compatibilidad públicas (las típicas que consultemos a diario) s'actualitzen amb contribucions de la comunitat i estadístiques d'ús; si el teu projecte és sensible a gestos concrets, prova en dispositius reals. Ten en compte també que sol en dispositius amb pantalla tàctil podràs verificar el comportament de forma fideïcomís.
Exemples pràctics dús
Veamos alguns patrons de declaració que us solucionaran la vida. Recuerda probar siempre en hardware táctil per comprovar que l'experiència és l'esperada.
1) Desactivar tots los gestos (mapa o llenç personalitzat)
Útil quan vulguis implementar-te l'arrastre i el zoom interiors sense interferències. El navegador no interceptará ni el desplaçament ni el pellizco.
<!-- HTML -->
<div id='mapa' class='superficie'></div>
<!-- CSS -->
.superficie {
touch-action: none;
}
2) Permitir desplaçament nativo, controlar sol el zoom
Si el teu JavaScript està carregat del zoom, deixa que el navegador gestió el scroll en tots dos ejes per no reinventar la roda.
.zoom-personalizado {
touch-action: pan-x pan-y;
}
3) Desplaçament horitzontal amb pellizco-zoom
Per a carruseles complexos o galeries: scroll horitzontal amb un dedo i zoom amb dos, sense desplaçament vertical natiu.
.galeria-avanzada {
touch-action: pan-x pinch-zoom;
}
4) Desplaçaments per direcció inicial
En ocasions conviene permetre solo gestos que arrancan cap a una direcció concreta (p. ex., per no interferir amb altres components).
.panel-contextual {
touch-action: pan-left pan-down;
}
5) Atajo pragmático: manipulació
Quan busques una resposta tàctil contundente sense doble toque, manipulation és un gran comò. Ayuda a evitar el retraso del click després del toc.
button, a {
touch-action: manipulation;
}
Relació amb pointer-events i esdeveniments de clic
Encara que de vegades es confonen, touch-action y pointer-events diferents problemes d'atac. El segon decide si un element respond a "punteros" (ratón, táctil, lápiz) a level of hit-testing; el primer determina quins gestos tàctils per defecte pot executar el navegador en aquesta regió.
Addicionalment, desactivar gestos com el doble toque amb manipulation elimina el retraso clàssic del click tras un toque en mòbils. Ese retardo existía per distingir entre un toque simple i l'inici d'un doble toque per zoom; si el doble toque ja no existeix, el navegador pot despachar-lo click sense esperes.
Notes i detalls d'implementació
Amb pinch-zoom, hi ha navegants que inicieu el zoom continu immediatament sense esperar a que intentes cancel·lar l'acció per JavaScript. Aquest comportament favorit una sensació immediata en el gest de pell sobre elements que ho permeten.
També heu de saber que, aun quan restringis la direcció que iniciï un desplaçament, l'usuari podrà invertir la direcció una vegada iniciat el scroll. Esto alinea l'experiència amb la gent que espera d'una llista o un lienzo, i evita bloquejos artificials a la meitat del gest.
Bones pràctiques
Primer, aplica la regla de mínima intervenció: elige el valor menys restrictiu que resuelva el teu casSi te'n basta amb pan-x, sense usos none. Així preserva gestos natius i accessibilitat.
En segon lloc, en components complexos prova en hardware real: el que sembla òptim amb l'emulador no pot reflectir la inèrcia i la fricció reals. Les sensacions tàctils son sutiles, i petits canvis en touch-action es noten.
Tercer, si bloqueja el zoom per les necessitats del producte, ofereix alternatives d'accessibilitat (controls de mida de text, zoom interior clar, contrast adequat). Privar del zoom sense alternativa perjudica la lectura.
Cuarto, documenta y acuerda el comportamiento con el equipo: marcar contractes clars entre CSS i JavaScript evita conflictes, sobre tot quan hi ha els oients que cancel·len esdeveniments o llibreries de gestos de mitjà.
Classes utilitaries en frameworks
Molts marcs d'utilitats noves classes que mapegen 1:1 a touch-action, el qual accelerat prototipat i canvis. És habitual trobar variants com 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>
Aquestes utilitats ajuden a mantenir el CSS clar i coherent; recorda que bajo el capó siguen siendo valores de touch-action, amb les mateixes regles de combinació i efectes.
Proves i depuració
Per verificar l'efecte, l'ideal és un dispositiu tàctil. Alguns navegadors ofereixen emulació tàctil a les seves DevTools, però no reproduïm a la perfecció la física del gest ni els múltiples de dos simultanis.
Si alguna cosa no respon, revisa prioritats: ¿L'element realment rep els esdeveniments? ¿Hay listeners que cancelan per preventDefault()? Confirmar el computed style de touch-action y chequear superposicions con pointer-events t'estalvia hores.
Fragments llestos per copiar
Uns quants atajos útils per al dia al dia. Utilitzeu-los com a base i ajústalos al vostre cas.
/* 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; }
Notes de suport específiques
En el passat, el valor pinch-zoom es va popularitzar amb el suport en Chrome a partir de la versió 56, i el seu comportament ha estat refinant-se. En plataformes on el pellizco sea una acció de sistema, comproveu que la vostra aplicació no entra en conflicte amb gestos del SO (per exemple, gestos de navegació per bordes).
Si el teu objectiu públic inclou iOS, recorda el matiz: les combinacions avançades poden no comportar-se igual que en Chromium. Les proves cruzades són obligatòries quan es basen la UX a les direccions inicials o en bloquejar el doble toque.
Sintaxis resumida i models mentals
Una manera de no equivocar-te és pensar en capas. Primero eliges l'eje o les direccions permeses (pan-x, pan-y, pan-esquerra, etc.); després decideix si añades pinch-zoom; y, si lo tuyo es la rapidez, fas servir manipulation com drecera allò típic sense doble toc.
I no olvides la simplificació: si la teva combinació es pot escriure amb un ataxo, usa el ataxo. És legible i evita valors invàlids (el clàssic "pan-left pan-right" que hauria de ser pan-x).
Plantilla d'estils per a projectes
Aquest bloc només encaixa en sistemes de disseny i llibreries de components. Definiu utilitats al vostre CSS per a usos freqüents i tindràs coherència entre equips.
/* 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; }
Amb aquestes classes, documenta la intenció (per exemple, "sensible" implicant resposta agil) en el lloc d'un detall tècnic aïllat, el que facilita l'adopció per part d'altres desenvolupats.
Pequeño checklist abans de publicar
– ¿Has seleccionat el valor menys intrusiu que compleix el teu objectiu? Si algo pot ser natiu, deixalo natiu.
– ¿La teva aplicació segueix sent utilitzable amb zoom? No sacrificis accessibilitat i no és imprescindible.
– ¿Ha comprovat iOS i Android reals? L'emulació és útil, però no definitiva.
– ¿Los listeners no interferiren amb el comportament esperado? Evita cancel·lacions globals.
Queda clar que touch-action és una palanca essencial per afinar l'experiència tàctil: et permet delimitar quins gestos son natius i cuales controlats tú, reduir les latències com la del click tras el toque, i ofereix combinacions riques per a casos avançats; si a això suma proves en dispositius reals i un joc en accessibilitat, tindràs components tàctils que se senten naturals i fiables.