Ich habe eine position: fixed
div in einem Layout, als Sidebar. Ich wurde gebeten, einen Teil davon inhaltlich fixiert zu haben (intern), und den Rest zu scrollen , wenn es den Boden des div überläuft.Scroll Teil des Inhalts in festen Position Container
Ich habe mir this answer angesehen, aber die dort vorgestellte Lösung funktioniert nicht mit position: fixed
oder position: absolute
Containern, was ein Schmerz ist.
Ich habe eine JSFiddle Demonstration meines Problems here gemacht. Die große Menge an Text sollte im Idealfall scrollen, anstatt in den unteren Rand der Seite überlaufen. Die Höhe der Kopfzeile kann je nach Inhalt variieren und animiert sein.
JSFiddle Beispielcode:
CSS:
div.sidebar {
padding: 10px;
border: 1px solid #ccc;
background: #fff;
position: fixed;
top: 10px;
left: 10px;
bottom: 10px;
width: 280px;
}
div#fixed {
background: #76a7dc;
padding-bottom: 10px;
color: #fff;
}
div#scrollable {
overlow-y: scroll;
}
HTML:
<div class="sidebar">
<div id="fixed">
Fixed content here, can be of varying height using jQuery $.animate()
</div>
<div id="scrollable">
Potentially long content
</div>
</div>
Ohne einen festen Header, kann ich einfach hinzufügen overflow-y: scroll
zu div.sidebar
und ich kann all seinen Inhalt glücklich blättern wenn es den Boden des Containers überläuft. Ich stoße jedoch auf Probleme mit einem festen Kopf mit variabler Höhe oben in der Seitenleiste und mit Inhalten unter dem Bildlauf, wenn es zu lang ist, um in den Container zu passen.
div.sidebar
Muss Aufenthalt position: fixed
, und ich mag sehr viel dies ohne Hacks zu tun, sowie es als Cross-Browser wie möglich zu machen. Ich habe verschiedene Dinge versucht, aber keiner von ihnen funktioniert, und ich bin unsicher, was ich von hier aus versuchen soll.
Wie kann ich ein div innerhalb eines position: fixed
Containers nur in Y-Richtung scrollen, wenn der Inhalt den enthaltenen div überläuft, mit einem festen Header von unterschiedlicher, unbestimmter Höhe? Ich würde sehr gerne von JS fern bleiben, aber wenn ich es benutzen muss, werde ich es tun.
Ich bin nicht sicher, ob eine reine CSS-Lösung für diese existiert. Grundsätzlich versuchen Sie, das div # zu beheben, aber wenn Sie das tun, nehmen Sie es aus dem normalen Fluss des Dokuments heraus, so dass die Höhe nicht andere Elemente auf der Seite nach unten drückt. –
Wenn man bedenkt, dass das nicht scrollende div sich am oberen Rand des Seitenleisten-Inhalts befindet, muss es nicht "position: fixed" sein - es kann einfach im normalen Fluss sitzen. Ich möchte wissen, ob es eine Möglichkeit gibt, den oberen Teil des 'overflow: scroll'-Elements um die Höhe des nicht scrollenden div nach unten zu schieben. Es ist nicht wirklich "Position: fixiert". Ich meinte "behoben" wie in "Scroll nicht mit Überlauf". – Bojangles
Es sieht so aus, als hättest du Fortschritte auf deiner Geige gemacht. Wenn du die untere Eigenschaft in der div # -Seitenleiste entfernst, wird das div so erweitert, dass es in den Inhalt passt. –