Di Webkit di iPhone / iPad / iPod, menentukan gaya untuk: pseudo-class aktif untuk <a>
tag tidak terpicu saat Anda mengetuk elemen tersebut. Bagaimana saya bisa memicunya? Kode contoh:
<style>
a:active {
background-color: red;
}
</style>
<!-- snip -->
<a href="#">Click me</a>
iphone
css
webkit
mobile-safari
pseudo-class
Jesse Rusak
sumber
sumber
ontouchstart
tanpa=""
? (HTML5)Seperti jawaban lain telah menyatakan, iOS Safari tidak memicu
:active
pseudo-class kecuali peristiwa sentuh dilampirkan ke elemen tersebut, tetapi sejauh ini perilaku ini "ajaib". Saya menemukan uraian kecil ini di Perpustakaan Pengembang Safari yang menjelaskannya (penekanan milik saya):Dengan kata lain, menyetel
ontouchstart
acara (meskipun kosong) secara eksplisit memberi tahu browser untuk bereaksi terhadap acara sentuh.Menurut pendapat saya, ini adalah perilaku yang salah, dan mungkin berasal dari masa ketika web "seluler" pada dasarnya tidak ada (lihat screenshot di halaman yang ditautkan untuk melihat apa yang saya maksud), dan semuanya berorientasi mouse. Menarik untuk dicatat bahwa peramban seluler lain yang lebih baru, seperti di Android, menampilkan status semu ': aktif' saat disentuh dengan baik, tanpa peretasan seperti yang diperlukan untuk iOS.
(Catatan samping: Jika Anda ingin menggunakan gaya kustom Anda sendiri di iOS, Anda juga dapat menonaktifkan kotak transparan abu-abu default yang digunakan iOS sebagai pengganti status
:active
semu dengan menggunakan-webkit-tap-highlight-color
properti CSS, seperti yang dijelaskan di halaman tertaut yang sama di atas .)Setelah beberapa percobaan, solusi yang diharapkan dari pengaturan
ontouchstart
peristiwa pada<body>
elemen yang semua peristiwa sentuh kemudian gelembung ke tidak bekerja sepenuhnya. Jika elemen terlihat di viewport saat halaman dimuat, maka itu berfungsi dengan baik, tetapi menggulir ke bawah dan menge-tap elemen yang berada di luar viewport tidak memicu status:active
semu seperti yang seharusnya. Jadi, bukanlampirkan acara ke semua elemen alih-alih mengandalkan acara yang menggelembung ke badan (menggunakan jQuery):
Namun, saya tidak mengetahui implikasi kinerja dari ini, jadi waspadalah.
EDIT: Ada satu kelemahan serius dengan solusi ini: bahkan menyentuh elemen saat menggulir halaman akan mengaktifkan status
:active
semu. Sensitivitasnya terlalu kuat. Android memecahkan masalah ini dengan memberikan penundaan yang sangat kecil sebelum status ditampilkan, yang dibatalkan jika halaman di-scroll. Sehubungan dengan hal ini, saya sarankan menggunakan ini hanya pada elemen tertentu. Dalam kasus saya, saya sedang mengembangkan aplikasi web untuk digunakan di lapangan yang pada dasarnya adalah daftar tombol untuk menavigasi halaman dan mengirimkan tindakan. Karena seluruh halaman berisi cukup banyak tombol dalam beberapa kasus, ini tidak akan berhasil untuk saya. Namun, Anda dapat menyetel status:hover
semu untuk mengisi ini sebagai gantinya. Setelah menonaktifkan kotak abu-abu default, ini berfungsi dengan sempurna.sumber
Tambahkan event handler untuk ontouchstart di tag <a> Anda. Ini menyebabkan CSS bekerja secara ajaib.
sumber
Ini bekerja untuk saya:
Catatan: jika Anda melakukan trik ini, ada baiknya juga menghapus tap default – warna highlight Mobile Safari berlaku menggunakan aturan CSS berikut.
sumber
Pada 8 Des 2016, jawaban yang diterima (
<body ontouchstart="">...</body>
) tidak berfungsi untuk saya di Safari 10 (iPhone 5s): Peretasan itu hanya berfungsi untuk elemen-elemen yang terlihat pada pemuatan halaman.Namun, menambahkan:
agar
head
berfungsi seperti yang saya inginkan, dengan sisi negatifnya bahwa sekarang semua peristiwa sentuh selama pengguliran juga memicu keadaan:active
semu pada elemen yang disentuh. (Jika ini menjadi masalah bagi Anda, Anda dapat mempertimbangkan solusi FighterJet:hover
.)sumber
Ini berfungsi untuk saya, tambahkan ke CSS Anda pada elemen yang ingin Anda sorot
sumber
Apakah Anda menggunakan semua pseudo-class atau hanya satu? Jika Anda menggunakan setidaknya dua, pastikan urutannya benar atau semuanya rusak:
..di urutan itu. Selain itu, Jika Anda hanya menggunakan: aktif, tambahkan tautan:, meskipun Anda tidak menatanya.
sumber
Saya telah menerbitkan alat yang seharusnya menyelesaikan masalah ini untuk Anda.
Di permukaan masalahnya terlihat sederhana, tetapi pada kenyataannya perilaku sentuh & klik perlu disesuaikan secara ekstensif, termasuk fungsi batas waktu dan hal-hal seperti "apa yang terjadi saat Anda menggulir daftar tautan" atau "apa yang terjadi ketika Anda menekan tautan lalu gerakkan mouse / jari menjauh dari area aktif "
Ini harus menyelesaikan semuanya sekaligus: https://www.npmjs.com/package/active-touch
Anda harus menetapkan: gaya aktif Anda ke kelas .active atau memilih nama kelas Anda sendiri. Secara default, skrip akan berfungsi dengan semua elemen tautan, tetapi Anda dapat menimpanya dengan susunan pemilih Anda sendiri.
Umpan balik dan kontribusi yang jujur dan bermanfaat sangat dihargai!
sumber
Bagi yang tidak ingin menggunakan ontouchstart, Anda bisa menggunakan kode ini
sumber
Saya mencoba jawaban ini dan variannya, tetapi tampaknya tidak ada yang bekerja dengan andal (dan saya tidak suka mengandalkan 'sihir' untuk hal-hal seperti ini). Jadi saya melakukan yang berikut ini, yang berfungsi dengan sempurna di semua platform, bukan hanya Apple:
:active
untuk.active
.Membuat daftar semua elemen yang terpengaruh dan menambahkan
pointerdown/mousedown/touchstart
penangan peristiwa untuk menerapkan.active
kelas danpointerup/mouseup/touchend
penangan peristiwa untuk menghapusnya. Menggunakan jQuery:Ini agak membosankan, tetapi sekarang saya memiliki solusi yang tidak terlalu rentan terhadap kerusakan di antara versi Apple OS. (Dan siapa yang butuh sesuatu seperti pemutusan ini?)
sumber
Solusinya adalah mengandalkan
:target
alih-alih:active
:Gaya akan dipicu saat jangkar ditargetkan oleh url saat ini, yang kuat bahkan di seluler. Kekurangannya adalah Anda membutuhkan tautan lain untuk menghapus jangkar di url. Contoh lengkapnya:
sumber
Tidak 100% terkait dengan pertanyaan ini, tetapi Anda juga dapat menggunakan css sibling hack untuk melakukannya
HTML
SCSS
Jika Anda ingin menggunakan tooltip html / css murni
sumber
sumber