W układzie 3-rzędowym:
- górny rząd powinien być dopasowany do jego zawartości
- dolny rząd powinien mieć stałą wysokość w pikselach
- środkowy rząd powinien się rozwinąć, aby wypełnić pojemnik
Problem polega na tym, że wraz z rozszerzaniem się głównej treści powoduje ona skrócenie wierszy nagłówka i stopki:
HTML:
<section>
<header>
header: sized to content
<br>(but is it really?)
</header>
<div>
main content: fills remaining space<br>
x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>
<!-- uncomment to see it break - ->
x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>
x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>
x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>
x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>
<!-- -->
</div>
<footer>
footer: fixed height in px
</footer>
</section>
CSS:
section {
display: flex;
flex-flow: column;
align-items: stretch;
height: 300px;
}
header {
flex: 0 1 auto;
background: tomato;
}
div {
flex: 1 1 auto;
background: gold;
overflow: auto;
}
footer {
flex: 0 1 60px;
background: lightgreen;
/* fixes the footer: min-height: 60px; */
}
Skrzypce:
- http://jsfiddle.net/7yLFL/1/ (działa, z małą zawartością)
- http://jsfiddle.net/7yLFL/ (uszkodzony, z większą zawartością)
Mam szczęście, że mogę korzystać z najnowszych i najlepszych w CSS, bez względu na starsze przeglądarki. Pomyślałem, że mogę użyć układu Flex, aby w końcu pozbyć się starych układów opartych na tabelach. Z jakiegoś powodu nie robi tego, co chcę ...
Dla przypomnienia, istnieje wiele powiązanych pytań na temat SO dotyczących „wypełnienia pozostałej wysokości”, ale nic, co nie rozwiązałoby problemu z flexem. Refs:
- Zrób div wypełni wysokość pozostałego miejsca na ekranie
- Wypełnij pozostałą przestrzeń pionową - tylko CSS
- Czy div, aby wypełnić pozostałą wysokość / szerokość pojemnika, gdy dzielisz go z innym div?
- Spraw, aby zagnieżdżona div rozciągała się do 100% pozostałej wysokości div kontenera
- Jak sprawić, by układ Flexbox zajmował 100% miejsca w pionie?
- itp
Odpowiedzi:
Uprość : DEMO
Wersja pełnoekranowa
źródło
flex: 1
naflex-grow: 1
. Dzięki za rozwiązanie!Poniższy przykład obejmuje przewijanie, jeśli zawartość rozwiniętego komponentu środkowego wykracza poza jego granice. Również komponent środkowy zajmuje 100% pozostałego miejsca w rzutni.
jsfiddle tutaj
Przykład kodu HTML, którego można użyć do zademonstrowania tego zachowania
źródło
html
z selektora i dostosowującheight: 100vh
dobody
: jsfiddle.net/pm6nqcqh/1Bardziej nowoczesnym podejściem byłoby użycie właściwości grid.
źródło
Użyj
flex-grow
właściwości do div div głównej treści i przekażdispaly: flex;
jej rodzicowi;źródło
section
wysokość nie jest ustalona?) Zamiast używaniaposition: absolute
?position: absolute;
. https://jsfiddle.net/xa26brzf/