: CSS sözde sınıfına veya benzer bir şeye dokunun?


87

Kullanıcı tıkladığında fare düğmesi basılı tutulurken stilini değiştirecek şekilde bir düğme yapmaya çalışıyorum. Bir mobil tarayıcıda dokunulduğunda tarzını da benzer şekilde değiştirmesini istiyorum. Benim için görünüşte apaçık olan şey, CSS'yi kullanmaktı: aktif sözde sınıf, ama bu işe yaramadı. Denedim: odaklanma ve işe yaramadı. Denedim: hover ve işe yarıyor gibiydi, ancak parmağımı düğmeden çıkardıktan sonra stilini korudu. Tüm bu gözlemler bir iPhone 4 ve bir Droid 2 üzerindeydi.

Mobil tarayıcılarda (iPhone, iPad, Android ve umarız diğerleri) bu etkiyi kopyalamanın bir yolu var mı? Şimdilik şöyle bir şey yapıyorum:

<style type="text/css">
    #testButton {
        background: #dddddd;
    }
    #testButton:active, #testButton.active {
        background: #aaaaaa;
    }
</style>

...

<button type="button" id="testButton">test</button>

...

<script type='text/javascript' src='http://code.jquery.com/jquery-1.6.1.min.js'></script>
<script type='text/javascript'>
    $("*").live("touchstart", function() {
      $(this).addClass("active");
    }).live("touchend", function() {
      $(this).removeClass("active");
    });
</script>

: Active sözde sınıfı masaüstü tarayıcılar içindir ve active sınıfı dokunmatik tarayıcılar içindir.

Javascript'i dahil etmeden bunu yapmanın daha basit bir yolu olup olmadığını merak ediyorum.


2
Neredeyse her dokunmatik tarayıcı gibi hoverve mousedown/ mouseupfarklı şekillerde işler , hepsini barındırmak zordur.
Çad

Android ve iOS'un her ikisinde de şunlar bulunur: touchstart,: touchmove,: touchend ve: kullanabileceğiniz touchcancel sahte sınıfları.
Paul Hanbury

2
Touchstart ve: touchend sözde sınıfları için stil ayarlamayı denedim ve bunlar iPhone veya Droid üzerinde çalışmadı. @Paul Hanbury, CSS sözde sınıflarını Javascript etkinlikleriyle karıştırmadığınızdan emin misiniz?
Elias Zamaria


2
Bunu bir cevap olarak gönderirken kendimi aptal gibi hissederdim, ama aslında cevap "Hayır, bu mümkün değil, Javascript kullanmanız gerekiyor." İstediğiniz şey CSS2 veya CSS3'ün bir parçası değil. Bence: active çalışmıyor, iOS ve Android tarayıcılarda potansiyel olarak bir hata olarak bildirebileceğiniz bir kullanıcı aracısı problemidir, ancak sadece son kullanıcı probleminizi çözmek için ... evet, JS kullanmalısınız. . Ontouchstart desteği için uyumluluk kodunuzu bir kontrol içine alabilirsiniz .
joelhardi

Yanıtlar:


51

:touchW3C spesifikasyonlarında, http://www.w3.org/TR/CSS2/selector.html#pseudo-class-selectors gibi bir şey yoktur

:active çalışmalı, bence.

Order :active/ :hoversahte sınıfına doğru işlevine bunun için önemlidir.

İşte yukarıdaki bağlantıdan bir alıntı

Etkileşimli kullanıcı aracıları bazen kullanıcı eylemlerine yanıt olarak işlemeyi değiştirir. CSS, yaygın durumlar için üç sözde sınıf sağlar:

  • : Hover sözde sınıfı, kullanıcı (bazı işaret aygıtlarıyla) bir öğe atadığında, ancak onu etkinleştirmediğinde uygulanır. Örneğin, görsel bir kullanıcı aracısı, imleç (fare işaretçisi) öğe tarafından oluşturulan bir kutunun üzerine geldiğinde bu sözde sınıfı uygulayabilir. Etkileşimli medyayı desteklemeyen kullanıcı aracılarının bu sözde sınıfı desteklemesi gerekmez. Etkileşimli medyayı destekleyen bazı uyumlu kullanıcı aracıları bu sözde sınıfı (örneğin, bir kalem cihazı) destekleyemeyebilir.
  • : Active sözde-sınıfı, bir eleman kullanıcı tarafından etkinleştirilirken geçerlidir. Örneğin, kullanıcının fare düğmesine basıp bıraktığı zamanlar arasında.
  • : Focus sözde sınıfı, bir öğenin odağa sahip olması durumunda uygulanır (klavye olaylarını veya diğer metin girişi biçimlerini kabul eder).

9
Dokunma diye bir şey olmadığını biliyordum. Benzer bir şey olup olmadığını merak ediyordum. : aktif makul görünüyordu ama testlerimde işe yaramadı.
Elias Zamaria

@ mikez302 - Kaynağımdan alıntı yapmak istediğimi bildiğini düşündüm. Seninle aynı fikirdeyim, siparişin çok önemli olması dışında, işe yaramayacağına dair herhangi bir sebep görmüyorum. Birinin IOS ve Android için css sözde seçiciler hakkında bir şeyler yayınladığını gördüm, ancak bu teknolojilerle konuşamadım.
Doug Chamberlain

Örneğimde: active ve: hover kuralları arasında geçiş yaptım ve hiçbir şey yapmıyor gibiydi.
Elias Zamaria

37
@ mikez302: sözde sınıfı kullanın :active. Çalışması gerekir, ancak bazı tarayıcılarda çalışmasını sağlamak için küçük bir touchstart<body ontouchstart="">
hack'e ihtiyacınız vardır

5
Sadece son cevapta @ mikez302 yorumuna değinmek gerekirse, bu makaleye bağlantı veren HTML5 Mobil Boilerplate'in
Giles Butler

21

Mobil, fareyle üzerine gelme geri bildirimi vermediğinden, bir kullanıcı olarak, bir bağlantıya dokunduğunuzda anında geri bildirim görmek istiyorum. Bunun -webkit-tap-highlight-coloren hızlı yanıt veren (öznel) olduğunu fark ettim .

Aşağıdakileri vücudunuza ekleyin ve bağlantılarınız dokunma etkisine sahip olacaktır.

body {
    -webkit-tap-highlight-color: #ccc;
}

Bu en güvenilir gibi görünüyor, ancak en iyisi görünmüyor. Arka plan rengi, öğenin biraz dışına taşıyor ve bölünmüş bir an için daha büyük görünmesini sağlıyor.
Adam

@Adam evet, hatırladığım kadarıyla bunu çözemedim ama bu sadece bir saniyenin bir kısmı için çok büyük bir anlaşma değildi, özellikle de kullanıcının tıkladığı geri bildirim almasına izin vermesi ( bu zaman diliminde onlar için önemli olan)
Abdo

Aslında, boş bir geri arama ile document.ontouchstart olayına (jQuery aracılığıyla) bir işlevi bağlayarak sonunda çalışan: active sözde stilleri elde ettim.
Adam

Fena fikir değil :-) Bu amaçla javascript'ten tamamen kaçınıyordum.
Abdo

2
Sadece bu paylaşım -webkit-tap-highlight-colorbir olduğunu Olmayan Standart CSS özelliği , ben kullanıyorum :activebunun yerine, gerçekten uyuyor ve mantıklı.
Ricardo Fornes

0

Mobil dokunmatik ekran düğme stiliyle ilgili sorun yaşıyordum. Bu, hover stick / aktif düğme sorunlarınızı çözecektir.

body, html {
  width: 600px;
}
p {
  font-size: 20px;
}

button {
  border: none;
  width: 200px;
  height: 60px;
  border-radius: 30px;
  background: #00aeff;
  font-size: 20px;
}

button:active {
  background: black;
  color: white;
}

.delayed {
  transition: all 0.2s;
  transition-delay: 300ms;
}

.delayed:active {
  transition: none;
}
<h1>Sticky styles for better touch screen buttons!</h1>

<button>Normal button</button>

<button class="delayed"><a href="https://www.google.com"/>Delayed style</a></button>

<p>The CSS :active psuedo style is displayed between the time when a user touches down (when finger contacts screen) on a element to the time when the touch up (when finger leaves the screen) occures.   With a typical touch-screen tap interaction, the time of which the :active psuedo style is displayed can be very small resulting in the :active state not showing or being missed by the user entirely.  This can cause issues with users not undertanding if their button presses have actually reigstered or not.</p>

<p>Having the the :active styling stick around for a few hundred more milliseconds after touch up would would improve user understanding when they have interacted with a button.</p>

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.