Media query für Geräte, die schweben
Ich würde gerne verschiedene Verhalten für Browser, die Unterstützung von hover (z.B. desktop-Browser), und diejenigen, die nicht (z.B. touchscreen-Geräte). Speziell möchte ich erklären, einen hover-Status auf Browsern, die es unterstützen, aber nicht für Browser, die nicht, um so zu vermeiden, dass die mobilen Browser emulieren, mit extra Wasserhähne, da diese Pausen anderen Interaktionen auf der Seite - indem Sie nicht die Definition einer hover-Zustand für diejenigen Browser, die diese vermieden wird.
Ich gelesen habe, bis auf die Interaktion Medien-Anfragen Funktion und es sieht aus wie Sie es tun sollten, die trick. Ich würde in der Lage sein, etwas zu tun:
@media (hover: none) {
/* behaviour for touch browsers */
}
Laut CanIUse es ist auf allen Browsern, die ich unterstützen muss außer IE11 und Firefox.
So, ich fragte mich, ob ich es tun konnte, die andere Weise herum - da die wichtigsten touch-Geräten, die alle unterstützen, dann negieren:
@media not (hover: none) {
/* behaviour for desktop browsers */
}
Jedoch, dies scheint nicht, überhaupt zu arbeiten.
Pseudocode Beispiel, was ich versuche zu tun:
.myelement {
/* some styling */
/* note: no hover state here */
}
@media(this device supports hover) {
.myelement:hover {
/* more styling */
}
}
So, gibt es eine Möglichkeit, diese Arbeit zu machen in der Art gedacht, oder bin ich auf der falschen Spur?
InformationsquelleAutor moogal | 2016-11-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
not
sollten Präfix Medientyp (screen, print, usw), und nicht der media-Funktion (bewegen Sie die Maus, Punkt, etc).Falsch:
Richtig:
Ja, seine unintuitive und seltsam. Quelle (siehe Kommentare).
So dass Sie nicht brauchen javascript, um alternativen Ergebnis der media-query.
Toller trick! Beachten Sie, dass nur IE11 erscheint, ignorieren Sie diese Regel insgesamt. Mit einem anderen IE-spezifische Hacks, es erscheint der folgende funktioniert (obwohl es das negierte version der workaround):
@media not all and (hover: none), (-ms-high-contrast: none) {
Weder
@media (hover: none)
noch die negation@media not all and (hover: none)
nichts in Firefox. Dieser browser unterstützt keine hover - bugzilla.mozilla.org/show_bug.cgi?id=1035774, aber sollte es nicht eine Art zu schreiben dienot
so dass, wenn der Gegenstand dernot
ist nicht definiert/nicht erkannte, dann ist es zu false ausgewertet wird (und die gesamte Medien-Abfrage als true ausgewertet wird)?haben Sie jemals herausfinden? Ich Frage mich, die gleiche Sache.
not (hover: none)
ist nicht, oder zumindest nicht mehr falsch. Es ist korrekt, laut Media-Querys 4. Es ist einfach nicht unterstützt von jeder browser noch, frustrierend. Siehe stackoverflow.com/questions/24455958/...InformationsquelleAutor artin
Aus den specs:
Wenn Ihr browser (mobile/touch) unterstützt lange drücken, um zu simulieren, hover, die Verwendung von
hover: none
wird nicht funktionieren. Was Sie tun können ist, verwenden Sie einfach ein Standard-Wert und überschreiben Sie es (mit Standard-css-Rangfolge):Desktop haben
blue
hintergrund und mobile/touch habenred
hintergrundÜberprüfen Sie das folgende Beispiel:
https://jsfiddle.net/mcy60pvt/1/
Überprüfen, die durch langes drücken auf die option mobile können Sie in diesem Beispiel:
https://jsfiddle.net/mcy60pvt/3/
Im obigen Beispiel der grüne block hat
:hover
definition für beides, desktop und mobile, allerdings für desktop-hintergrund wird sich ändern, umyellow
und für mobile (mit lang drücken) Wechselwhite
.Hier ist der css-Code für das Letzte Beispiel:
In diesem Beispiel - Browser, die nicht unterstützen
:hover
wird um die schweben mir box mit grünem hintergrund, und zwar "schweben" (touch - /long-press) - der hintergrund wechselt zu weiß.update
Als für die zusätzlichen pseudo-code:
warum nicht? Wenn Sie nicht unterstützen, hove, die Medien, die Sie erhalten hintergrund
green
(es sei denn, Sie fügen Sie eine neue Hintergrundfarbe innerhalb derhover: hover
Teil).Ich ' ll fügen Sie es zu der Antwort, 1 minute
Ich habe ein Beispiel auf die Frage versuchen zu klären. Die Idee wäre, dass ein hover-Zustand ist nur erklärt für die Browser, die Unterstützung schweben, so dass die mobilen Browser nicht versuchen, zu emulieren.
Ok, das ist also ein bisschen eine andere Frage. Es ist wie zu Fragen "wie kann ich mit css4 tricks mit Browsern, die nur Unterstützung für css3?" 🙂 gut, meist können Sie nicht. Wenn Firefox ignoriert die
hover:hover
definition - Sie haben nicht wirklich etwas, das man machen kann (rein css). Sie können javascript verwenden, um Sie auf Klasse hinzufügen, um diebody
- element und css basierend auf dieser Klasse (ist-firefox,-Unterstützung,-schweben,-mobile, etc...)InformationsquelleAutor Dekel
Dank Dekel der Kommentare, die ich lösen dies, indem Sie die Logik in JS und die Anwendung einer Klasse statt:
z.B.
Dann im stylesheet:
Ich habe getestet dieses auf dem desktop Chrome, Safari und Firefox und iOS-Safari und es funktioniert wie erwartet.
Sehr kluge Antwort. Gute Sachen
InformationsquelleAutor moogal
Laut Artins Antwort wir können die Adresse nur mit Geräten, die schweben mit reinem css, mit
@media not all and (hover: none)
. Es sieht komisch aber es funktioniert.Machte ich ein Sass mixin hat sich für eine einfachere Nutzung:
Folgende würde sich ändern, Hintergrundfarbe (background-color
.container
von rot auf blau auf hover für Geräte mit Unterstützung der hover-keine änderung bei Geräten mit Touchscreen:InformationsquelleAutor Calsal