Combler les espaces verticaux avec CSS à l'aide de display:flex

Dans une ligne de 3 mise en page:

  • le haut de la ligne doit être dimensionné en fonction de son contenu
  • le bas de ligne doit avoir une hauteur fixe en pixels
  • la rangée du milieu doit se développer pour remplir le conteneur

Le problème est que, comme le contenu principal se développe, il squishes l'en-tête et pied de page lignes:

Combler les espaces verticaux avec CSS à l'aide de display:flex

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; */
}

Violon:

Je suis dans la situation de la chance que je peux utiliser la dernière et la plus grande dans le CSS, ignorant les anciens navigateurs. Je pensais que je pouvais utiliser le flex de mise en page pour enfin se débarrasser de l'ancienne table à base de modèles. Pour une raison quelconque, il ne fait pas ce que je veux...

Pour l'enregistrement, il y a beaucoup de questions connexes AINSI à propos de "remplir le reste de la hauteur", mais rien de ce qui résout le problème, je vais avoir du flex. Réf:

  • Semble fonctionner comme prévu sur le violon.
  • Oui, il faut décommenter le reste de la <div>'s de contenu pour voir comment il se casse. Je devrais peut-être lié à la version cassé. Désolé.
  • J'ai ajouté les deux versions de la question maintenant.
  • Je vois ce que tu veux dire maintenant.
  • dup de stackoverflow.com/questions/90178/...?
InformationsquelleAutor Zilk | 2014-08-02