Ich habe eine Weile mit fester Positionierung im iPad zu kämpfen. Ich kenne iScroll und es scheint nicht immer zu funktionieren (selbst in ihrer Demo). Ich weiß auch, dass Sencha einen Fix dafür hat, aber ich konnte den Quellcode für diesen Fix nicht Ctrl+ F.
Ich hoffe, dass jemand die Lösung hat. Das Problem ist, dass fest positionierte Elemente nicht aktualisiert werden, wenn der Benutzer auf einer mobilen Safari mit iOS-Unterstützung nach unten / oben schwenkt.
Antworten:
Viele mobile Browser unterstützen dies absichtlich nicht
position:fixed;
, da feste Elemente auf einem kleinen Bildschirm stören könnten.Die Quirksmode.org-Website enthält einen sehr guten Blog-Beitrag, der das Problem erklärt: http://www.quirksmode.org/blog/archives/2010/12/the_fifth_posit.html
Auf dieser Seite finden Sie auch eine Kompatibilitätstabelle, die zeigt, welche mobilen Browser unterstützen
position:fixed;
: http://www.quirksmode.org/m/css.html(Beachten Sie jedoch, dass sich die Welt der mobilen Browser sehr schnell bewegt, sodass Tabellen wie diese möglicherweise nicht lange auf dem neuesten Stand bleiben!)
Update: iOS 5 und Android 4 sollen beide Position haben: Unterstützung jetzt behoben.
Ich habe iOS 5 heute selbst in einem Apple Store getestet und kann bestätigen, dass es mit fester Position funktioniert. Es gibt jedoch Probleme beim Vergrößern und Schwenken eines festen Elements.
Ich fand diese Kompatibilitätstabelle weitaus aktueller und nützlicher als die im Quirksmode: http://caniuse.com/#search=fixed
Es verfügt über aktuelle Informationen zu Android, Opera (Mini und Mobile) und iOS.
quelle
position:device-fixed
wäre irgendwie überflüssig.position:fixed
sollte nur nach W3C-Spezifikationen funktionieren.device-fixed
Lösung war nicht Teil meiner Antwort. Es kann als Vorschlag sinnvoll sein oder auch nicht, aber der Grund für den Link war eher die Erklärung des Problems als seine vorgeschlagene Lösung. Auf jeden Fall haben sich die Dinge seit der Veröffentlichung dieser Antwort sehr weiterentwickelt (wie ich bereits sagte), und viele neuere Geräte unterstützen diesfixed
. Sie müssen sich jedoch immer noch mit älteren Geräten befassen, die dies nicht tun.Die feste Positionierung funktioniert unter iOS nicht wie auf Computern.
Stellen Sie sich vor, Sie haben ein Blatt Papier (die Webseite) unter einer Lupe (dem Ansichtsfenster). Wenn Sie die Lupe und Ihr Auge bewegen, sehen Sie einen anderen Teil der Seite. So funktioniert iOS.
Jetzt gibt es eine durchsichtige Plastikfolie mit einem Wort darauf, diese Plastikfolie bleibt stationär, egal was passiert (die Position: feste Elemente). Wenn Sie also die Lupe bewegen, scheint sich das feste Element zu bewegen.
Anstatt die Lupe zu bewegen, bewegen Sie alternativ das Papier (die Webseite), wobei die Plastikfolie und die Lupe ruhig bleiben. In diesem Fall scheint das Wort auf der Plastikfolie fest zu bleiben, und der Rest des Inhalts scheint sich zu bewegen (weil es tatsächlich so ist). Dies ist ein traditioneller Desktop-Browser.
In iOS wird das Ansichtsfenster verschoben, in einem herkömmlichen Browser wird die Webseite verschoben. In beiden Fällen bleiben die festen Elemente in der Realität erhalten; obwohl unter iOS die festen Elemente sich zu bewegen scheinen.
Um dies zu umgehen, folgen Sie den letzten Absätzen in diesem Artikel
(Deaktivieren Sie das Scrollen im Grunde genommen vollständig, lassen Sie den Inhalt in einem separaten scrollbaren Div (siehe das blaue Feld oben im verlinkten Artikel) und das feste Element absolut positionieren.)
"position: fixed" funktioniert jetzt wie in iOS5 erwartet.
quelle
Position: Fest funktioniert auf Android / iPhone für vertikales Scrollen. Sie müssen jedoch sicherstellen, dass Ihre Meta-Tags vollständig festgelegt sind. z.B
Auch wenn Sie vorhaben, dass dieselbe Seite unter Android vor 4.0 funktioniert, müssen Sie auch die oberste Position festlegen, da sonst aus irgendeinem Grund ein kleiner Rand hinzugefügt wird.
quelle
user-scalable=0, minimum-scale=1.0, maximum-scale=1.0
kann die Seite für viele Benutzer weniger zugänglich sein. Es wäre nützlich, eine Warnung darüber in Ihre Antwort aufzunehmenJetzt unterstützt Apple das
quelle
background-size: cover
undfixed
Ausgabe auf dem iPadoverflow
muss aufscroll
Ich hatte dieses Problem unter Safari (iOS 10.3.3) - der Browser wurde erst neu gezeichnet, als das Touchend-Ereignis ausgelöst wurde. Feste Elemente wurden nicht angezeigt oder wurden abgeschnitten.
Der Trick für mich war das Hinzufügen von transform: translate3d (0,0,0); zu meinem festen Positionselement.
BEARBEITEN - Ich weiß jetzt, warum die Transformation das Problem behebt: Hardwarebeschleunigung. Das Hinzufügen der 3D-Transformation löst die GPU-Beschleunigung aus und sorgt für einen reibungslosen Übergang. Weitere Informationen zur Hardwarebeschleunigung finden Sie in diesem Artikel: http://blog.teamtreehouse.com/increase-your-sites-performance-with-hardware-accelerated-css .
quelle
fixed
, das hinzugefügttransform
und dies wurde behoben.Feste Fußzeile (hier mit jQuery):
Ich hoffe es hilft.
quelle
Vermeiden Sie auf derselben Box mit transform: --- und position: fixed. Das Element bleibt in Position: statisch, wenn eine Transformation vorliegt.
quelle
Am Ende habe ich das neue jQuery Mobile v1.1 verwendet: http://jquerymobile.com/blog/2012/04/13/announcing-jquery-mobile-1-1-0/
quelle
position:fixed
Element vor Ihrer Bildlaufseite angezeigt wird, müssen Sie ihm nur einen höherenz-index
Wert geben, damit es vorne bleibt.Mit jquery kann ich mir das einfallen lassen. es rollt nicht glatt, aber es macht den Trick. Sie können nach unten scrollen und das feste Div wird oben angezeigt.
DAS CSS
DER HTML
DIE JQUERY
Schließlich möchten wir feststellen, ob sich der iPod im Quer- oder Hochformat berührt, um entsprechend angezeigt zu werden
quelle
Obwohl das CSS-Attribut
{position:fixed;}
(meistens) auf neueren iOS-Geräten zu funktionieren scheint, ist es möglich, dass das Gerät{position:relative;}
gelegentlich und ohne Grund oder Grund auf etwas zurückgreift und zurückfällt . Normalerweise hilft es, den Cache zu leeren, bis etwas passiert und die Eigenart wieder passiert.Insbesondere von Apple selbst Vorbereiten Ihres Webinhalts für das iPad :
Was ironisch ist, Android-Geräte scheinen dieses Problem nicht zu haben. Es ist auch durchaus möglich,
{position:absolute;}
in Bezug auf das Body-Tag zu verwenden und keine Probleme zu haben.Ich fand die Grundursache für diese Eigenart; dass es sich um das Scroll-Ereignis handelt, das in Verbindung mit dem HTML- oder BODY-Tag nicht gut abgespielt wird. Manchmal wird das Ereignis nicht gerne ausgelöst, oder Sie müssen warten, bis das Scroll-Swing-Ereignis beendet ist, um das Ereignis zu empfangen. Insbesondere wird das Ansichtsfenster am Ende dieses Ereignisses neu gezeichnet, und feste Elemente können an einer anderen Stelle im Ansichtsfenster neu positioniert werden.
Das mache ich also: ( Vermeiden Sie die Verwendung des Ansichtsfensters und bleiben Sie beim DOM! )
Im Wesentlichen führt dies dazu, dass der KÖRPER die Größe des Ansichtsfensters hat und nicht scrollbar ist. Der im Inneren verschachtelte scrollbare DIV scrollt wie der KÖRPER normalerweise (abzüglich des Swing-Effekts, sodass das Scrollen am Touchend stoppt). Der feste DIV bleibt ohne Störung fixiert.
Als Randnotiz ist ein hoher
z-index
Wert für den festen DIV wichtig, damit der scrollbare DIV dahinter zu bleiben scheint. Normalerweise füge ich Ereignisse zur Größenänderung und zum Scrollen von Fenstern hinzu, um die Kompatibilität zwischen Browser und alternativer Bildschirmauflösung zu gewährleisten.Wenn alles andere fehlschlägt, funktioniert der obige Code auch mit den festen und scrollbaren DIVs, die auf eingestellt sind
{position:absolute;}
.quelle
Die einfache Möglichkeit, dieses Problem zu beheben, besteht darin, die Transformationseigenschaft für Ihr Element einzugeben. und es wird behoben. Viel Spaß beim Codieren :-)
Sie können auch seinen Weg versuchen, dies funktioniert auch gut.
quelle
Dies gilt möglicherweise nicht für alle Szenarien, aber ich habe festgestellt, dass
position: sticky
(dasselbe mitposition: fixed
) nur auf alten iPhones funktioniert, wenn sich der Bildlaufcontainer nicht im Körper befindet, sondern in etwas anderem.Beispiel Pseudo-HTML:
Das Sticky Div wird in Desktop-Browsern klebrig sein, aber bei bestimmten Geräten, die getestet wurden mit: Chromium: dev tools: Geräteemultation: iPhone 6/7/8, und mit Android 4 Firefox nicht.
Was jedoch funktionieren wird, ist
quelle
In meinem Fall lag es daran, dass das feste Element mithilfe einer Animation angezeigt wurde. Wie in diesem Link angegeben :
quelle
Hier ist meine Lösung dafür ...
CSS
HTML
Die Erklärung ist, dass die für das Div festgelegte Position das Div jederzeit im Hintergrund hält. Dann strecken wir das Div so, dass es mit (links, rechts, oben, unten) in alle Ecken des Browsers (vorausgesetzt, der Körperrand = 0) geht ) gleichzeitig.
Bitte stellen Sie sicher, dass Sie nicht die Breite und Höhe verwenden, da dies die Optionen oben, links, rechts und unten überschreibt.
quelle