Ich versuche, ein Layout zu erreichen, das sich ausdehnt, um den Bildschirm zu füllen, aber dann scrollt, wenn der Inhalt größer ist als der verfügbare Bereich.Flexbox mit einem scrollbaren Panel
Ich habe eine grundlegende flexbox
Ansatz basierend auf this answer, und es macht einen guten Job füllt den Bildschirm, aber überfüllter Inhalt bewirkt, dass der gesamte Bildschirm statt nur einen eigenen Container scrollen.
Wenn ich die Höhe .outer
auf einen literalen Wert wie 200px
ändern, dann bekomme ich das Bildlaufverhalten, das ich will, aber der untere Inhaltsbereich füllt nicht mehr den Bildschirm.
Ich habe versucht, display: table
und verwandte CSS anstelle von Flexbox, aber endete mit dem gleichen Ergebnis.
Ich habe auch mit calc
auf der Höhe des Inhaltsfenster betrachtet - so etwas wie
height: calc(100% - 60px);
aber ich möchte, dass die Header der Lage sein, mit seinem Inhalt zu wachsen, so habe ich nicht einen harten Wert für seine Höhe für die Berechnung.
Ich bin hier auf der Suche nach einer reinen CSS-Lösung statt Fenstergröße mit Javascript von etwas Geschmack.
html,
body {
height: 100%;
margin: 0
}
.box {
display: flex;
flex-flow: column;
height: 100%;
}
.box .row {
border: 1px dotted grey;
flex: 1 1 auto;
}
.box .row.header {
background: aliceblue;
}
.box .row.content {
background: pink;
}
.box .row.content .title {
height: 40px;
background: yellow;
}
.outer {
height: -webkit-calc(100% - 40px);
height: -moz-calc(100% - 40px);
height: -o-calc(100% - 40px);
height: calc(100% - 40px);
overflow-y: auto;
}
.inner {
height: 100%;
}
.text {
height: 100px;
margin-top: 10px;
border: 1px solid gold;
}
<div class="box">
<div class="row header">
<p><b>header</b>
<br />
<br />(sized to content)</p>
</div>
<div class="row content">
<div class="title">
<b>content</b>
(fills remaining space)
</div>
<div class="outer">
<div class="inner">
<div class="text">Bacon ipsum dolor amet tongue corned beef landjaeger sausage beef meatball, kielbasa pastrami turkey boudin hamburger ham hock chuck tail pork. Shankle tail cupim ribeye.</div>
<div class="text">Bacon ipsum dolor amet tongue corned beef landjaeger sausage beef meatball, kielbasa pastrami turkey boudin hamburger ham hock chuck tail pork. Shankle tail cupim ribeye.</div>
<div class="text">Bacon ipsum dolor amet tongue corned beef landjaeger sausage beef meatball, kielbasa pastrami turkey boudin hamburger ham hock chuck tail pork. Shankle tail cupim ribeye.</div>
<div class="text">Bacon ipsum dolor amet tongue corned beef landjaeger sausage beef meatball, kielbasa pastrami turkey boudin hamburger ham hock chuck tail pork. Shankle tail cupim ribeye.</div>
<div class="text">Bacon ipsum dolor amet tongue corned beef landjaeger sausage beef meatball, kielbasa pastrami turkey boudin hamburger ham hock chuck tail pork. Shankle tail cupim ribeye.</div>
<div class="text">Bacon ipsum dolor amet tongue corned beef landjaeger sausage beef meatball, kielbasa pastrami turkey boudin hamburger ham hock chuck tail pork. Shankle tail cupim ribeye.</div>
<div class="text">Bacon ipsum dolor amet tongue corned beef landjaeger sausage beef meatball, kielbasa pastrami turkey boudin hamburger ham hock chuck tail pork. Shankle tail cupim ribeye.</div>
</div><!-- inner -->
</div><!-- outer -->
</div>
</div>
Hmmm ... näher, aber ich bin nur für den rosaen Teil suche scrollbaren zu sein. Könnten Sie auch speziell auf die von Ihnen vorgenommenen Änderungen hinweisen? – Danny
Ok aktualisiert das Snippet bei meiner Antwort. Bitte testen Sie es. –
Sieht aus wie die neue Version den Trick macht. Gekocht, sieht es wie ein Flex-in-a-Flex aus? – Danny