Propiedad CSS touch-action: cómo domar gestos tactiles con precisión

Posledná aktualizácia: 11/14/2025
  • Definujte gesto maneja el navegador: desplazamiento, pellizco-zoom a doble toque.
  • Kombinujte hodnoty (pan-x/pan-y/pan-*) a pinch-zoom, alebo použite atajo manipuláciu.
  • Atención a Accesibilidad: evitar bloquear el zoom salvo nutsidad real.
  • kompatibilné amplióny; iOS Safari predstavuje skutočný hardvér a hardvér.

Ilustrácia CSS dotykovej akcie

Cuando trabajamos con interfaces tactiles, hay un detalle que mark la diferencia entre una experiencia fluida y otra frustrante: decidir qué gestos gestiona el navegador y cuáles gestiona tu códigoVlastníctvo CSS touch-action es justo el interruptor fino que permite ajustar ese comportamiento al milímetro.

Učím sa byť ezoterickým, touch-action controla el desplazamiento, el zoom por pellizco y otros gestos predeterminados que el navegador aplicaría al tocar un elemento. Bien usada, evita retros en eventos, choca menos con tu JavaScript y te da control real en components como maps, carruseles or lienzos de juegos.

Máte presné dotykové ovládanie?

En pocas palabras, touch-action indica al agente de usuario qué acciones tactiles puede ejecutar de forma nativa en una region de la pagina y cuáles debe reservar para tus manejadores de eventos. Es el komplemento táctil de pointer-events, que solemos asociar más a interacciones con ratón, pero con un enfoque específico en gestos ako el desplazamiento y el zoom.

Týmto spôsobom puedes permitir que el navegador haga su trabajo (desplazar, hacer zoom) o bloquearlo para implementar tú las interacciones (napr. zoom interno de un mapa) sin interferencias ni demoras artificiales en los click.

Príklad CSS pre dotykové ovládanie

Syntax a spôsoby použitia

Propiedadad acepta varias combinaciones con reglas muy concretas. Puedes declarar un único valor, o componer varios valores compatibles para ajustar el comportamiento táctil con precisión.

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

Si necesitas la gramática exacta, esta es la sintaxis formálna reconocida:

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

Inými slovami, puedes usar uno de los valores globales (auto, žiadne, manipulácia) o bien una combinación de los conjuntos de desplazamiento horizontálne y/o vertikálne, más pinch-zoom voliteľne.

Valores de touch-action and qué hace to the uno

Este propiedad of rece value Pensados ​​para casos muy concretos. Elegir el que toca evita tener que reimplementar gestos con JavaScript o, al contrario, te deja vía libre para hacerlo cuando lo necesites.

auto

Už som tu navigátor gestione todos los gestos de desplazamiento y zoom. Toto je kompatibilné s chybou: používa sa ako bežec na úteku a na pellizcar na ampliar sin que tengas que hacer nada más.

none

Bloquea por completo la intervención del navegador en esos gestos. No habra desplazamiento ni pellizco-zoom nativos; implementácia JavaScriptu je potrebná. Je ideálny pre mapy alebo lienzos donde el control debe ser 100% tuyo.

manipulation

Povoliť el desplazamiento y el pellizco-zoom, pero desactiva ciertos gestos no estándar como el doble toque para ampliar. Es, en la práctica, un alias de "pan-x pan-y pinch-zoom"(combinación explícita se mantien válida por compatibilidad). Al quitar el doble toque, también elimina la necesidad de retrasar la generationón de eventos click tras un toque, lo que mejora la respuesta de la interfaz.

pan-x

Activa el desplazamiento horizontal con un solo dedoMôžete to skombinovať s pan-y, pan-up, pan-down a / alebo pinch-zoomJe to tanier, ktorý angloba pan-left y pan-right.

pan-y

Activa el desplazamiento vertical con un solo dedoMôžete to skombinovať s pan-x, pan-left, pan-right a / alebo pinch-zoom. Del mismo modo, es un atajo que incluye pan-up y pan-down.

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

dovoliť gestos de desplazamiento con un solo dedo que empiezan en la dirección indicada. Ojo: una vez iniciado el desplazamiento, sa puede invertir la dirección. Hay un detalle que suele conundir: en términos de interfaz, "posun nahor"significa que el usuario arrastra el dedo hacia abajo en la pantalla para que el contenido se mueva hacia arriba; y"pan-ľavica"implica arrastrar el dedo a la derecha para que el contenido sa desplace hacia la izquierda.

pinch-zoom

Povoliť gestos multi-dedo de zoom y desplazamiento. Se puede combinar con cualquiera de los valores pan-*. En navegadores que lo implementan, el agente de usuario puede iniciar el zoom continuo de inmediato sin esperar a que un manejador de eventos lo cancele.

Regulácia kombinácie a normalizácie

Všetky kombinované smery, existujú zjednodušené pravidlá. No todo lo que se puede escribir es válido si hay una forma más simpleNapríklad, "pan-left pan-right" zvážte inválido porque la forma correcta y más corta es pan-x.

Sin embargo, seno combinaciones que sí tienen sentido, ako “pan-left pan-down"para permitir desplazamientos que inician hacia la izquierda o hacia abajo. En Est caso, no seno una abreviatura directa ekvivalente, por lo que es una combinación akceptovatelné.

Pamätajte si to tiež puedes mezclar ejes y pellizcoNapríklad, "pan-x pinch-zoom" allowe desplazamiento horizontal por un dedo y zoom multi-dedo a la vez, dejando fuera el desplazamiento vertical nativo.

Cuándo usar cada valor: patrones reales

El caso tipico es un mapa o un lienzo de juego embebido en la pagina. Si quieres que el gesto de pellizcar afecte al propio map y no al zoom del navegador, vyhlasuješ svoj záujem touch-action: none; a píšte si prispôsobenie priblíženia en JavaScript.

Otro escenario es cuando tu código sólo implementa una parte de la interacción (por ejemplo, el zoom), y prefieres que el navegador mantenga el desplazamiento nativo. En ese caso,"touch-action: pan-x pan-y;" le dice al agente de usuario que gestione todo el desplazamiento y te deja libre para ocuparte del zoom como quieras.

Para komponenty používateľského rozhrania ako horizontálne rámy, pan-x vďaka tomu je to najlepšia možnosť. Permites el desplazamiento lateral con un dedo, mantienes el pellizco-zoom deactivado si no lo añades, y evitas conflictos con el scroll vertical de la pagina si no quieres que se active.

Ak je vašou prioritou respuesta inmediata del toque y la eliminación del retardo del doble toque, manipulation es un atajo estupendo. Vypnite dvojitý kohútik na zosilňovači a k ​​tomu potrebnému click, lo que da una sensación de "snappiness" en botones y enlaces.

Vplyv na prístupnosť

Kritický bod: vyhlasuje sa touch-action: none; bloqueas el zoom nativo del navegador. Táto osoba s víziou, ktorá je potrebná, je nevyhnutná, pretože je kapacitne nedostupná.

Cuando el contexto lo permita, zvážiť údržbu pinch-zoom umožniť alebo hľadajte alternatívy prístupnosti que no impidan el aumento. Hacer zoom es, veľa užívateľov, herramienta de lectura esencial; no la desactives a la ligera.

Kompatibilné medzi navegadores

Podpora touch-action je to rozsiahle, ale s matricami. Los navegadores modernos ako Chrome (36+), Edge (12+), Firefox (52+) a Opera (23+) implementan la propiedad con los valores principales.

El punto delicado históricamente ha sido Safari. iOS Safari má prezentačné limity, ktoré sú podporované v bode auto y manipulation, mientras que otros valores han sido más variables según versión y contexto. En versiones recientes de Safari de escritorio (13+), kompatibilita s významnými najlepšími, pero conviene validar casos específicos, sobre todo si dependes de combinaciones avanzadas.

Las tablas de compatibilidad públicas (las tipicas que consultamos a diario) sa aktualizuje contribuciones de la comunidad y estadísticas de uso; si tu proyecto es rozumný a gestos concretos, prueba en dispositivos reales. Ten en cuenta también que solo en dispositivos con pantalla tactil podrás verificar el comportamiento veriaci.

Praktické príklady použitia

Veamos algunos patrones de declaración que te solucionarán la vida. Recuerda probar siempre en hardware tactil para comprobar que la experiencia es la esperada.

1) Deaktivujte todos los gestos (mapa alebo personalizado canvas)

Útil cuando quieres implementar tú el arrastre y el zoom internos sin interferencias. El navegador no interceptará ni el desplazamiento ni el pellizco.

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

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

2) Povoľte natívne ovládanie, ovládanie sólo a zoom

Si tu JavaScript sa encarga del zoom, deja que el navegador gestione el scroll en ambos ejes pre neznovuzrodenie kola.

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

3) Desplazamiento horizontal con pellizco-zoom

Pre carruseles complejos o galerías: posúvanie horizontálne priradené k odomknutiu a približovaniu, bez vertikálneho rolovania nativu.

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

4) Desplazamientos por dirección inicial

En ocasiones conviene permitir solo gestos que arrancan hacia una dirección concreta (p. ej., para no interferir con otros components).

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

5) Atajo pragmático: manipulácia

Cuando buscas una respuesta táctil contundente sin doble toque, manipulation je to veľká pohoda. Ayuda a evitar el retroso del click post-toque.

button, a {
  touch-action: manipulation;
}

Vzťah s pointer-events a kliknutia

Aj keď sú niekedy zmätení, touch-action y pointer-events odlišné problémy s útokmi. El segundo decision si un elemento responde a "punteros" (ratón, táctil, lápiz) a nivel de hit-testing; el primero determina qué gestos tactiles por defekto puede ejecutar el navegador v danom regióne.

Okrem toho, deaktivačný gestos ako el doble toque con manipulation elimina el retraso clásico del click tras un toque en móviles. Ese retardo existía para distinguir entre un toque simple y el inicio de un doble toque para zoom; si el doble toque ya no existe, el navegador puede despachar el click bez čakania

Notas y detalles de implementación

s pinch-zoom, majú navigátorov, ktorí inician el zoom continuo inmediatamente sin esperar a que intentes cancelar la acción por JavaScript. Este compportamiento favorece okamžitý pocit en el gesto de pellizco sobre elementos que lo permiten.

También debes saber que, aun cuando restringes la dirección que inicia un desplazamiento, el usuario podrá invertir la dirección una vez iniciado el scroll. Esto alinea la experiencia con lo que la gente espera de una lista o un lienzo, y evita bloqueos artificiales a mitad del gesto.

Osvedčené postupy

Primero, aplikovaný na regla de minima intervención: elige el valor menosstrictivo que resuelva tu casoMáš rád/a pan-x, žiadne využitie none. Ako si zachovávajú nativos a acccesibilidad.

Segundo, a komponenty complejos prueba a hardware real: lo que parece óptimo con el emulador puede no reflejar la inercia y la fricción reales. Las sensaciones tactiles son sutiles, y pequeños cambios en touch-action sa nepamätá.

Tercero, si blokuje a približuje potrebné produkty, ofrece alternativeas de accessibilidad (controles de tamaño de texto, zoom interno claro, kontraste adecuado). Privar del zoom sin alternative perjudica la lectura.

Ukážka, dokumentácia a informácie o vybavení: Marker proti jasnému vstupu do CSS a JavaScriptu evita conflictos, sobre todo cuando hay listeners que cancelan eventos o librerías de gestos de por medio.

Classes utilitarias en frameworks

Mnoho moderných rámcov triedy, ktoré mapujú 1:1 a touch-action, lo cual acelera prototipado y cambios. Sú to obvyklé encontrárne varianty ako 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>

Tento nástroj používa jednoduchý a súvislý CSS; recuerda que bajo el capó siguen siendo valores de touch-action, con las mismas reglas de combinación y efectos.

Testovanie a ladenie

Para verificar el efecto, lo ideal es un dispositivo tactil. Algunos navegadores of the recen emulación tactil en sus DevTools, pero no reproducen a la perfección la física del gesto ni los múltiples dedos simultáneos.

Neodpovedám, revisa prioridades: ¿el elemento realmente recibe los eventos? ¿hay listeners que cancelan por preventDefault()? potvrdiť computed style de touch-action y chequear superposiciones con pointer-events ušetrí vám hodiny.

Fragmenty zoznamov na kopírovanie

Unos cuantos atajos útiles para el día a día. Úsalos como base y jústalos a tu 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; }

Poznámky k špecifickej podpore

V minulosti hodnota pinch-zoom popularizó con soporte en Chrome a partir de la version 56, y su comportamiento ha ido refinánndose. En plataformas donde el pellizco sea una acción de sistema, overifica que tu app no ​​entra en conflicto con gestá SO (por ejemplo, gestos de navegación por bordes).

Váš verejný cieľ zahŕňa iOS, získava sa z nej: las combinaciones avanzadas pueden no comportarse igual que en Chromium. Las pruebas cruzadas son obligatorias cuando basas la UX en direcciones iniciales o en bloquear el doble toque.

Sintaxis resumida y mentálne modely

Una manera de no equivocarte es pensar en capas. Primero eliges el eje o las direcciones permitidas (pan-x, pan-y, pan-vľavo atď.); después rozhodne si añades pinch-zoom; y, si lo tuyo es la rapidez, USAS manipulation ako skratka typicky bez dvojitého ucha.

Nie je možné zjednodušiť: si tu combinación sa puede escribir con un atajo, usa el atajo. Je čitateľný a evita valores inválidos (klasické „pan-left pan-right“ que debería ser pan-x).

Plantilla de estilos para proyectos

Este bloque suele encajar en design systems and librerías de components. Definujte utilidades en tu CSS pre frecuentes y tendrás coherencia entre equipos.

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

S týmito triedami, dokumentuje zámer (napr. "rozumné" implicando respuesta ágil) en lugar de un detalle técnico aislado, lo que facilita la adopción por parte de otros desarrolladores.

Pequeño checklist antes de publicar

– Je escogido el valor menos intrusivo que cumple tu objetivo? Si algo puede ser nativo, déjalo nativo.
– ¿Tu aplikácia situuje použiteľnú so zoomom? Žiadne obete prístupné nie sú neprehliadnuteľné.
– Má comprobado iOS a Android reales? La emulación es útil, ale nie definitívne.
– ¿Stratili poslucháči žiadne interfieren con el comportamiento esperado? Globálne zrušenia Evita.

Je jasné že touch-action es una palanca esencial para afinar la experiencia tactil: te permite delimitar qué gestos son nativos y cuáles controlas tú, znížiť latencias como la del click tras el toque, y ofrece combinaciones ricas para casos avanzados; si a eso sumas pruebas en dispositivos reales y un ojo en accesibilidad, tendrás componentes tactiles que se sienten naturales y fiables.

Súvisiaci článok:
Vyriešené: scrollview skryje rolovaciu lištu
Súvisiace príspevky: