Ich war ein bisschen dabei und dachte, ich würde dieses position: sticky
+ Flexbox-Gotcha teilen :
Mein klebriger Div funktionierte einwandfrei, bis ich meine Ansicht auf einen Flexbox-Container umstellte, und plötzlich war der Div nicht mehr klebrig, als er in einen Flexbox-Elternteil eingewickelt wurde.
.flexbox-wrapper {
display: flex;
height: 600px;
}
.regular {
background-color: blue;
}
.sticky {
position: -webkit-sticky;
position: sticky;
top: 0;
background-color: red;
}
<div class="flexbox-wrapper">
<div class="regular">
This is the regular box
</div>
<div class="sticky">
This is the sticky box
</div>
</div>
css
flexbox
css-position
sticky
BHOLT
quelle
quelle
position: sticky
oder nur in einem / einigen?Antworten:
Da Flexbox-Elemente standardmäßig aktiviert sind
stretch
, haben alle Elemente dieselbe Höhe, über die nicht gescrollt werden kann.Durch Hinzufügen
align-self: flex-start
zum klebrigen Element wurde die Höhe auf "Automatisch" gesetzt, wodurch ein Bildlauf möglich war, und es wurde behoben.Derzeit wird dies in allen gängigen Browsern unterstützt, aber Safari steht immer noch hinter einem
-webkit-
Präfix, und andere Browser außer Firefox haben einige Probleme mitposition: sticky
Tabellen.JSFiddle zeigt die Lösung
quelle
flexbox
aber das Problem hat mehr mit dem Enthalten dessticky
Elements zu tun . Schauen Sie sich diese Geige an: jsfiddle.net/9y87zL5c, wo die ZWEITE rote Box wie erwartet funktioniert, die ERSTE rote Box jedoch nicht klebt - also ... dies hängt nicht mit der Flexbox zusammen (daher widersprüchliche Erwartungen) ... AUCH ... i fügte ein paar Jabberwocky hinzu, um die Ergebnisse genauer zu sehen.In meinem Fall wurde einer der übergeordneten Container darauf
overflow-x: hidden;
angewendet, wodurch dieposition: sticky
Funktionalität beeinträchtigt wird. Sie müssen diese Regel entfernen.Auf kein übergeordnetes Element sollte die obige CSS-Regel angewendet werden. Diese Bedingung gilt für alle Eltern bis zum Element "Körper" (jedoch ohne dieses).
quelle
overflow-x:hidden
auf dem HTML-Element haben.overflow-x: hidden;
auf dem HTML-Element haben.Sie können auch versuchen, dem Flex-Element ein untergeordnetes Div mit dem darin enthaltenen Inhalt hinzuzufügen und diesem zuzuweisen
position: sticky; top: 0;
.Das funktionierte für mich bei einem zweispaltigen Layout, bei dem der Inhalt der ersten Spalte klebrig sein musste und die zweite Spalte scrollbar erscheint.
quelle
Ich habe einen provisorischen Flexbox-Tisch gemacht und hatte dieses Problem. Um es zu lösen, platziere ich einfach die klebrige Kopfzeile außerhalb der Flexbox, kurz davor.
quelle