¿Cuál es la forma más segura, utilizando consultas de medios, para hacer que algo suceda cuando no está en un dispositivo con pantalla táctil? Si no hay forma, ¿sugiere usar una solución de JavaScript como !window.Touch
o Modernizr?
css
touch
media-queries
JJJollyjim
fuente
fuente
Respuestas:
Sugeriría usar modernizr y sus funciones de consulta de medios.
Sin embargo, usando CSS, hay pseudo clases como, por ejemplo, en Firefox. Puede usar : -moz-system-metric (táctil) . Pero estas características no están disponibles para todos los navegadores.
Para dispositivos Apple , puede usar de manera simple:
Especialmente para Ipad:
Pero, estos no funcionan en Android .
Elementos táctiles de estilo
Modernizer agrega clases a la etiqueta HTML para este propósito exacto. En este caso,
touch
yno-touch
por lo que puede estilo de su tacto aspectos relacionados con el prefijo sus selectores con .Toque. por ej.touch .your-container
. Créditos: Ben Swinburnefuente
modernizr
será perfecto :)Modernizr.touch
prueba solo indica si el navegador admite eventos táctiles, lo que no necesariamente refleja un dispositivo con pantalla táctil. Por ejemplo, los teléfonos Palm Pre / WebOS (touch) no admiten eventos táctiles y, por lo tanto, no pasan esta prueba.touch
yno-touch
por lo que puede el estilo de su tacto aspectos relacionados con el prefijo sus selectores con.touch
. Por ejemplo.touch .your-container
En realidad, hay una propiedad para esto en el borrador de consulta de medios CSS4 .
Esto se usaría como tal:
También encontré un boleto en el proyecto Chromium relacionado con esto.
La compatibilidad del navegador se puede probar en Quirksmode . Estos son mis resultados (22 de enero de 2013):
fuente
Las soluciones CSS no parecen estar ampliamente disponibles a mediados de 2013. En lugar...
Nicholas Zakas explica que Modernizr aplica una
no-touch
clase CSS cuando el navegador no admite el tacto.O detecte en JavaScript con un código simple, lo que le permite implementar su propia solución tipo Modernizr:
Entonces puedes escribir tu CSS como:
fuente
Los tipos de medios no le permiten detectar capacidades táctiles como parte del estándar:
http://www.w3.org/TR/css3-mediaqueries/
Por lo tanto, no hay forma de hacerlo consistentemente a través de CSS o consultas de medios, tendrá que recurrir a JavaScript.
No es necesario usar Modernizr, solo puede usar JavaScript simple:
fuente
window.touch
&&window.TouchEvent
solo funciona para dispositivos Apple.En 2017, la consulta de medios CSS de la segunda respuesta todavía no funciona en Firefox. Encontré una solución para eso: -moz-touch-enabled
Entonces, aquí hay una consulta multimedia entre navegadores:
fuente
-moz-touch-enabled
lo que no será necesario pronto-moz-touch-enabled
supuestamente no es compatible con Firefox 58+. Como en, esta solución no cubre Firefox 58-63 (ya que Firefox 64+ admite la consulta de puntero). Fuente: developer.mozilla.org/en-US/docs/Web/CSS/@media/…En realidad, hay una consulta de medios para eso:
Además de Firefox, está bastante bien soportado . Safari y Chrome son los navegadores más comunes en dispositivos móviles, puede ser suficiente hasta una mayor adopción.
fuente
Esto funcionará Si no me avisas
editar: suspender a pedido ya no es compatible
fuente
Esta solución funcionará hasta que CSS4 sea compatible globalmente con todos los navegadores. Cuando llegue ese día solo usa CSS4. pero hasta entonces, esto funciona para los navegadores actuales.
browser-util.js
onload:
vieja forma:
nueva forma:
El código anterior agregará la clase "is-touch" a la etiqueta del cuerpo si el dispositivo tiene una pantalla táctil. Ahora, cualquier ubicación en su aplicación web donde tendría CSS para: pase el mouse al que puede llamar
body:not(.is-touch) the_rest_of_my_css:hover
por ejemplo:
se convierte en:
Esta solución evita el uso de modernizer ya que la lib modernizer es una biblioteca muy grande. Si todo lo que intenta hacer es detectar pantallas táctiles, esto será mejor cuando se requiera el tamaño de la fuente compilada final.
fuente
Agregar una pantalla táctil de clase al cuerpo usando JS o jQuery
fuente
Pude resolver este problema usando esto
fuente
on-demand
se ha eliminado de la especificación y de los navegadores: github.com/w3c/csswg-drafts/commit/…