Qual é a maneira mais segura, usando consultas de mídia, de fazer algo acontecer quando não estiver em um dispositivo com tela de toque? Se não houver maneira, você sugere usar uma solução JavaScript como !window.Touch
Modernizr ou?
css
touch
media-queries
JJJollyjim
fonte
fonte
Respostas:
Eu sugeriria o uso de modernizr e seus recursos de consulta de mídia.
No entanto, usando CSS, existem pseudo classes como, por exemplo, no Firefox. Você pode usar : -moz-system-metric (ativado por toque) . Mas esses recursos não estão disponíveis para todos os navegadores.
Para dispositivos Apple , você pode usar de maneira simples:
Especialmente para o Ipad:
Mas, eles não funcionam no Android .
Elementos de toque de estilo
O modernizador adiciona classes à tag HTML para esse fim exato. Nesse caso,
touch
eno-touch
para que você possa estilizar os aspectos relacionados ao toque, prefixe seus seletores com .touch. por exemplo.touch .your-container
. Créditos: Ben Swinburnefonte
modernizr
será perfeito :)Modernizr.touch
teste indica apenas se o navegador suporta eventos de toque, o que não reflete necessariamente um dispositivo de tela de toque. Por exemplo, os telefones Palm Pre / WebOS (touch) não suportam eventos de toque e, portanto, são reprovados neste teste.touch
eno-touch
para que você possa estilizar os aspectos relacionados ao toque, prefixe seus seletores.touch
. Por exemplo.touch .your-container
Na verdade, existe uma propriedade para isso no rascunho da consulta de mídia CSS4 .
Isso seria usado como tal:
Eu também encontrei um ticket no projeto Chromium relacionado a isso.
A compatibilidade do navegador pode ser testada no Quirksmode . Estes são os meus resultados (22 de janeiro de 2013):
fonte
As soluções CSS não parecem estar amplamente disponíveis em meados de 2013. Em vez de...
Nicholas Zakas explica que o Modernizr aplica uma
no-touch
classe CSS quando o navegador não suporta o toque.Ou detecte no JavaScript com um simples trecho de código, permitindo implementar sua própria solução Modernizr:
Então você pode escrever seu CSS como:
fonte
Os tipos de mídia não permitem detectar recursos de toque como parte do padrão:
http://www.w3.org/TR/css3-mediaqueries/
Portanto, não há como fazê-lo de forma consistente por meio de CSS ou consultas de mídia, você precisará recorrer ao JavaScript.
Não é necessário usar o Modernizr, você pode simplesmente usar JavaScript simples:
fonte
window.touch
&&window.TouchEvent
funcionam apenas para dispositivos Apple.Em 2017, a consulta de mídia CSS da segunda resposta ainda não funciona no Firefox. Encontrei uma solução para isso: -moz-touch-enabled
Então, aqui está a consulta de mídia entre navegadores:
fonte
-moz-touch-enabled
não será necessário em breve-moz-touch-enabled
supostamente não é suportado no Firefox 58+. Por exemplo, esta solução não abrange o Firefox 58-63 (já que o Firefox 64+ suporta a consulta de ponteiro). Fonte: developer.mozilla.org/pt-BR/docs/Web/CSS/@media/…Na verdade, existe uma consulta de mídia para isso:
Além do Firefox, é bastante bem suportado . Sendo o Safari e o Chrome os navegadores mais comuns em dispositivos móveis, pode ser suficiente até uma adoção maior.
fonte
Isso vai funcionar. Se não me avisar
editar: pairar sob demanda não é mais suportado
fonte
Esta solução funcionará até que o CSS4 seja globalmente suportado por todos os navegadores. Quando esse dia chegar, use CSS4. mas até então, isso funciona para navegadores atuais.
browser-util.js
carregando:
à moda antiga:
maneira mais recente:
O código acima adicionará a classe "is-touch" à etiqueta do corpo, se o dispositivo tiver uma tela de toque. Agora, qualquer local em seu aplicativo da Web onde você teria CSS para: pairar, você pode chamar
body:not(.is-touch) the_rest_of_my_css:hover
por exemplo:
torna-se:
Esta solução evita o uso do modernizador, pois a biblioteca modernizadora é uma biblioteca muito grande. Se tudo o que você está tentando fazer é detectar telas sensíveis ao toque, será melhor quando o tamanho da fonte compilada final for um requisito.
fonte
adicionando uma tela de toque de classe ao corpo usando JS ou jQuery
fonte
Consegui resolver esse problema usando este
fonte
on-demand
foi removido das especificações e dos navegadores: github.com/w3c/csswg-drafts/commit/…