In un layout a 3 righe:
- la riga superiore deve essere dimensionata in base al suo contenuto
- la riga inferiore dovrebbe avere un'altezza fissa in pixel
- la riga centrale dovrebbe espandersi per riempire il contenitore
Il problema è che quando il contenuto principale si espande, schiaccia le righe di intestazione e piè di pagina:
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; */
}
Violino:
- http://jsfiddle.net/7yLFL/1/ (funzionante, con contenuti di piccole dimensioni)
- http://jsfiddle.net/7yLFL/ (rotto, con contenuti più grandi)
Sono nella fortunata situazione di poter utilizzare l'ultimo e il più grande nei CSS, ignorando i browser legacy. Pensavo di poter usare il layout flessibile per eliminare finalmente i vecchi layout basati su tabella. Per qualche motivo, non sta facendo quello che voglio ...
Per la cronaca, ci sono molte domande correlate su SO sul "riempimento dell'altezza rimanente", ma nulla che risolva il problema che sto avendo con flex. refs:
- Fai un div riempire l'altezza dello spazio sullo schermo rimanente
- Riempi lo spazio verticale rimanente - solo CSS
- Hai un div per compilare l'altezza / larghezza rimanente di un contenitore quando lo condividi con un altro div?
- Fai allungare il div nidificato al 100% dell'altezza div del container rimanente
- Come posso fare in modo che il layout del mio flexbox occupi lo spazio verticale al 100%?
- eccetera