Quel est le moyen le plus sûr, à l'aide de requêtes multimédias, de faire en sorte que quelque chose se produise lorsque vous n'êtes pas sur un appareil à écran tactile? S'il n'y a aucun moyen, suggérez-vous d'utiliser une solution JavaScript telle que !window.Touch
ou Modernizr?
css
touch
media-queries
JJJollyjim
la source
la source
Réponses:
Je suggérerais d'utiliser modernizr et d'utiliser ses fonctionnalités de requête multimédia.
Cependant, en utilisant CSS, il existe des pseudo-classes comme, par exemple, dans Firefox. Vous pouvez utiliser : -moz-system-metric (tactile) . Mais ces fonctionnalités ne sont pas disponibles pour tous les navigateurs.
Pour les appareils Apple , vous pouvez utiliser simplement:
Surtout pour Ipad:
Mais, ceux - ci ne fonctionnent pas sur Android .
Styling des éléments tactiles
Modernizer ajoute des classes à la balise HTML dans ce but précis. Dans ce cas,
touch
etno-touch
ainsi vous pouvez styliser vos aspects liés au toucher en préfixant vos sélecteurs avec .touch. par exemple.touch .your-container
. Crédits: Ben Swinburnela source
modernizr
sera parfait :)Modernizr.touch
test indique uniquement si le navigateur prend en charge les événements tactiles, ce qui ne reflète pas nécessairement un appareil à écran tactile. Par exemple, les téléphones Palm Pre / WebOS (tactiles) ne prennent pas en charge les événements tactiles et échouent donc à ce test.touch
etno-touch
ainsi vous pouvez styliser vos aspects liés au toucher en préfixant vos sélecteurs avec.touch
. Par exemple.touch .your-container
Il existe en fait une propriété pour cela dans le brouillon de requête multimédia CSS4 .
Cela serait utilisé comme tel:
J'ai également trouvé un ticket dans le projet Chromium lié à cela.
La compatibilité du navigateur peut être testée à Quirksmode . Voici mes résultats (22 janvier 2013):
la source
Les solutions CSS ne semblent pas être largement disponibles à la mi-2013. Au lieu...
Nicholas Zakas explique que Modernizr applique une
no-touch
classe CSS lorsque le navigateur ne prend pas en charge le toucher.Ou détectez en JavaScript avec un simple morceau de code, vous permettant de mettre en œuvre votre propre solution de type Modernizr:
Ensuite, vous pouvez écrire votre CSS comme suit:
la source
Les types de support ne vous permettent pas de détecter les capacités tactiles dans le cadre de la norme:
http://www.w3.org/TR/css3-mediaqueries/
Donc, il n'y a aucun moyen de le faire de manière cohérente via CSS ou des requêtes multimédias, vous devrez recourir à JavaScript.
Pas besoin d'utiliser Modernizr, vous pouvez simplement utiliser du JavaScript simple:
la source
window.touch
&&window.TouchEvent
ne fonctionnent que pour les appareils Apple.En 2017, la requête multimédia CSS de la deuxième réponse ne fonctionne toujours pas sur Firefox. J'ai trouvé une solution pour ça: -moz-touch-enabled
Alors, voici la requête multimédia multi-navigateurs:
la source
-moz-touch-enabled
ne sera pas nécessaire bientôt-moz-touch-enabled
n'est pas pris en charge dans Firefox 58+. Comme dans, cette solution ne couvre pas Firefox 58-63 (puisque Firefox 64+ prend en charge la requête pointeur). Source: developer.mozilla.org/en-US/docs/Web/CSS/@media/…Il y a en fait une requête média pour cela:
En dehors de Firefox, il est assez bien pris en charge . Safari et Chrome étant les navigateurs les plus courants sur les appareils mobiles, cela pourrait suffire jusqu'à une plus grande adoption.
la source
Cela fonctionnera. Si ça ne me fait pas savoir
edit: le survol à la demande n'est plus pris en charge
la source
Cette solution fonctionnera jusqu'à ce que CSS4 soit globalement pris en charge par tous les navigateurs. Quand ce jour viendra, utilisez simplement CSS4. mais jusque-là, cela fonctionne pour les navigateurs actuels.
browser-util.js
en charge:
ancienne façon:
nouvelle façon:
Le code ci-dessus ajoutera la classe "is-touch" à l'étiquette corporelle si l'appareil dispose d'un écran tactile. Maintenant, n'importe quel emplacement dans votre application Web où vous auriez un css pour: survolez vous pouvez appeler
body:not(.is-touch) the_rest_of_my_css:hover
par exemple:
devient:
Cette solution évite d'utiliser modernizer car la lib modernizer est une très grande bibliothèque. Si tout ce que vous essayez de faire est de détecter les écrans tactiles, ce sera mieux lorsque la taille de la source compilée finale est une exigence.
la source
ajouter un écran tactile de classe au corps en utilisant JS ou jQuery
la source
J'ai pu résoudre ce problème en utilisant ceci
la source
on-demand
a été supprimé des spécifications et des navigateurs: github.com/w3c/csswg-drafts/commit/…