Diğer yanıtların da belirttiği gibi, iOS Safari :active
, öğeye bir dokunma olayı eklenmedikçe sözde sınıfı tetiklemez , ancak şu ana kadar bu davranış "sihirli" olmuştur. Safari Geliştirici Kitaplığı'nda bunu açıklayan şu küçük habere rastladım (vurgu benim):
-webkit-tap-highlight-color
CSS özelliğini, düğmeleri masaüstüne benzer davranacak şekilde yapılandırmak için bir dokunma olayı ayarlamayla birlikte de kullanabilirsiniz . İOS'ta, fare olayları o kadar hızlı gönderilir ki kapalı veya etkin durum asla alınmaz. Bu nedenle, :active
sözde durum yalnızca HTML öğesinde ayarlanmış bir dokunma olayı olduğunda tetiklenir - örneğin, öğe üzerinde ontouchstart aşağıdaki gibi ayarlandığında:
<button class="action" ontouchstart=""
style="-webkit-tap-highlight-color: rgba(0,0,0,0);">
Testing Touch on iOS
</button>
Artık düğmeye dokunulduğunda ve iOS'ta tutulduğunda, düğme, çevresindeki şeffaf gri renk görünmeden belirtilen renge dönüşür.
Başka bir deyişle, bir ontouchstart
olay ayarlamak (boş olsa bile) tarayıcıya açık bir şekilde dokunma olaylarına tepki vermesini söyler.
Bence bu kusurlu bir davranıştır ve muhtemelen "mobil" web'in temelde mevcut olmadığı zamana dayanmaktadır (ne demek istediğimi görmek için bağlantılı sayfadaki ekran görüntülerine bakın) ve her şey fare odaklıydı. Android gibi diğer, daha yeni mobil tarayıcıların, iOS için gerekli olanlara benzer herhangi bir hile olmadan dokunulduğunda ``: active '' sözde durumu gayet iyi görüntülediğini not etmek ilginçtir.
(Yan not: iOS'ta kendi özel stillerinizi kullanmak istiyorsanız, yukarıdaki aynı bağlantılı sayfada açıklandığı gibi :active
, -webkit-tap-highlight-color
CSS özelliğini kullanarak iOS'un sözde durum yerine kullandığı varsayılan gri yarı saydam kutuyu da devre dışı bırakabilirsiniz. .)
Bazı deneylerden sonra , tüm dokunma olaylarının balonlaştığı ontouchstart
, <body>
öğe üzerinde bir olay ayarlamanın beklenen çözümü tam olarak çalışmıyor. Sayfa yüklendiğinde, o zaman gayet iyi çalışıyor, ama aşağı kaydırma ve görüntü alanının dışında bir öğe dokunarak ne zaman eleman görüntü kapısında görünür durumdaysa değil tetiklemek olması gerektiği gibi sözde devlet. Yani, yerine:active
<!DOCTYPE html>
<html><body ontouchstart></body></html>
gövdede köpüren olaya güvenmek yerine olayı tüm öğelere ekleyin (jQuery kullanarak):
$('body *').on('touchstart', function (){});
Ancak, bunun performans etkilerinin farkında değilim, bu yüzden dikkatli olun.
DÜZENLEME: Bu çözümde ciddi bir kusur var: Sayfayı kaydırırken bir öğeye dokunmak bile :active
sözde durumu etkinleştirecektir . Hassasiyet çok güçlü. Android, durum gösterilmeden önce, sayfa kaydırıldığında iptal olan çok küçük bir gecikme getirerek bunu çözer. Bunun ışığında, bunu yalnızca belirli öğelerde kullanmanızı öneririm. Benim durumumda, temelde sayfalarda gezinmek ve eylemler göndermek için düğmelerin bir listesi olan alanda kullanılmak üzere bir web uygulaması geliştiriyorum. Sayfanın tamamı bazı durumlarda hemen hemen düğme olduğundan, bu benim için işe yaramayacak. Bununla birlikte, :hover
bunun yerine sözde durumu dolduracak şekilde ayarlayabilirsiniz . Varsayılan gri kutuyu devre dışı bıraktıktan sonra bu mükemmel çalışır.
ontouchstart
Olmadan eklemek yeterli değil=""
mi? (HTML5)