Ausrichtung position:sticky Elemente, die momentan in einem 'hängen' Zustand
position: sticky funktioniert auf einigen mobilen Browsern nun, so können Sie eine Menüleiste scrollen mit der Seite, aber dann kleben Sie an die Spitze des Viewports, wenn der Benutzer scrollt es.
Aber was, wenn Sie wollen, restyle Ihrem sticky menu bar leicht, wenn es derzeit "Hängenbleiben"? zB, möchten Sie vielleicht die Leiste an den Ecken abgerundet, Wann immer es das scrollen mit der Seite, aber dann, sobald es klebt an der Spitze des Viewports, die Sie wollen, um loszuwerden, oben abgerundete Ecken, und fügen Sie ein wenig Schatten unter ihm.
Gibt es irgendeine Art von pseudoselector (z.B. ::stuck
), Ziel-Elemente, die position: sticky
und sind derzeit kleben? Oder haben browser-Anbieter haben so etwas in der pipeline? Wenn nicht, wo soll ich es beantragen?
NB. javascript-Lösungen sind nicht gut für das, weil auf der mobilen Sie in der Regel nur einen einzigen scroll
Ereignis, wenn der Benutzer entlässt Ihre finger, so dass JS nicht wissen können, den genauen Zeitpunkt, dass die scroll-Schwelle überschritten.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Derzeit gibt es keine Auswahl, wird vorgeschlagen, für Elemente, die derzeit "stecken". Die Postioned-Layout-Modul wo
position: sticky
definiert ist, nicht erwähnt, das solche Selektor entweder.Feature-requests für CSS gebucht werden können, um die www-Stil-mailing-Liste. Ich glaube, dass ein
:stuck
pseudo-Klasse mehr Sinn macht, als ein::stuck
pseudo-element, da bist du auf der Suche zum Ziel, die Elemente selbst, während Sie in diesem Zustand. In der Tat, ein:stuck
pseudo-Klasse wurde besprochen,vor einiger Zeit; die wichtigste Komplikation, es war gefunden, ist eine, die plagen nur über eine vorgeschlagene Auswahl, die versucht, basierend auf einer gerenderten oder berechneten Stil: zirkuläre Abhängigkeiten.Im Falle einer
:stuck
pseudo-Klasse, der einfachste Fall von zirkularität auftreten würde, mit den folgenden CSS:Und es könnten viele weitere edge-Fälle, die schwierig sein würde, zu behandeln.
Während es in der Regel vereinbart, dass-Auswahlen, Spiel, basierend auf bestimmten layout-Staaten wäre schön, leider wesentliche Einschränkungen vorhanden sind, dass diese nicht-trivial zu implementieren. Ich würde nicht meinen Atem halten für eine Reine CSS Lösung für dieses problem in absehbarer Zeit.
position
Eigenschaften auf einen:stuck
Selektor ignoriert werden sollte? (in der Regel für die Hersteller von Browsern, meine ich, ähnlich zu Regeln, wieleft
Vorrang vorright
etc)):stuck
dass Veränderungen dertop
Wert von0
zu300px
, dann scrollen Sie nach unten150px
... sollte es bleiben oder nicht? Oder denken Sie über ein element mitposition: sticky
undbottom: 0
wo die:stuck
vielleicht ändertfont-size
und deshalb der Elemente Größe (daher die änderung der moment, in dem es haften sollten)...while
Zyklus ist schlecht konzipiert ist, weil es erlaubt endlosen Schleife 🙂 Aber danke für die Klärung 😉:hover{display:none;}
ich bin mir sicher, dass moderne Browser wird nicht explodieren, mit:stuck{position:static;}
<div>
(statt<li>
) innerhalb<ul>
ist kein Grund, Sie zu verwerfen, listet alle zusammen, ist es?:stuck{position:static}
- so soll es sein. Sollte es nicht trotzdem passieren, die Menschen wollen einfach nur das :stecken, setzen box-shadow oder ändern Sie ein element, indem Sie die überprüfung.is(':stuck')
aufscroll
Veranstaltung.Nicht wirklich ein fan der Verwendung von js-hacks für styling-Zeug (ie getBoudingClientRect, Blättern Zuhören, die Größe hören), aber das ist wie ich bin gerade auf die Lösung des Problems. Diese Lösung haben Probleme mit Seiten, die minimizable/maximizable-Inhalt (<details>), oder geschachtelten Blättern, oder wirklich jede Kurve Bälle zu löschen. , Die being said, es ist eine einfache Lösung, wenn das problem ist einfach wie gut.
In einigen Fällen kann ein einfacher
IntersectionObserver
kann den trick tun, wenn die situation es erlaubt, zum Aufkleben auf ein oder zwei pixel, die sich außerhalb seiner Stamm-container, anstatt richtig bündig an. So, wenn es sitzt genau über die Kante, die der Betrachter feuert und wir sind Weg und ausgeführt.Kleben Sie das element nur aus seinem Behälter mit
top: -2px
, und dann den Gegner über diestuck
Attribut...Beispiel hier: https://codepen.io/anon/pen/vqyQEK
Jemand auf der Google-Entwickler-blog Ansprüche gefunden zu haben, der eine performative JavaScript-basierte Lösung mit einem IntersectionObserver.
Relevanten code bit hier:
Ich noch nicht repliziert wurden, es selbst, aber vielleicht hilft es ja jemand stolpern über diese Frage.