Nasıl kaldırılır / yoksayılır: Dokunmatik cihazlarda fareyle üzerine gelindi


141

:hoverBir kullanıcı web sitemizi dokunmatik cihazla ziyaret ederse tüm CSS bildirimlerini yok saymak istiyorum . Çünkü :hoverCSS mantıklı değildir ve eleman odağı kaybedinceye kadar tıklama / musluğu bir tablet tetikleyiciler bunu o zaman sopa olabilir çünkü eğer bile rahatsız edici olabilir. Dürüst olmak gerekirse, dokunmatik cihazların neden :hoverilk etapta tetikleme ihtiyacı hissettiğini bilmiyorum - ama bu gerçek, bu yüzden bu sorun da gerçek.

a:hover {
   color:blue;
   border-color:green;
   // etc. > ignore all at once for touch devices
}

Öyleyse, tüm CSS :hoverbildirimlerini, bildirildikten sonra dokunmatik cihazlar için (her birini bilmeden) bir kerede (nasıl) kaldırabilir / yoksayabilirim ?



1
Ben görüntüleme cihazı mobil olup olmadığını keşfetmek bir php çözüm ile bu sorunu ve buna dayalı çeşitli değişiklikler ile doğru stil sayfasını kullanın. Bu, sorunuza cevap vermiyor. Potansiyel olarak @media sorgularını kullanabilirsiniz, ancak telefonların ve tabletlerin full hd çözünürlükleri olduğunda çalışması garanti edilmez.
TomFirth

Yanıtlar:


171

tl; dr bunu kullanın: https://jsfiddle.net/57tmy8j3/

Neden veya başka hangi seçeneklerin olduğunu merak ediyorsanız, okumaya devam edin.

Quick'n'dirty - kaldır: JS kullanarak stilleri üzerine getirin

:hoverJavascript kullanarak içeren tüm CSS kurallarını kaldırabilirsiniz . Bu, CSS'ye dokunmak zorunda kalmama ve eski tarayıcılarla bile uyumlu olma avantajına sahiptir.

function hasTouch() {
  return 'ontouchstart' in document.documentElement
         || navigator.maxTouchPoints > 0
         || navigator.msMaxTouchPoints > 0;
}

if (hasTouch()) { // remove all the :hover stylesheets
  try { // prevent exception on browsers not supporting DOM styleSheets properly
    for (var si in document.styleSheets) {
      var styleSheet = document.styleSheets[si];
      if (!styleSheet.rules) continue;

      for (var ri = styleSheet.rules.length - 1; ri >= 0; ri--) {
        if (!styleSheet.rules[ri].selectorText) continue;

        if (styleSheet.rules[ri].selectorText.match(':hover')) {
          styleSheet.deleteRule(ri);
        }
      }
    }
  } catch (ex) {}
}

Sınırlamalar: stil sayfaları aynı etki alanında barındırılmalıdır (bu, CDN olmadığı anlamına gelir). UX'e zarar veren Surface veya iPad Pro gibi karışık fare ve dokunmatik cihazlardaki fareyle üzerine gelmeyi devre dışı bırakır .

Yalnızca CSS - medya sorgularını kullanma

Tüm hover kurallarınızı bir @mediabloğa yerleştirin:

@media (hover: hover) {
  a:hover { color: blue; }
}

veya alternatif olarak, tüm fareyle üzerine gelme kurallarınızı geçersiz kılın (eski tarayıcılarla uyumlu):

a:hover { color: blue; }

@media (hover: none) {
  a:hover { color: inherit; }
}

Sınırlamalar: WebView kullanılırken yalnızca iOS 9.0+, Android için Chrome veya Android 5.0+ sürümlerinde çalışır. hover: hovereski tarayıcılarda fareyle üzerine gelme efektlerini hover: nonebozar, daha önce tanımlanan tüm CSS kurallarını geçersiz kılmaları gerekir. Her ikisi de karışık fare ve dokunmatik cihazlarla uyumsuz .

En sağlam - JS ile dokunuşu algıla ve CSS'nin başına ekle: fareyle üzerine gelme kuralları

Bu yöntemin tüm fareyle üzerine gelme kurallarının başına eklenmesi gerekir body.hasHover. (veya seçtiğiniz bir sınıf adı)

body.hasHover a:hover { color: blue; }

hasHoverSınıf kullanılarak ilave edilebilir hasTouch()birinci örnekten elde edilen:

if (!hasTouch()) document.body.className += ' hasHover'

Bununla birlikte, bu, önceki örneklerle karışık dokunmatik cihazlarla aynı dezavantajlara sahip olabilir, bu da bizi nihai çözüme getirir. Fare imleci her hareket ettirildiğinde fareyle üzerine gelme efektlerini etkinleştir, dokunuş algılandığında fareyle üzerine gelme efektlerini devre dışı bırak.

function watchForHover() {
  // lastTouchTime is used for ignoring emulated mousemove events
  let lastTouchTime = 0

  function enableHover() {
    if (new Date() - lastTouchTime < 500) return
    document.body.classList.add('hasHover')
  }

  function disableHover() {
    document.body.classList.remove('hasHover')
  }

  function updateLastTouchTime() {
    lastTouchTime = new Date()
  }

  document.addEventListener('touchstart', updateLastTouchTime, true)
  document.addEventListener('touchstart', disableHover, true)
  document.addEventListener('mousemove', enableHover, true)

  enableHover()
}

watchForHover()

Bu temelde herhangi bir tarayıcıda çalışmalı ve gerektiğinde fareyle üzerine gelme stillerini etkinleştirir / devre dışı bırakır.

İşte tam örnek - modern: https://jsfiddle.net/57tmy8j3/
Eski (eski tarayıcılarla kullanım için): https://jsfiddle.net/dkz17jc5/19/


Teşekkür ederim! Sadece bir yorum: document.styleSheetsKullanmak yerine ilk olup olmadığını kontrol etmek daha iyi olmaz mıydı try/catch?
Simon Ferndriger

1
try/catchSadece bazı tek bir hata ortaya çıktığında, aynı kökeni politikası veya IE üzerinde lapa lapa desteği nedeniyle deleteRule çalışmıyor gibi beti çökebilir durumda kullandım (yorum yansıtmak için yorum düzenledi). Ancak, çoğu durumda, sadece basit bir kontrol yeterli olmalıdır.
bıçak

1
Firefox dahil masaüstü tarayıcılarının 'notouch' ile sonuçlanmayacağını belirtmek gerekir. Dokunma olaylarını anladıklarını bildiriyorlar.
Harry B

3
Bu çözüm, fareyle üzerine
gelindiğinde

2
@Hanayeviniz için olmasa da çoğu durumda doğrudur. Kuralınızı çalıştırmanız koda çok fazla karmaşıklık katacaktır ve bu da cevabın anlaşılmasını zorlaştıracaktır. Ben ya kuralları bölmek ya da zaten daha sağlam olan 2. çözümü kullanmanızı öneririm. Ancak, ilk çözümü çok karmaşık hale getirmeden geliştirebiliyorsanız, bir düzenleme önerebilirsiniz.
bıçak

43

Kurtarmaya işaretçi adaptasyonu !

Bu bir süredir dokunulmadığından şunları kullanabilirsiniz:

a:link {
   color: red;
}

a:hover {
   color:blue;
}

@media (hover: none) {
   a:link {
      color: red;
   }
}

Bu demosunu hem masaüstü tarayıcınızda hem de telefon tarayıcınızda görün . Modern dokunmatik cihazlar tarafından desteklenir .

Not : Surface PC'nin birincil girişi (yeteneği) bir fare olduğundan, ayrılmış (tablet) bir ekran olsa bile mavi bir bağlantı olacağını unutmayın. Tarayıcılar her zaman en hassas girdinin kapasitesini varsayılan olarak ayarlamalıdır (yapmalıdır).


Teşekkürler, bu uygun olurdu! Ancak, mobil modda Chrome ile denedim, ancak işe yaramadı - "dokunduğumda" yine de mavi oldu ...
Simon Ferndriger

1
@SimonFerndriger Bu, Chrome cihazlarının yalnızca bir sınırlamasıdır. Bağlantıyı gerçek bir dokunmatik cihazda açmayı deneyin.
Jason T Featheringham

1
İPad Chrome / Safari'de ve OS X Chrome / Safari'de mükemmel çalışma. Teşekkürler! Sonunda böyle küçük bir görsel sorun için istediğiniz zarif çözüm.
rakaloof

3
Bunu iOS 11 çalıştıran gerçek iPhone 6S'ımda denedim ve bağlantı mavileşti.
Lukas Petr

1
Ayrıca Android 8.1.0 ve Chrome 68.0.3440.91 çalıştıran Nexus 5X ile bunu denedi. Bağlantı maviye döndü.
Trevin Avery

12

Aynı problemle karşılaştım (Samsung mobil tarayıcılarda benim durumum) ve bu nedenle bu soru üzerine tökezledim.

Calsal'ın cevabı sayesinde, neredeyse tüm masaüstü tarayıcılarını hariç tutacağına inandığım bir şey buldum çünkü denediğim mobil tarayıcılar tarafından tanınıyor gibi görünüyor (derlenmiş bir tablodan ekran görüntüsüne bakın: CSS işaretçi özellik algılama tablosu ).

MDN web dokümanları ,

İşaretçi CSS @ medya özelliği, kullanıcının birincil giriş mekanizmasının bir işaretleme aygıtı olup olmadığına ve eğer öyleyse ne kadar doğru olduğuna bağlı olarak stil uygulamak için kullanılabilir

.

Ne keşfettim o işaretçi: kaba bağlı tablodaki tüm masaüstü tarayıcılar tarafından bilinmeyen ama aynı tablodaki tüm mobil tarayıcılar tarafından bilinen bir şeydir. Bu, diğer tüm işaretçi anahtar kelime değerleri tutarsız sonuçlar verdiği için en etkili seçim olarak görünmektedir.

Böylece, Calsal gibi açıklanan ancak biraz değiştirilmiş bir medya sorgusu oluşturabilirsiniz . Tüm dokunmatik cihazları devre dışı bırakmak için ters mantık kullanır.

Sass karışımı:

@mixin hover-supported {    
    /* 
     * https://developer.mozilla.org/en-US/docs/Web/CSS/@media/pointer 
     * coarse: The primary input mechanism includes a pointing device of limited accuracy.
     */
    @media not all and (pointer: coarse) {
        &:hover {
            @content;
        }
    }
}

a {
    color:green;
    border-color:blue;

    @include hover-supported() {
        color:blue;
        border-color:green;
    }
}

Derlenmiş CSS:

a {
  color: green;
  border-color: blue;
}
@media not all and (pointer: coarse) {
  a:hover {
    color: blue;
    border-color: green;
  }
}

Sorunu araştırdıktan sonra oluşturduğum bu özette de açıklanıyor . Ampirik araştırma için kodlama .

GÜNCELLEME : Bu güncellemeyi yazarken, 2018-08-23 ve @DmitriPavlutin tarafından işaret edilen bu teknik artık Firefox masaüstü ile çalışmıyor gibi görünüyor.


Teşekkürler @DmitriPavlutin, tabloya göre (derlendiğinde) gerekir, ama başka bir görünüm alabilir.
ProgrammerPer

@DmitriPavlutin Gerçekten haklısın. Cevabı güncelleyecek
ProgrammerPer

1
Sadece dokunmatik bir cihazla kullanıldığında Firefox Masaüstü'nde çalışmadığını mı söylüyorsunuz? Denediğim her şeyde harika çalışıyor.
FuzzeeLowgeek

@FuzzeeLowgeek Kulağa hoş geliyor! En son kontrol ettiğimde 2018-08-23 idi, bu yüzden bunu kesin olarak onaylayabilirsen, belki cevabı tekrar güncelleyebilirim?
ProgrammerPer

9

Jason'ın cevabına göre, yalnızca fareyle üzerine gelindiğinde salt css medya sorgularıyla desteklenmeyen cihazları ele alabiliriz. Moogal'in benzer bir sorudaki cevabı gibi, sadece fareyle üzerine gelmeyi destekleyen cihazları da ele alabiliriz @media not all and (hover: none). Tuhaf görünüyor ama işe yarıyor.

Daha kolay kullanım için bundan bir Sass karışımı yaptım:

@mixin hover-supported {
    @media not all and (hover: none) {
        &:hover {
            @content;
        }
    }
}

Güncelleme 2019-05-15 : CSS ile hedefleyebileceğimiz tüm farklı cihazlardan geçen bu makaleyi Medium'dan öneriyorum . Temel olarak bu medya kurallarının bir karışımıdır, belirli hedefler için birleştirir:

@media (hover: hover) {
    /* Device that can hover (desktops) */
}
@media (hover: none) {
    /* Device that can not hover with ease */
}
@media (pointer: coarse) {
    /* Device with limited pointing accuracy (touch) */
}
@media (pointer: fine) {
    /* Device with accurate pointing (desktop, stylus-based) */
}
@media (pointer: none) {
    /* Device with no pointing */
}

Belirli hedefler için örnek:

@media (hover: none) and (pointer: coarse) {
    /* Smartphones and touchscreens */
}

@media (hover: hover) and (pointer: fine) {
    /* Desktops with mouse */
}

Mixins'i seviyorum, hover miksimi yalnızca onu destekleyen cihazları hedeflemek için bu şekilde kullanıyorum:

@mixin on-hover {
    @media (hover: hover) and (pointer: fine) {
        &:hover {
            @content;
        }
    }
}

button {
    @include on-hover {
        color: blue;
    }
}

hiç işe yaramıyor. Fareyle üzerine gelindiğinde: Fareyle üzerine gelindiğinde desteklenen bir mixin için medya sorgusunda hiç yok mu? burada diğer cevaba göre işaretçi: kaba gerekir.
Allan Nienhuis

Hatta denediniz mi, yoksa garip göründüğü için işe yaramadığını mı söylüyorsunuz? Bu yüzden "Tuhaf görünüyor" yazdım .. Ve işaretçi olmadan benim için çalışıyor: kaba.
Calsal

OnePlus 5T'de (hem Chrome'da hem de Firefix'te) CSS yaklaşımıyla bazı tutarsız sonuçlar aldım. Bu iOS'ta iyi çalıştı, ancak OnePlus'ta çalışamadım. Herhangi bir işaretçi ve fareyle üzerine
gelindiğinde

6

Şu anda benzer bir sorunla ilgileniyorum.

Hemen benim başıma gelen iki ana seçenek vardır: (1) kullanıcı dizesi denetimi veya (2) farklı bir URL kullanarak ayrı mobil sayfaların bakımı ve kullanıcıların kendileri için neyin daha iyi olduğunu seçmelerini sağlamak.

  1. PHP veya Ruby gibi bir İnternet koli bandı dili kullanabiliyorsanız, sayfa isteyen cihazın kullanıcı dizesini kontrol edebilir ve aynı içeriği <link rel="mobile.css" />normal stil yerine sunabilirsiniz .

Kullanıcı dizeleri tarayıcı, oluşturucu, işletim sistemi vb. İle ilgili tanımlayıcı bilgilere sahiptir. Bu bilgileri bir yerde bulabilir ve sisteminize eşleyebilirsiniz.

C. Eski tarayıcıları yoksaymanıza izin verilirse , normal, mobil olmayan css'ye tek bir kural eklemeniz yeterlidir: DÜZENLEME : Erk. Bkz - Bazı deneyler yaptıktan sonra, ben kural altına da sadece engelli olmaya estetik etkilere neden yanında webkit-tarayıcılarda bağlantıları takip yeteneği devre dışı bırakır keşfetti http://jsfiddle.net/3nkcdeao/
sen gerekecek Gibi mobil durumun kurallarını burada gösterdiğimden nasıl değiştirdiğiniz konusunda biraz daha seçici olmak, ancak yararlı bir başlangıç ​​noktası olabilir:

* { 
    pointer-events: none !important; /* only use !important if you have to */
}

Bir sidenote olarak, bir üst öğedeki işaretçi olaylarını devre dışı bırakmak ve daha sonra bir alt öğe üzerinde açıkça etkinleştirmek, bir alt öğe girildiğinde üst öğedeki herhangi bir fareyle üzerine gelme efektinin yeniden etkinleşmesine neden olur :hover.
Bkz. Http://jsfiddle.net/38Lookhp/5/

B. Eski web oluşturucuları destekliyorsanız, sırasında özel stiller oluşturan kuralları kaldırma satırlarında biraz daha fazla iş yapmanız gerekir :hover. Herkesin zamanından tasarruf etmek için, yalnızca mobil sürümleri oluşturmak için standart stil sayfalarınızda çalıştırdığınız otomatik bir kopyalama + seding komutu oluşturmak isteyebilirsiniz . Bu, standart kodu yazmanıza / güncellemenize ve :hoversayfalarınızın mobil sürümü için kullanılan stil kurallarını temizlemenize olanak tanır .

  1. (I) Alternatif olarak, kullanıcılarınızı web sitenize ek olarak mobil cihazlar için bir m.website.com'a sahip olduğunuzu bilmelerini sağlayın . Alt alan adı oluşturma en yaygın yöntem olsa da, mobil kullanıcıların değiştirilen sayfalara erişmesine izin vermek için belirli bir URL'de öngörülebilir başka bir değişiklik de yapabilirsiniz. Bu aşamada, sitenin başka bir bölümüne her gittiklerinde URL'yi değiştirmek zorunda olmadıklarından emin olmak istersiniz.

Yine burada, stil sayfalarına fazladan bir veya iki kural ekleyebilir veya sed veya benzer bir yardımcı program kullanarak biraz daha karmaşık bir şey yapmak zorunda kalabilirsiniz . Muhtemelen uygulamak en kolay olurdu: CSS munging yerine js veya sunucu dili kullanan mobil kullanıcılar için sinir bozucu şeyler yapan öğelere div:not(.disruptive):hover {...ekleyeceğiniz gibi stil kurallarınıza değil class="disruptive".

  1. (II) Aslında ilk ikisini birleştirebilir ve (bir kullanıcının bir sayfanın yanlış sürümüne gittiğinden şüpheleniyorsanız) mobil türdeki ekrana geçip çıkmasını veya yalnızca bir yerlerde bir bağlantıya sahip olmasını önerebilirsiniz. kullanıcıların ileri geri flop yapmasını sağlar. Daha önce de belirtildiği gibi, @media sorguları, ziyaret etmek için ne kullanıldığını belirlemede de faydalı görünebilir.

  2. (III) Hangi cihazların "dokunma" olduğunu ve hangilerinin olmadığını öğrendikten sonra jQuery çözümüne hazırsanız , dokunmatik ekranlı cihazlarda CSS imlecinin göz ardı edilmemesini yararlı bulabilirsiniz.


pointer-events- bu inanılmaz! Tam da aradığım şey bu, çok teşekkürler!
Simon Ferndriger

1
@SimonFerndriger Umarım ileride yardımcı olur. Bugüne kadar, <a>bağlantılara erişilemeyebileceğine dikkat edin pointer-events:none. Herhangi bir şansla, bu daha sonra değişecektir - veya CSS 3.x veya 4.0+ pointer-events:navigation-onlyveya benzeri olacaktır .
SeldomNeedy

6

bunu dene:

@media (hover:<s>on-demand</s>) {
    button:hover {
        background-color: #color-when-NOT-touch-device;
    }
}

GÜNCELLEME: maalesef W3C bu özelliği teknik özelliklerden kaldırdı ( https://github.com/w3c/csswg-drafts/commit/2078b46218f7462735bb0b5107c9a3e84fb4c4b1 ).


Bu gerçekten problemi çözecektir. Bunu daha önce hiç duymamıştım. Bunun hangi tarayıcı sürümünde çalışması gerekiyor?
Simon Ferndriger


İyi ... Geniş bir tarayıcı desteği yok.
Giacomo Paita

Çok havalı! Böyle uygun bir çözüm için teşekkür ederim. Umarım W3C standartlarına eklenir.
GProst

sevindim ^ ^
Marouen Mhiri

5

Modernizr JS'yi kullanabilir (ayrıca bu StackOverflow cevabına da bakınız ) veya özel bir JS işlevi yapabilirsiniz:

function is_touch_device() {
 return 'ontouchstart' in window        // works on most browsers 
  || navigator.maxTouchPoints;       // works on IE10/11 and Surface
};

if ( is_touch_device() ) {
  $('html').addClass('touch');
} else {
  $('html').addClass('no-touch');
} 

için dokunmatik desteğini algılar tarayıcıda olay ve ardından düzenli atamak CSSile eleman geçme, mülk html.no-touchböyle, sınıf:

html.touch a {
    width: 480px;
}

/* FOR THE DESKTOP, SET THE HOVER STATE */
html.no-touch a:hover {
   width: auto;
   color:blue;
   border-color:green;
}

Bu, @blade tarafından da önerildi - ancak htmletiketi yerine etiketi kullanmak bodyokumayı biraz daha iyi hale getirebilir. Aslında şu anda kullandığım çözüm bu. Yine de teşekkürler.
Simon Ferndriger

1

Benim için yararlı oldu: link

function hoverTouchUnstick() {
    // Check if the device supports touch events
    if('ontouchstart' in document.documentElement) {
        // Loop through each stylesheet
        for(var sheetI = document.styleSheets.length - 1; sheetI >= 0; sheetI--) {
            var sheet = document.styleSheets[sheetI];
            // Verify if cssRules exists in sheet
            if(sheet.cssRules) {
                // Loop through each rule in sheet
                for(var ruleI = sheet.cssRules.length - 1; ruleI >= 0; ruleI--) {
                    var rule = sheet.cssRules[ruleI];
                    // Verify rule has selector text
                    if(rule.selectorText) {
                        // Replace hover psuedo-class with active psuedo-class
                        rule.selectorText = rule.selectorText.replace(":hover", ":active");
                    }
                }
            }
        }
    }
}

1

Bu da olası bir çözümdür, ancak .no-touchfareyle üzerine gelmeniz ve fareyle üzerine gelme stillerinizden önce bir sınıf eklemeniz gerekir.

JavaScript:

if (!("ontouchstart" in document.documentElement)) {
document.documentElement.className += " no-touch";
}

CSS Örneği:

<style>
p span {
    display: none;
}

.no-touch p:hover span {
    display: inline;
}
</style>
<p><a href="/">Tap me</a><span>You tapped!</span></p>

Kaynak

Ps Ama hatırlamalıyız, aynı zamanda fare girişini de destekleyen piyasaya giderek daha fazla dokunmatik cihaz geliyor.


0

Bu henüz mükemmel bir çözüm olmayabilir (ve jQuery ile birlikte) ama belki de üzerinde çalışmak için bir yön / kavram: başka bir şekilde yapmaya ne dersiniz? Yani: hover css durumlarını varsayılan olarak devre dışı bırakmak ve belgenin herhangi bir yerinde bir mousemove olayı algılanırsa bunları etkinleştirmek anlamına gelir. Tabii bu js devre dışı bırakılmışsa bu işe yaramaz. Bunu bu şekilde yapmaya karşı başka neler konuşabilir?

Belki şöyle:

CSS:

/* will only work if html has class "mousedetected" */
html.mousedetected a:hover {
   color:blue;
   border-color:green;
}

jQuery:

/* adds "mousedetected" class to html element if mouse moves (which should never happen on touch-only devices shouldn’t it?) */
$("body").mousemove( function() {
    $("html").addClass("mousedetected");
});

1
Bir sorun, aslında dokunmatik cihazlarda bir şeye tıklarken bunun da .mousemove () olmasıdır.
lars at

1
Ve muhtemelen bu olayı kesintisiz olarak tetikleyeceksiniz, böylece performans üzerinde bir etkisi olacak. Bu işe yarayacaksa, daha iyi kullanmalısınız$('body').one.('mousemove', ...)
Simon Ferndriger 10:30 '

0

Bunu deneyin (bu örnekte arka plan ve arka plan rengi kullanıyorum):

var ClickEventType = ((document.ontouchstart !== null) ? 'click' : 'touchstart');

if (ClickEventType == 'touchstart') {
            $('a').each(function() { // save original..
                var back_color = $(this).css('background-color');
                var background = $(this).css('background');
                $(this).attr('data-back_color', back_color);
                $(this).attr('data-background', background);
            });

            $('a').on('touchend', function(e) { // overwrite with original style..
                var background = $(this).attr('data-background');
                var back_color = $(this).attr('data-back_color');
                if (back_color != undefined) {
                    $(this).css({'background-color': back_color});
                }
                if (background != undefined) {
                    $(this).css({'background': background});
                }
            }).on('touchstart', function(e) { // clear added stlye="" elements..
                $(this).css({'background': '', 'background-color': ''});
            });
}

css:

a {
    -webkit-touch-callout: none;
    -webkit-tap-highlight-color: transparent;
    -webkit-user-select: none;
    -khtml-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
}

0

Kirli yol ... Zarif değil, ama seni kurtarabilecek en kolay yol.

Fareyle üzerine gelme özelliğini belirten her şeyi kaldırın.

.your-class:hover:before {
  color: blue;
  background: linear-gradient(to bottom, rgba(231,56,39,0) 0%, #aaaaaa 100%);
}

@media all and (min-width:320px) and (max-width: 960px) {
    .your-class:hover:before {
    color: black;
    background: transparent;
  }
}

0

Sorununuz, android'e ve mavi şeffaf renkle kaplı tüm div'a dokunduğunuzda / dokunduğunuzda! O zaman sadece

CURSOR: POINTER; CURSOR'a: VARSAYILAN;

cep telefonu / Tablet gizlemek için mediaQuery kullanın.

Bu benim için çalışıyor.


-1

Bir süredir olmasına rağmen bu kolay 2019 jquery çözümünü deneyin;

  1. bu eklentiyi başlığa ekle:

    src = "https://code.jquery.com/ui/1.12.0/jquery-ui.min.js"

  2. bunu js'e ekle:

    $ ("*"). on ("dokunuş", işlev (e) {$ (this) .focus ();}); // tüm elemanlar için geçerlidir

  3. buna önerilen bazı varyasyonlar:

    $ (": input,: checkbox,"). on ("touchend", işlev (e) {(this) .focus);}); // öğeleri belirtin

    $ ("*"). on ("tıklayın, dokunun", işlev (e) {$ (this) .focus ();}); // tıklama etkinliğini dahil et

    css: gövde {imleç: işaretçi; } // bir odağı sonlandırmak için herhangi bir yere dokunun

notlar

  • araç ipuçlarını etkilemekten kaçınmak için eklentiyi bootstrap.js'den önce yerleştirin
  • yalnızca Safari veya Chrome kullanılarak iphone XR ios 12.1.12 ve ipad 3 ios 9.3.5'te test edildi.

Referanslar:

https://code.jquery.com/ui/

https://api.jquery.com/category/selectors/jquery-selector-extensions/


2
2019'da jQuery kullanmanıza gerek yok - WebAPI oldukça güçlü ve tüm önemli özellikleri destekliyor.
acme

Ya ... 2019'da jQuery? Flash'a ne dersin? Hehehe.
remed.io
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.