Warum ist `overflow:hidden` verhindern `position:sticky` arbeiten?
Wird im folgenden Codeausschnitt gezeigt, es gibt einen sticky div
positioniert innerhalb eines Containers. Es klebt an der Spitze der Bedienfeld mit Bildlauf während des Aufenthalts in seinem container die ganze Zeit. Dies ist das gleiche Verhalten wie die UITableView
Header auf iOS -, wo die überschriften bleiben sichtbar, bis der nächste header wird an der Spitze.
In der zweiten Ausschnitt, alles ist das gleiche, außer, dass der container hat eine overflow:hidden
CSS-Regel. Dies scheint zu verhindern, dass die position:sticky
Verhalten nicht richtig funktionieren.
CSS:
.parent {
position: relative;
background: #ccc;
width: 500px;
height: 150px;
overflow: auto;
margin-bottom: 20px;
}
.hidden-overflow {
overflow: hidden;
}
.sticky {
position: sticky;
background: #333;
text-align: center;
color: #fff;
top: 10px;
}
HTML:
<div class="parent">
<div>
<div class="sticky">
Hi, I am a sticky inside the container which contains the first paragraph.
</div>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus volutpat sed metus et porttitor. Integer bibendum lacus eget massa ultricies fermentum. Donec cursus magna eu congue posuere. Sed eget ligula quam. Sed laoreet enim sapien, eget volutpat nisl pellentesque vel. Nulla id dolor sed dolor sodales tristique. Curabitur feugiat massa sed massa bibendum semper et ac orci. In imperdiet nibh quis iaculis viverra. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Quisque vestibulum, nunc non volutpat tristique, nisl nisi volutpat nibh, quis pulvinar purus ex nec justo. Sed a cursus turpis. Quisque nulla odio, lacinia quis vestibulum sit amet, elementum laoreet nisi. Etiam aliquet ligula sagittis,
consectetur ipsum sit amet, sodales augue.
</p>
</div>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus volutpat sed metus et porttitor. Integer bibendum lacus eget massa ultricies fermentum. Donec cursus magna eu congue posuere. Sed eget ligula quam. Sed laoreet enim sapien, eget volutpat
nisl pellentesque vel. Nulla id dolor sed dolor sodales tristique. Curabitur feugiat massa sed massa bibendum semper et ac orci. In imperdiet nibh quis iaculis viverra. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos
himenaeos. Quisque vestibulum, nunc non volutpat tristique, nisl nisi volutpat nibh, quis pulvinar purus ex nec justo. Sed a cursus turpis. Quisque nulla odio, lacinia quis vestibulum sit amet, elementum laoreet nisi. Etiam aliquet ligula sagittis,
consectetur ipsum sit amet, sodales augue.
</p>
<p>
Integer congue augue a quam tincidunt, vitae dictum sem iaculis. Proin feugiat nibh vitae leo facilisis, eget laoreet augue dictum. Nunc facilisis tempor feugiat. Aenean eget interdum diam. Maecenas non risus iaculis, scelerisque ipsum eu, facilisis urna.
Integer velit justo, vestibulum vel vulputate vel, bibendum eu lorem. Phasellus viverra nisl a mi pretium eleifend.
</p>
</div>
<div class="parent">
<div class="hidden-overflow">
<div class="sticky">
Hi, I am another sticky in the container which contains the first paragraph, but my container has overflow:hidden.
</div>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus volutpat sed metus et porttitor. Integer bibendum lacus eget massa ultricies fermentum. Donec cursus magna eu congue posuere. Sed eget ligula quam. Sed laoreet enim sapien, eget volutpat nisl pellentesque vel. Nulla id dolor sed dolor sodales tristique. Curabitur feugiat massa sed massa bibendum semper et ac orci. In imperdiet nibh quis iaculis viverra. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Quisque vestibulum, nunc non volutpat tristique, nisl nisi volutpat nibh, quis pulvinar purus ex nec justo. Sed a cursus turpis. Quisque nulla odio, lacinia quis vestibulum sit amet, elementum laoreet nisi. Etiam aliquet ligula sagittis,
consectetur ipsum sit amet, sodales augue.
</p>
</div>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus volutpat sed metus et porttitor. Integer bibendum lacus eget massa ultricies fermentum. Donec cursus magna eu congue posuere. Sed eget ligula quam. Sed laoreet enim sapien, eget volutpat
nisl pellentesque vel. Nulla id dolor sed dolor sodales tristique. Curabitur feugiat massa sed massa bibendum semper et ac orci. In imperdiet nibh quis iaculis viverra. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos
himenaeos. Quisque vestibulum, nunc non volutpat tristique, nisl nisi volutpat nibh, quis pulvinar purus ex nec justo. Sed a cursus turpis. Quisque nulla odio, lacinia quis vestibulum sit amet, elementum laoreet nisi. Etiam aliquet ligula sagittis,
consectetur ipsum sit amet, sodales augue.
</p>
<p>
Integer congue augue a quam tincidunt, vitae dictum sem iaculis. Proin feugiat nibh vitae leo facilisis, eget laoreet augue dictum. Nunc facilisis tempor feugiat. Aenean eget interdum diam. Maecenas non risus iaculis, scelerisque ipsum eu, facilisis urna.
Integer velit justo, vestibulum vel vulputate vel, bibendum eu lorem. Phasellus viverra nisl a mi pretium eleifend.
</p>
</div>
(Snippet angepasst von @Daniel hier)
Warum nicht position:sticky
Arbeit in einem Behälter mit overflow:hidden
?
- Vielleicht browser-Problem als
position: sticky
ist experimentell - sticky ist experimentell und es hat noch viele bugs(Browser). Denken Sie daran, dass Es nicht in der Produktion verwendet werden code.
Du musst angemeldet sein, um einen Kommentar abzugeben.
overflow: hidden
ist nicht zu verhindernposition: sticky
von der Arbeit. Aber wenn Sieoverflow
zuhidden
auf Vorfahren Ihre klebrige element, dann wird dieses Vorgänger-element wird die Scroll-container für Ihre sticky-element. Wenn Sie schalten Sie dieoverflow
Wert auf Ihre Vorfahren, vonhidden
zuscroll
und scrollen diese Vorfahren (nicht die Fenster), dann kann man sehen, dass die klebrige noch funktioniert.Siehe auch https://github.com/wilddeer/stickyfill#pro-tips:
Oder http://www.coreyford.name/files/position-sticky-presentation/:
Oder die CSS-positioniertes Layout von Modul-Level 3
W3C Working Draft:
sticky
mit Vorfahrenoverflow
aushidden
zuscroll
funktioniert nur, wenn die Höhe der übergeordneten container festgelegt ist, in welchem Fall würden Sie in der Lage, um zu Blättern der container, nicht das Fenster.Ich bin nicht sicher, dass dies in allen Fällen funktionieren, aber ich habe laufen gegen dieses und war in der Lage zu bekommen, um das Problem durch den Austausch
overflow: hidden;
mit clip-Pfade.Soweit dass Sie position absolute, das einwickeln der overflow:hidden-element in einer anderen position: relative element und dann Zugabe oben, unten, Links und rechts: 0; sollte es füllen Sie den übergeordneten container.
Laut Mozilla ( hier der link )
Sticky ist eine experimentelle API und sollte nicht verwendet werden in der Produktion von code.
Also für mich, dies allein ist der Grund, warum es nicht funktioniert. Sowohl Edge und IE 11 dont support es entweder so für mich, sowas mit javascript wäre der Weg nach vorne, es gibt viel da draußen, dass sollte helfen.
Als Beispiel sei an dieser hier
Hoffe, das hilft.
position: sticky