Propiedad CSS touch-action: ทำหน้าที่ควบคุมการสัมผัสและความแม่นยำ

การปรับปรุงครั้งล่าสุด: 11/14/2025
  • กำหนด qué gestos maneja el navegador: desplazamiento, pellizco-zoom และ doble toque
  • Combina valores (pan-x/pan-y/pan-*) และ pinch-zoom หรือการจัดการอื่นๆ
  • Atención a accesibilidad: evitar bloquear el Zoom salvo necesidad real.
  • ความเข้ากันได้ของแอมพลิฟายเออร์; iOS Safari นำเสนอคุณสมบัติฮาร์ดแวร์ที่แท้จริง

ภาพประกอบการสัมผัส CSS

Cuando trabajamos con interfaces táctiles, hay un detalle que marca la diferencia entre una experiencia Fluida y otra frustrante: decidir qué gestos gestiona el navegador y cuáles gestiona tu código. La propiedad CSS touch-action es justo el ผู้ขัดขวาง fino que อนุญาต ajustar ese comportamiento al milímetro.

Lejos de ser algo esotérico, touch-action ควบคุม el desplazamiento, el ซูม por pellizco และ otros gestos ที่กำหนดไว้ล่วงหน้า que el navegador aplicaría al tocar un elemento Bien usada, evita retrasos en eventos, choca menos con tu JavaScript และการควบคุมจริงและองค์ประกอบ como mapas, carruseles หรือ lienzas de juegos

¿Qué es แน่นอนการสัมผัสการกระทำ?

ใน 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 reservar para tus manejadores de eventos. Es el เสริม táctil de pointer-events, quesolemos asociar más a interacciones con ratón, pero con un enfoque específico en gestos como el desplazamiento y el Zoom.

ด้วยวิธีนี้ puedes allowanceir que el navegador haga su trabajo (เดสพลาซาร์, ฮาเซอร์ ซูม) หรือ bloquearlo para Implementar tú las interacciones (โดยตัวอย่าง, ซูมภายในแผนที่) บาปรบกวนพรรณี demoras เทียม en los click.

ตัวอย่าง touch-action CSS

Sintaxis y formas de uso

ลาโพรพิดาดอะเซปตาแปรผันรวมกันพร้อมทั้งคอนกรีตPuedes ประกาศ un único valor, o componer varios valores Compatibles para ajustar el compportamiento táctil con precisión.

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

Si necesitas la gramática exta, esta es la sintaxis ทางการ reconocida :

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

กล่าวอีกนัยหนึ่ง puedes usar uno de los valores globales (อัตโนมัติ ไม่มี การจัดการ) o bien una combinación de los conjuntos de desplazamiento แนวนอน y/o แนวตั้ง, más pinch-zoom ทางเลือก

Valores de touch-action และ qué hace cada uno

มีพื้นที่สำหรับวางคอนกรีตเป็นส่วนใหญ่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

เดจา เก เอล นาเวกาดอร์geste todos los gestos de desplazamiento และ Zoom มีส่วนช่วยในการแยกส่วน: 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. ไม่มี Habrá desplazamiento ni pellizco-zoom nativos ; te tocará Implementarlos กับ JavaScript si quieres ese comportamiento. เหมาะอย่างยิ่งสำหรับแผนที่หรือพื้นที่ควบคุมและควบคุม 100% tuyo

manipulation

อนุญาตให้ใช้ desplazamiento และ pellizco-zoom, pero desactiva ciertos gestos no estándar como el doble toque para ampliar- Es, en la práctica, ยกเลิกนามแฝง de "แพน-x แพน-y บีบ-ซูม" (la combinación explícita se mantiene válida por compatibilidad) อัลกีทาร์ เอล 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

กระตือรือร้น el desplazamiento แนวนอน con un single dedo. Puede combinarse con pan-y, pan-up, pan-down และ / หรือ pinch-zoom. Es un atajo que engloba pan-left y pan-right.

pan-y

กระตือรือร้น el desplazamiento แนวตั้ง con un single dedo. Puede combinarse con pan-x, pan-left, pan-right และ / หรือ pinch-zoom- Del mismo modo, es un atajo que incluye pan-up y pan-down.

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

อนุญาตให้ใช้gestos de desplazamiento กับเดี่ยว 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-left " โดยนัย arrastrar el dedo a la derecha para que el contenido se desplace hacia la izquierda.

pinch-zoom

เปิดใช้งาน gestos multi-dedo de Zoom และ desplazamiento- Se puede combinar con cualquiera de los valores pan-*- En navegadores que lo ปฏิบัติ, 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 และ Normalización

Al Combinar Direcciones, มีอยู่แล้ว reglas de simplificación. No todo lo que se puede escribir es válido si hay una forma más simple. Por ejemplo, "pan-left pan-right" seพิจารณาinválido porque la formacorreta y más corta es pan-x.

การคว่ำบาตรบาป, หญ้าแห้ง combinaciones que sí tienen sentido, como "pan-left pan-down" สำหรับ อนุญาต desplazamientos que อินิเชียน ฮาเซีย ลา อิซเกียร์ดา หรือ ฮาเซีย อบาโฮ- En este caso, no hay una abreviatura directa comparisone, por lo que es una combinación เป็นที่ยอมรับได้

นอกจากนี้โปรดจำไว้ว่า ปูเอเดส เมซกลาร์ เอเฆส และเปลลิซโก. Por ejemplo, "pan-x pinch-zoom" อนุญาต desplazamiento แนวนอน por un dedo และ Zoom multi-dedo a la vez, dejando fuera el desplazamiento แนวตั้ง nativo

Cuándo usar cada valor: ผู้อุปถัมภ์ 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, te interesa declarar touch-action: none; คำอธิบายเกี่ยวกับการปรับแต่งส่วนตัวและ JavaScript

Otro escenario es cuando tu código เดี่ยวดำเนินการ una parte de la interacción (โดยตัวอย่าง, เอลซูม), และ prefieres que el navegador mantenga el desplazamiento nativo. ในกรณีนี้, "touch-action: pan-x pan-y;" le dice al agente de usuario que geste todo el desplazamiento y te deja libre para ocuparte del Zoom como quieras

สำหรับส่วนประกอบของ UI como carruseles แนวนอน pan-x suele ser la mejor opción- อนุญาต el desplazamiento ด้านข้าง con un dedo, mantienes el pellizco-zoom desactivado si no lo añades, y evitas allowances con el scroll แนวตั้ง de la página si no quieres que se active

หากสิ่งที่คุณให้ความสำคัญคือ ตอบสนอง inmediata del toque และ 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, แท้จริง que da una sensación de "snappiness" en botones y enlaces.

Impacto en accesibilidad

Un punto crítico: si declaras touch-action: none; บลัวส์ เอล ซูม นาติโว เดล นาเวกาดอร์- Las personas con baja visión que necesitan ampliar para leer perderán esa capacidad, lo que puede Convertir tu interfaz en inaccesible-

Cuando el contexto แท้จริงอนุญาต พิจารณา แมนเทเนอร์ pinch-zoom ทำให้สามารถ หรือค้นหา ทางเลือกในการเข้าถึง que no impidan el aumento. Hacer ซูม es, พารามาก usuarios, una herramienta de lectura esencial; ไม่มี la desactives a la ligera

เข้ากันได้ entre navegadores

การสนับสนุนของ touch-action es amplio, pero conmatices. Chrome (36+), Edge (12+), Firefox (52+) และ Opera (23+) Implementan la propiedad con los valores หลักการ

El punto delicado históricamente ha sido Safari. iOS Safari มีข้อจำกัดอยู่มาก auto y manipulation, mientras que otros valores han sido más ตัวแปร según เวอร์ชัน y บริบท เวอร์ชันของ Safari de escritorio (13+), ความเข้ากันได้และส่วนสำคัญอื่น ๆ 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) seactualizan con contribuciones de la comunidad y estadísticas de uso ; si tu proyecto es sensible gestos concretos, prueba en dispositivos reales. Ten en cuenta también que single en dispositivos con pantalla táctil podrás verificar el comportamiento de forma fidedigna.

ตัวอย่างการใช้งานจริง

Veamos algunos ผู้อุปถัมภ์ de declaración que te solucionarán la vida. เหตุผลหลักคือการใช้ฮาร์ดแวร์เพื่อรวมประสบการณ์และประสบการณ์การใช้งาน

1) Desactivar todos los gestos (แผนที่หรือผ้าใบส่วนบุคคล)

Útil cuando quieres Implementar tú el arrastre y el Zoom internos sin allowances. El navegador no interceptará ni el desplazamiento ni el pellizco.

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

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

2) อนุญาต desplazamiento nativo, ควบคุมโซโลและซูม

หากคุณใช้ JavaScript ร่วมกันในการซูมคลิกที่นี่ เพื่อดูและเลื่อน ดูเพื่อไม่ต้องสร้างใหม่

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

3) Desplazamiento แนวนอนพร้อมการซูมแบบเปลลิซโก

Para carruseles complejos o galerías: เลื่อนแนวนอน con un dedo y ซูม con dos , sin scroll แนวตั้ง nativo

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

4) Desplazamientos por dirección inicial

ในโอกาสที่อนุญาตให้ใช้เดี่ยว gestos que arrancan hacia una dirección concreta (หน้า ej. พาราไม่มี interferir con otros องค์ประกอบ)

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

5) Atajo Pragmático: การยักย้าย

Cuando buscas una respuesta táctil contundente sin doble toque, manipulation es un gran comodín- Ayuda a evitar el retraso del click โพสต์โทค

button, a {
  touch-action: manipulation;
}

ความสัมพันธ์กับ pointer-events y eventos de clic

แม้ว่าบางครั้งจะสับสนก็ตาม touch-action y pointer-events atacan problemas distintos- El segundo ตัดสินใจว่า si un elemento ตอบสนองต่อ "punteros" (ratón, táctil, lápiz) การทดสอบการตีแบบ nivel de; เอล พรีเมโร ดีเทอร์มินา qué gestos táctiles por defecto puede ejecutar el navegador ในเขตพื้นที่นั้น

นอกจากนี้ desactivar gestos como el doble toque con manipulation เอลิมิน่า เอล เรตราโซ่ กลาซิโก เดล click tras un toque en moviles มีความล่าช้าในการแยกแยะความแตกต่างระหว่างความเรียบง่ายและการเริ่มต้นของการซูม si el doble toque ยาไม่มีอยู่, el navegador puede despachar el click โดยไม่ต้องรอ

หมายเหตุและรายละเอียดการดำเนินการ

กับ pinch-zoom, hay navegadores que inician และซูมอย่างต่อเนื่องในสื่อกลาง sin esperar a que ตั้งใจ cancelar la acción por JavaScript Este comportamiento favorece una sensación de inmediatez en el gesto de pellizco sobre elementos que lo allowanceen.

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 ประดิษฐ์ mitad del gesto.

แนวปฏิบัติที่ดี

Primero, aplica la regla de mínima การแทรกแซง: elige el valor menos ข้อจำกัด que resuelva tu caso. Si te basta con pan-x, ไม่มีการใช้งาน none- Así preservas gestos nativos y accesibilidad-

Segundo, และส่วนประกอบที่สมบูรณ์ของฮาร์ดแวร์จริง: 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 notan.

Tercero, si bloqueas el Zoom por necesidades del producto, ofrece alternativas de accesibilidad (ควบคุม tamaño de texto, ซูม interno claro, contraste adecuado) Privar del Zoom sin alternativa perjudica la lectura.

Cuarto, เอกสารและข้อตกลงร่วมกัน: marcar contratos claros entre CSS และ JavaScript evita ข้อขัดแย้ง, sobre todo cuando hay Listeners que cancelan eventos o librerías de gestos de por medio.

คลาสยูทิลิตี้และเฟรมเวิร์ก

กรอบการทำงานมากมายที่ใช้งานอยู่ในปัจจุบัน clases que mapean 1:1 a touch-actionดูเหมือนว่า acelera prototipado และ cambios Es นิสัยที่แตกต่างกัน encontrar 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>

มีการใช้เงื่อนไขและหน้าที่ของ CSS limpio และการเชื่อมโยงกัน; recuerda que bajo el capó siguen siendo valores de touch-action, con las mismas reglas de combinación y efectos.

การทดสอบและการดีบัก

Para verificar el efecto, แท้จริงแล้วเป็นอุดมคติและกลยุทธ์ที่แท้จริงAlgunos navegadores ofrecen emulación táctil en sus DevTools , pero no reproducen a la perfección la física del gesto ni los múltiples dedos simultáneos.

ยังไงก็ไม่ตอบกลับ จัดลำดับความสำคัญใหม่: ¿el elemento realmente recibe los eventos? ¿ผู้ฟังเฮย์ que cancelan por preventDefault()? ยืนยัน computed style de touch-action คุณตรวจสอบ superposiciones con pointer-events ช่วยให้คุณประหยัดเวลาได้หลายชั่วโมง

Fragmentos listos para copiar

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

Notas de soporte específicas

ในอดีต ค่า pinch-zoom se popularizó con soporte en Chrome และส่วนหนึ่ง 56, y su compportamiento ha ido refinándose. ในแพลตฟอร์ม donde el pellizco ทะเล una acción de sistema, ตรวจสอบแอป tu no entra en con conflico con gestos del SO (โดย ejemplo, gestos de navegación por bordes).

Si tu público objetivo incluye iOS, recuerda el matiz: las combinaciones avanzadas pueden no compportarse igual que en Chromium . Las pruebas cruzadas son obligatorias cuando basas la UX en direcciales iniciales o en bloquear el doble toque.

Sintaxis ดำเนินการต่อและแบบจำลองทางจิต

Una manera de no equivocarte es pensar en capas. Primero มีสิทธิ์ el eje o las direcciones allowanceidas (pan-x, pan-y, pan-left ฯลฯ ); Después ตัดสินใจ si añades pinch-zoom- ใช่แล้ว ซิโล ทูโย เอส ลา ราปิดัส USAs manipulation เป็นทางลัด a lo típico sin doble toque.

ใช่ ไม่ใช่ olvides la simplificación: si tu combinación se puede escribir con un atajo, usa el atajo- Es อ่านง่าย y evita valores inválidos (el clásico "pan-left pan-right" que debería ser pan-x).

Plantilla de estilos สำหรับโปรเยคโตส

Este bloque suele encajar en design Systems and librerías de componentes. กำหนด utilidades en tu CSS para usos frecuentes y tendras coherencia entreequipos.

/* 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.

รายการตรวจสอบ Pequeño ก่อนหน้าการเผยแพร่

– ¿Escogido el valor menos intrusivo que cumple tu objetivo? ศรี อัลโก ปูเอเด เซอร์ นาติโว, เดจาโล นาติโว.
– ¿Tu app sigue siendo ใช้งานได้จริงหรือไม่? ไม่มีการเสียสละใดๆ ทั้งสิ้น เป็นสิ่งที่ไม่อาจคาดเดาได้.
– ¿มีระบบปฏิบัติการ iOS และ Android จริงหรือไม่? La emulación es útil, pero no definitiva.
– ¿ผู้ฟังที่สูญเสียไม่มีการแทรกแซงร่วมกัน? Evita cancelaciones globales.

เป็นที่ชัดเจนว่า touch-action es una palanca esencial para afinar la experiencia táctil: อนุญาตให้ใช้ตัวคั่น qué gestos son nativos y cuáles controlas tú, ลดเวลาแฝง 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, tendras partes táctiles que se sienten naturales y fiables.

บทความที่เกี่ยวข้อง:
แก้ไขแล้ว: scrollview ซ่อนแถบเลื่อน
กระทู้ที่เกี่ยวข้อง: