Propiedad CSS jutiklinis veiksmas: cómo domar gestos táctiles con precisión

Paskutiniai pakeitimai: 11/14/2025
Autorius: C SourceTrail
  • Apibrėžkite qué gestos maneja el navegador: desplazamiento, pellizco-zoom ir doble toque.
  • Sujunkite valores (pan-x/pan-y/pan-*) y pinch-zoom, arba usa el atajo manipuliavimą.
  • Atención accesibilidad: evitar bloquear el zoom salvo necesidad real.
  • Suderinamas amplia; „iOS Safari“ pristato tikrąją aparatinę įrangą.

Jutiklinio veiksmo CSS iliustracija

Cuando trabajamos con interfaces táctiles, hay un detalle que marca la diferencia entre una experiencia fluida y otra frusrante: decidir qué gestos gestiona el navegador y cuáles gestiona tu códigoCSS nuosavybė touch-action es justo el interruptor fino que permite ajustar ese comportamiento al milímetro.

Žaisk apie ezoteriką, 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 retrasos en eventos, choca menos con tu JavaScript y te da control real en komponentes como mapas, carruseles o lienzos de juegos.

¿Qué es preciamente touch-action?

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

Tokiu būdu puedes permitir que el navegador haga su trabajo (desplazar, hacer priartinimas) o bloquearlo para implementar tú las interacciones (pavyzdžiui, zoom interno de un mapa) sin interferencias ni demoras mesterségeses en los click.

Pavyzdys – lietimui jautrus CSS

Sintaksė ir naudojimo formos

La propiedad 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 pontos, esta es la sintaxis formal reconocida:

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

Kitaip tariant, puedes usar uno de los valores globales (automatinis, nėra, manipuliavimas) o bien una combinación de los conjuntos de desplazamiento horizontal y/o vertikali, daugiau pinch-zoom pasirinktinai.

Valores de touch-action y qué hace cada uno

Esta propiedad ofrece valores 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

Deja que el navigator gestione todos los gestos de desplazamiento y zoom. Es el Comportamiento por defecto: el usuario puede deslizar para desplazarse y pellizcar para ampliar sin que tengas que hacer nada más.

none

Bloquea por completo la intervención del navegador en esos gestos. No habrá desplazamiento ni pellizco-zoom nativos; te tocará implementarlos con JavaScript si quieres ese Comportamiento. Es idealus para mapas o lienzos donde el control debe ser 100% tuyo.

manipulation

Permite 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 "panoraminis-x panoraminis-y žnyplės-priartinimas" (la combinación explícita se mantiene válida por compatibilidad). Al quitar el doble toque, también elimina la necesidad de retrasar la generación de eventos click tras un toque, lo que mejora la respuesta de la interfaz.

pan-x

Activa el desplazamiento horizontal con un solo dedoGalima derinti su pan-y, pan-up, pan-down ir / arba pinch-zoomEs un atajo que anglo pan-left y pan-right.

pan-y

Activa el desplazamiento vertical con un solo dedoGalima derinti su pan-x, pan-left, pan-right ir / arba pinch-zoom. Del mismo modo, es un atajo que incluye pan-up y pan-down.

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

Leisti gestos de desplazamiento con un solo dedo que empiezan en la dirección indicada. Ojo: una vez iniciado el desplazamiento, se puede invertir la dirección. Hay un detalle que suele confundir: en términos de interfaz, "išgarsėjimas"significa que el usuario arrastra el dedo hacia abajo en la pantalla para que el contenido se mueva hacia arriba; y"panoraminis kairės pusėsImplica arrastrar el dedo a la derecha para que el contenido se desplace hacia la izquierda.

pinch-zoom

Įgalinti 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.

Reglas de combinación y normalización

Al Combinar direcciones, egzistuojantis supaprastinimo reglamentas. No todo lo que se puede escribir es válido si hay una forma más simplePavyzdžiui, "pan-left pan-right" se apsvarstyti inválido porque la forma correcta y más corta es pan-x.

Nuodėmės embargas, šieno kombinacijos que sí tienen sentido, como "pan-left pan-down" para atļaujir desplazamientos que inician hacia la izquierda o hacia abajo. En este caso, no hay una abreviatura directa equale, por lo que es una combinación Aceptable.

Taip pat prisiminkite tai puedes mezclar ejes y pellizcoPavyzdžiui, "pan-x pinch-zoom"leisti 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 típico es un mapa o un lienzo de juego embebido en la página. Si quieres que el gesto de pellizcar afecte al propio mapa y no al zoom del navegador, jus domina deklaruoti touch-action: none; y escribir tu priartinimui suasmenintas ir JavaScript.

Otro scenarijus 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. Tokiu atveju "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 komponentes de UI como carruseles horizontales, pan-x džiaukitės geriausiu pasirinkimu. Permites el desplazamiento lateral con un dedo, mantienes el pellizco-zoom desactivado si no lo añades, y evitas contractos con el slinkties vertikaliai de la página si no quieres que se active.

Jei jūsų prioritetas yra respuesta inmediata del toque y la eliminación del retardo del doble toque, manipulation es un atajo estupendo. Quita el doble tap para ampliar y con ello la necesidad de retrasar el click, lo que da una sensación de "snappiness" en botones y enlaces.

Poveikis prieinamumui

Kritikos taškas: si pareiškia touch-action: none; bloqueas el zoom nativo del navegador. Las personas con baja visión que necesitan ampliar para leer perderán esa capacidad, lo que puede convertir tu interfaz en unaccesible.

Cuando el konteksto lo atļauja, laikyti pinch-zoom įjungta arba ieškoti prieinamumo alternatyvos que no impidan el aumento. Hacer zoom es, para muchos usuarios, una herramienta de lectura esencial; no la desactives a la ligera.

Suderinamumas entre navegadores

Parama touch-action tai stipru, bet su draugais. „Los navegadores modernos“ yra „Chrome“ (36+), „Edge“ (12+), „Firefox“ (52+) ir „Opera“ (23+) implementan la propiedad con los valores principales.

El Punto Delicado Historiamente ha Sido Safari. „iOS Safari“ turi ribotus apribojimus, taip pat yra paraiška auto y manipulation, mientras que otros valores han sido más kintamieji según versión y contexto. En versiones recientes de Safari de escritorio (13+), la compatibilidad es notablemente mejor, pero conviene validar casos específicos, sobre todo si dependes de combinaciones avanzadas.

Las tablas de compatibilidad públicas (las típicas que consultamos a diario) se aktualizan con contribuciones de la comunidad y estadísticas de uso; si tu proyecto es sensible a gestos concretos, prueba en dispositivos reales. Ten en cuenta también que solo en dispositivos con pantalla táctil podrás verificar el comportamiento formaliai ištikimai.

Praktiniai naudojimo pavyzdžiai

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

1) Deaktyvuoti todos los gestos (asmeninis žemėlapis arba drobė)

Ú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) Permitir desplazamiento nativo, valdiklis solo el zoom

Situ JavaScript se encarga del zoom, deja que el navegador gestione el scroll en ambos ejes kad gatvė nebūtų išradinėjama iš naujo.

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

3) Desplazamiento horizontaliai ir pellizco-zoom

Para carruseles complejos o galerías: slinkti horizontaliai con un dedo y zoom con dos, be slinkties vertikaliai natyvus.

.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 komponentes).

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

5) Atajo pragmático: manipuliacija

Cuando buscas una respuesta táctil contundente sin doble toque, manipulation es un grand comodín. Ayuda a evitar el retraso del click po toko.

button, a {
  touch-action: manipulation;
}

Ryšys su pointer-events ir paspaudimų įvykiai

Nors jie kartais ir susipainioja, touch-action y pointer-events Atakos problemos skiriasi. El segundo Decision si un elemento responsee a "punteros" (ratón, táctil, lápiz) a nivel de hit-testing; el primero determina qué gestos táctiles por defecto puede ejecutar el navegador tame regione.

Be to, desactivar gestos como 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 nelaukdamas

Notas y detalles de implementación

su pinch-zoom, šieno navigatoriai, kurie inician el zoom continuo inmediatamente esperar a que intentes cancelar la acción per JavaScript. Este Comportamiento favorece akimirksniu atsirandantis pojūtis 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 mākslīges a mitad del gesto.

Geroji patirtis

Primero, aplica la regla de mínima intervención: elige el valor menos limitivo que resuelva tu casoSi te basta con pan-x, jokios naudos none. Así preservas gestos nativos y accesibilidad.

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

Tercero, si bloqueas el zoom por necesidades del producto, ofrece alternativas de accesibilidad (teksto valdymas, vidinis priartinimas, kontrastas adecuado). Privar del zoom sin alternativa perjudica la lectura.

Cuarto, documenta y acuerda el comportamiento con el equipo: marcar contratos claros entre CSS ir JavaScript evita konfliktos, sobre todo cuando hay listeners que cancelan eventos o librerías de gestos de por medio.

Clases utilitarias en frameworks

Muchos frameworks de utilidades ofrecen klasės, kurias galima suskirstyti į 1:1 a touch-action, lo cual acelera prototipado y cambios. Es 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>

Estas utilidades ayudan a mantener el CSS limpio y koherente; recuerda que bajo el capó siguen siendo valores de touch-action, con las mismas reglas de combinación y efectos.

Testavimas ir derinimas

Para verificar el efecto, lo ideal es un dispositivo táctil. Algunos navegadores ofrecen 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.

Jei nėra atsakymo, peržiūrėti prioritetus: ¿el elemento realmente recibe los eventos? ¿hay listeners que cancelan por preventDefault()? patvirtinti computed style de touch-action y čekis superposiciones con pointer-events taupo jums valandas.

Kopijavimo sąrašų fragmentai

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

Ypatingos pagalbos pastabos

Praeityje, vertė pinch-zoom se popularizó con soporte en Chrome a partr de la version 56, y su comportamiento ha ido refinándose. En plataformas donde el pellizco sea una acción de sistema, verifica que tu app no ​​entra en konflikto con SO veiksmai (por eemplo, gestos de navegación por bordes).

Tai yra viešasis tikslas, apimantis iOS, atgaivinti: 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.

Sintaksės resumida ir mentaliniai modeliai

Una manera de no equivocarte es pensar en capas. Primero eliges el eje o las direcciones lubaidas (pan-x, pan-y, pan-left ir kt.); después nusprendžia si añades pinch-zoom; y, si lo tuyo es la rapidez, jūs naudojate manipulation kaip nuorodą tipiškas be dvigubos kepurės.

Y no olvides la supaprastinimo: si tu combinación se puede escribir con un atajo, usa el Atajo. Es įskaitomas y evita valores inválidos (el clásico "pan-left pan-right" que debería ser pan-x).

Plantilla de estilos para proyectos

Este bloque suele encajar en design systems y librerías de komponentes. Apibrėžkite utilidades en tu CSS para usos 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; }

Su uždarytomis ketinimų dokumentai (por ejemplo, "protingas" implicando respuesta ágil) en lugar de un detalle técnico aislado, lo que facilita la adopción por parte de otros desarrolladores.

Pequeño kontrolinis sąrašas antes de publicar

– Ar escogido el valor menos intrusivo que cumple tu objetivo? Si algo puede ser nativo, déjalo nativo.
– Ar naudojate programą su masteliu? Jokių aukų neprieinamų ir neįspūdingų.
– Ar yra „iOS“ ir „Android Reales“ komprobado? La emulación es útil, bet no definitiva.
– ¿Los listeners no interfieren con el Comportamiento esperado? Evita atšaukia pasaulines paslaugas.

Aišku, kad touch-action es una palanca esencial para afinar la experiencia táctil: te atļauje delimitar qué gestos son nativos y cuáles controlas tú, sumažinti latenciją 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 táctiles que se sienten naturales y fiables.

Susijęs straipsnis:
Išspręsta: slinkties rodinys slėpti slinkties juostą
Susijusios naujienos: