Udstyret med CSS-touch-action: Cómo domar gestos taktiles con precision

Sidste ændring: 11/14/2025
Forfatter: C SourceTrail
  • Definer qué gestos maneja el navegador: desplazamiento, pellizco-zoom og doble toque.
  • Kombiner valores (pan-x/pan-y/pan-*) og pinch-zoom, eller usa el atajo-manipulation.
  • Tilgængelighed: evitar bloquear el zoom salvo necesidad real.
  • Kompatibilitet amplia; iOS Safari præsenterer funktioner, prueba og hardware ægte.

Illustration af touch-action CSS

Cuando trabajamos med grænseflader taktile, har en detaljeret que marca la diferencia entre una experiencia fluida y otra frustrante: decidir qué gestos gestiona el navegador y cuáles gestiona tu códigoCSS' ejendom touch-action es justo el interruptor fino que permite ajustar ese comportamiento al milímetro.

Få noget esoterisk at se ud, 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 componentes como mapas, carruseles or lienzos de juegos.

¿Qué es exactamente touch-action?

Med et par ord touch-action indica al agente de usuario qué acciones táctiles puede ejecutar de forma nativa en una region de la página 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, men con un enfoque específico en gestos como el desplazamiento y el zoom.

På denne måde puedes permitir que el navegador haga su trabajo (desplazar, hacer zoom) o bloquearlo para implementar tú las interacciones (for eksempel, zoom internt på et kort) sin interferencias ni demoras artificiales en los click.

Eksempel på berøringsbaseret CSS

Syntaksis og brugsformer

La propiedad acepta varias combinaciones con reglas muy concretas. Puedes declarar un único valor, eller componer diverse valores-kompatible para ajustar el comportamiento táctil con precision.

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

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

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

Med andre ord, puedes usar uno de los valores globales (auto, ingen, manipulation) o bien una combinación de los conjuntos de desplazamiento horisontal y/o lodret, mere pinch-zoom valgfrit.

Valores de touch-action y qué harce 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

Lad navigatoren være væk 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. Ingen har desplazamiento ni pellizco-zoom nativos; te tocará implementarlos con JavaScript er quieres ese comportamiento. Det er ideelt for kort eller lienzos donde el control debe ser 100% tuyo.

manipulation

Permit el desplazamiento y el pellizco-zoom, men desactiva ciertos gestos no estándar como el doble toque para ampliar. Es, en la práctica, un alias de "pan-x pan-y knibe-zoom" (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 horisontal con un solo dedoKan kombineres med pan-y, pan-up, pan-down og / eller pinch-zoomDet er en angrebskamp, ​​der er englobal pan-left y pan-right.

pan-y

Activa el desplazamiento vertikal med en solo dedoKan kombineres med pan-x, pan-left, pan-right og / eller pinch-zoom. Del mismo modo, es un atajo que incluye pan-up y pan-down.

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

tillade 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, "pan-up" significa que el usuario arrastra el dedo hacia abajo en la pantalla para que el contenido se mueva hacia arriba; y "pan-venstre" implica arrastrar el dedo a la derecha para que el contenido se desplace hacia la izquierda.

pinch-zoom

Aktiver 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 cancelle.

Reglas de combinación og normalization

Al combinar directions, existen reglas de simplificación. No todo lo que se puede escribir es válido si hay una forma más simpleFor eksempel, "pan-left pan-right"Se overvejelserne inválido porque la forma correcta y más corta es pan-x.

Sin embargo, hø combinaciones que sí tienen sentido, como "pan-left pan-down" para permitir desplazamientos que inician hacia la izquierda o hacia abajo. En este caso, no hay una abreviatura directa equivalente, por lo que es una combinación aceptable.

Husk det også puedes mezclar ejes y pellizcoFor eksempel, "pan-x pinch-zoom" tillade desplazamiento horisontal 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, erklærer du din interesse touch-action: none; du skriv til zoom tilpasset 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 case, "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.

For UI-komponenter som vandrette horisontale komponenter, pan-x at være den bedste mulighed. Permites el desplazamiento lateral con un dedo, mantienes el pellizco-zoom desactivado si no lo añades, y evitas conflictos con el scroll vertical de la página si no quieres que se active.

Hvis din prioritet er 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.

Indvirkning på tilgængelighed

Et kritikerpunkt: hvis jeg erklærer 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 utilgængelig.

Cuando el contexto lo permita, overveje at holde pinch-zoom gøre det muligt for eller søg tilgængelighedsalternativer que no impidan el aumento. Hacer zoom es, para muchos usuarios, una herramienta de lectura esencial; no la desactives a la ligera.

Kompatibilitet med entre navegadores

Støtten fra touch-action Det er mere, men med venner. Moderne ledere som Chrome (36+), Edge (12+), Firefox (52+) og Opera (23+) implementan la propiedad con los valores principales.

El pointo delicado históricamente har side Safari. iOS Safari har præsenteret begrænsninger, med solido para auto y manipulation, mientras que otros valores han sido más variabler según version y kontekst. En versiones recientes af 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 actualizan 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 af form for tillid.

Praktiske eksempler på brug

Veamos algunos patrones de declaración que te solucionarán la vida. Få en prøvelse af hardware-táctil para comprobar que la experiencia es la esperada.

1) Deaktiver todos los gestos (kort eller lærred personliggjort)

Udil 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) Tillad desplazamiento nativo, kontroller solo eller zoom

Hvis du har JavaScript til at indlæse zoom, skal du bruge navegador gestione el scroll en ambos ejes for ikke at genopfinde rueda.

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

3) Desplazamiento vandret med pellizco-zoom

For carruseles complejos o galerías: rul vandret for at gøre og zoome con dos, uden lodret rulning, nativ.

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

4) Desplazamientos por dirección inicial

En ocasiones conviene permitir solo gestos que arrancan hacia una directción concreta (s. ej., para no interferir con otros componentes).

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

5) Atajo pragmático: manipulation

Cuando buscas una respuesta táctil contundente sin doble toque, manipulation det er en stor komodín. Ayuda a evitar el retraso del click efter-toque.

button, a {
  touch-action: manipulation;
}

Forhold til pointer-events og klikbegivenheder

Selvom de nogle gange er forvirrede, touch-action y pointer-events forskellige problemer med atacan. El segundo beslutte si un elemento responde a "pointeros" (ratón, táctil, lápiz) en nivel de hit-testing; el primero determina qué gestos táctiles por defecto puede ejecutar el navegador i den region.

Derudover desactivar gestos como el doble toque con manipulation elimina el retroso 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 uden at vente

Notas y detaljers de implementación

med pinch-zoom, har navigatorer, der inician el zoom continuo inmediatamente sin esperar a que intetes cancelar la acción por JavaScript. Este comportamiento favorece en øjeblikkelig følelse en el gesto de pellizco sobre elementos que lo permiten.

También debes sabre 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 liste o un lienzo, y evita bloqueos artificiales a mitad del gesto.

God praksis

Primero, aplica la regla de minima intervención: elige el valor menos restrictivo que resuelva tu casoSi du basta con pan-x, ingen anvendelser none. Así bevaring gestos nativos y accessibilidad.

Segundo, en componentes complejos prueba and hardware real: 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 se noter.

Tercero, si bloqueas el zoom por necesidades del producto, ofrece alternatives de accesibilidad (kontroller de tamaño de texto, zoom interno claro, kontrast adecuado). Privar del zoom sin alternative perjudica la lectura.

Cuarto, documenta y acuerda el comportamiento con el equipo: marcar contratos claros entre CSS og JavaScript evita conflictos, sobre todo cuando hay lyttere que annullere begivenheder eller librerías de gestos de por medio.

Klasser utilitarias og rammer

Mange rammer for udnyttelse af de seneste klasser der kortlægger 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 coherente; recuerda que bajo el capó siguen siendo valores de touch-action, con las mismas reglas de combinación y efectos.

Test og fejlretning

Para verificar el efecto, lo ideal es un dispositivo táctil. Algunos navegadores ofrecen emulación táctil en sus DevTools, men reproduceres ikke a la perfección la física del gesto ni los múltiples dedos simultáneos.

Hvis du ikke har svaret, skal du prioritere: ¿el elemento realmente recibe los events? ¿hay listeners que cancellan por preventDefault()? Bekræft computed style de touch-action y chequear superposiciones con pointer-events sparer dig timer.

Fragmenter af kopieringslister

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

Bemærkninger om specifik støtte

I fortiden, værdien pinch-zoom se popularizó con soporte en Chrome a partir de la version 56, y su comportamiento ha ido refinándose. En plataformas donde el pellizco havet una acción de sistema, verifica que tu app no ​​entra en konflikto con gestos del SO (por ejemplo, gestos de navegación por bordes).

Du kan bruge iOS-objektet, og du kan bruge følgende: las combinaciones avanzadas pueden no comportarse igual que en Chromium. Las pruebas cruzadas søn obligatorias cuando basas la UX en direcciones iniciales o en bloquear el doble toque.

Sintaxis resumida y mentale modeller

En manera de no equivocarte es pensar en capas. Primero eliges el eje o las direcciones permitidas (pan-x, pan-y, pan-venstre osv.); después beslutter si añades pinch-zoom; y, si lo tuyo es la rapidez, du bruger manipulation som en genvej typisk uden dobbelt mule.

Y ingen olvides la simplificación: si tu combinación se puede escribir con un atajo, usa el atajo. Es læsible y evita valores inválidos (el clásico "pan-venstre pan-right" que debería ser pan-x).

Plantilla de estilos for proyectos

Este bloque suele encajar en design systems and librerías de componentes. Definer brugen af ​​CSS til brug for hyppige brugere 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; }

Med disse klasser, dokumenterer intentionen (por ejemplo, "fornuftig" implicando respuesta ágil) en lugar de un detalle técnico aislado, lo que facilita la adopción por parte de otros desarrolladores.

Find tjekliste før offentligheden

– ¿Har escogido el valor menos intrusivo que cumple tu objetivo? Det er en fødselsdag, en fødselsdag.
– ¿Tu app sigue siendo anvendelig con zoom? Ingen ofringer er uoverskuelige.
– ¿Har comprobado iOS og Android reel? La emulación es útil, men ingen definitiva.
– ¿Los listeners no interfieren con el comportamiento esperado? Undgå globale aflysninger.

Det er klart at touch-action es una palanca esencial para afinar la experiencia táctil: te permite delimitar qué gestos son nativos y cuáles controlas tú, reducer 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 táctiles que se sienten naturales y fiables.

relateret artikel:
Løst: scrollview skjul scrollbar
Relaterede indlæg: