Cómo deshabilitar la regla CSS ‘: hover’ para navegadores de dispositivos táctiles iPhone y iPad

En lugar de tratar de filtrar los dispositivos con pantalla táctil (es decir, iPhone o iPad), un enfoque más robusto es tratar de detectar el tacto a medida que es compatible, o mejor aún, a medida que ocurre, y modificar su comportamiento de desplazamiento en consecuencia. Aquí hay un par de formas de hacerlo.

Primero, puede agregar una clase CSS a la raíz del documento (es decir, is-touch ) la primera vez que se toca en la pantalla, luego haga referencia a esa clase en su CSS para apuntar a dispositivos de pantalla táctil:

document.addEventListener (‘touchstart’, función addtouchclass (e) {// primer usuario toca la pantalla
document.documentElement.classList.add (‘is-touch’) // agrega la clase “can-touch” a la raíz del documento usando la API classList
document.removeEventListener (‘touchstart’, addtouchclass, false) // cancelar el registro del evento touchstart
}, falso)

Otra opción en el futuro es utilizar CSS Media Consultas Nivel 4 Interacción Características de medios para declarar estilos que se dirigen a dispositivos compatibles :hover completamente, parcialmente (dispositivos de pantalla táctil) o ninguno (sin período de dispositivo señalador):

@media (desplazamiento: ninguno) {
/ * Sin soporte de desplazamiento * /
}
@media (desplazarse: bajo demanda) {
/ * Dispositivos de pantalla táctil * /
}
@media (hover: hover) {
/ * Dispositivos de mouse * /
}

El problema con el uso de CSS Media Queries además del pobre soporte del navegador en este momento es que no tiene en cuenta los dispositivos que admiten tanto el tacto como el mouse; en ese caso, elige el mínimo común denominador, o verdadero para el hover:on-demand pero falso para hover:hover . Tampoco es dinámico, por lo que la detección no cambia cuando el usuario cambia de la pantalla táctil al mouse, por ejemplo.

Recomiendo los siguientes dos artículos para obtener una comprensión profunda de los desafíos y las soluciones actuales cuando se trata de :hover por las plataformas:

4 formas novedosas de lidiar con los efectos pegajosos: desplazarse sobre dispositivos móviles

Características de los medios de interacción y su potencial

Quora no es Stack Overflow, ni debería convertirse en uno. StackOverflow tiene una respuesta a tu pregunta

Con eso dicho:

¿Es posible detectar que el navegador actual está en iPhone / iPad?

  • No puede detectar el dispositivo / navegador a través de CSS
  • Puede detectar el tamaño de la pantalla a través de consultas de medios
  • Puede detectar si se trata de un navegador webkit utilizando consultas de características con @supports(::-webkit-someWebkitProperty)
  • Con una combinación de consultas de medios y consultas de funciones, puede adivinar con seguridad que el usuario probablemente esté usando Safari u Chrome u Opera

¿Es posible hacerlo del lado del cliente, sin JavaScript involucrado?

No. La única forma en que puede estar absolutamente seguro del agente de usuario y la plataforma es con el lado del servidor generando un nombre de clase, o con JavaScript generando un nombre de clase

Este blog tiene una muy buena respuesta para su problema: http://blog.0100.tv/2010/05/fixi … también http://stackoverflow.com/questio ….
Y documentación de Apple: http://developer.apple.com/libra

Usar consultas de medios es la mejor manera de hacerlo si desea una solución de CSS solamente.

Si primero escribe su CSS móvil, puede diseñar su enlace en su estado normal. Luego puede ajustar el estilo de desplazamiento en una consulta de medios.

Aquí hay un ejemplo de trabajo: http://codepen.io/abbasinho/pen/

En general: el comportamiento de desplazamiento no existe en dispositivos con pantalla táctil. Período.

Sin embargo, para ciertos dispositivos iOS,: el desplazamiento se activa antes del evento de clic. Lea más para saber Cómo lidiar con: desplazarse en dispositivos con pantalla táctil

Debería poder apuntar a dispositivos de mano específicamente con tipos @media ( http://www.w3.org/TR/CSS2/media… .). Sin embargo, eso apuntará a todos los dispositivos portátiles, por lo que si (por alguna razón) desea que las computadoras de mano no táctiles retengan el efecto de desplazamiento, entonces es posible que tenga que andar con el ancho máximo y demás.

CSS: el desplazamiento se aplica cuando el cursor está sobre un elemento. Los dispositivos táctiles generalmente no tienen cursor. Hacer tapping puede hacer que un elemento use: active o: pseudo selectores de foco, pero no: hover.

Cuando hace clic en un enlace en cualquier dispositivo, el enlace usa: estado activo. Este estado a menudo se parece al: estado de desplazamiento, por lo que es posible que esté viendo eso en su lugar.

Intente diseñar el estado activo dentro o fuera de una consulta de medios.