Apa cara teraman, menggunakan kueri media, untuk membuat sesuatu terjadi saat tidak menggunakan perangkat layar sentuh? Jika tidak ada cara, apakah Anda menyarankan menggunakan solusi JavaScript seperti !window.Touch
atau Modernizr?
css
touch
media-queries
JJJollyjim
sumber
sumber
Jawaban:
Saya menyarankan menggunakan modernizr dan menggunakan fitur kueri medianya.
Namun menggunakan CSS, ada pseudo class seperti misalnya di Firefox. Anda dapat menggunakan : -moz-system-metric (kompatibel dengan sentuhan) . Namun fitur ini tidak tersedia untuk setiap browser.
Untuk perangkat Apple , Anda dapat menggunakan:
Khusus untuk Ipad:
Tapi, ini tidak berfungsi di Android .
Styling Elemen Sentuh
Modernizer menambahkan kelas ke tag HTML untuk tujuan yang tepat ini. Dalam hal ini,
touch
danno-touch
sehingga Anda dapat gaya aspek yang berhubungan sentuhan Anda dengan awalan selektor Anda dengan .touch. mis.touch .your-container
. Penghargaan: Ben Swinburnesumber
modernizr
akan menjadi sempurna :)Modernizr.touch
tes hanya menunjukkan jika dukungan browser yang menyentuh peristiwa, yang tidak selalu mencerminkan perangkat touchscreen. Misalnya, ponsel Palm Pre / WebOS (sentuh) tidak mendukung aktivitas sentuh sehingga gagal dalam pengujian ini.touch
danno-touch
sehingga Anda dapat gaya sentuhan Anda terkait aspek dengan awalan selektor Anda dengan.touch
. Misalnya.touch .your-container
Sebenarnya ada properti untuk ini di draf kueri media CSS4 .
Ini akan digunakan seperti itu:
Saya juga menemukan tiket di proyek Chromium yang terkait dengan ini.
Kompatibilitas browser dapat diuji di Quirksmode . Ini adalah hasil saya (22 jan 2013):
sumber
Solusi CSS tampaknya tidak tersedia secara luas mulai pertengahan 2013. Sebagai gantinya...
Nicholas Zakas menjelaskan bahwa Modernizr menerapkan
no-touch
kelas CSS saat browser tidak mendukung sentuhan.Atau deteksi dalam JavaScript dengan potongan kode sederhana, memungkinkan Anda menerapkan solusi mirip Modernizr Anda sendiri:
Kemudian Anda dapat menulis CSS Anda sebagai:
sumber
Jenis media tidak memungkinkan Anda mendeteksi kapabilitas sentuh sebagai bagian dari standar:
http://www.w3.org/TR/css3-mediaqueries/
Jadi, tidak ada cara untuk melakukannya secara konsisten melalui CSS atau kueri media, Anda harus menggunakan JavaScript.
Tidak perlu menggunakan Modernizr, Anda cukup menggunakan JavaScript biasa:
sumber
window.touch
&&window.TouchEvent
hanya berfungsi untuk perangkat apple.Pada 2017, kueri media CSS dari jawaban kedua masih tidak berfungsi di Firefox. Saya menemukan soluton untuk itu: -moz-touch-enabled
Jadi, inilah kueri media lintas-browser:
sumber
-moz-touch-enabled
tidak akan dibutuhkan segera-moz-touch-enabled
seharusnya tidak didukung di Firefox 58+. Seperti pada, solusi ini tidak mencakup Firefox 58-63 (karena Firefox 64+ mendukung kueri penunjuk). Sumber: developer.mozilla.org/en-US/docs/Web/CSS/@media/…Sebenarnya ada media query untuk itu:
Selain Firefox, ini didukung dengan cukup baik . Safari dan Chrome menjadi browser yang paling umum di perangkat seluler, itu mungkin cukup sampai adopsi yang lebih besar.
sumber
Ini akan berhasil. Jika tidak memberi tahu saya
edit: hover on-demand tidak lagi didukung
sumber
Solusi ini akan berfungsi sampai CSS4 didukung secara global oleh semua browser. Ketika hari itu tiba gunakan saja CSS4. tetapi hingga saat itu, ini berfungsi untuk browser saat ini.
browser-util.js
onload:
cara lama:
cara yang lebih baru:
Kode di atas akan menambahkan kelas "is-touch" ke tag body jika perangkat memiliki layar sentuh. Sekarang lokasi mana pun di aplikasi web Anda di mana Anda akan memiliki css untuk: hover Anda dapat memanggil
body:not(.is-touch) the_rest_of_my_css:hover
sebagai contoh:
menjadi:
Solusi ini menghindari penggunaan modernizer karena lib modernizer adalah perpustakaan yang sangat besar. Jika semua yang Anda coba lakukan adalah mendeteksi layar sentuh, Ini akan menjadi yang terbaik ketika ukuran sumber terkompilasi akhir adalah persyaratan.
sumber
menambahkan layar sentuh kelas ke tubuh menggunakan JS atau jQuery
sumber
Saya dapat menyelesaikan masalah ini menggunakan ini
sumber
on-demand
telah dihapus dari spesifikasi dan dari browser: github.com/w3c/csswg-drafts/commit/…