123 votes

Comment faire en sorte que le div de contenu principal remplisse la hauteur de l'écran avec css ?

J'ai donc une page Web avec un en-tête, un corps principal et un pied de page. Je veux que le corps principal remplisse 100 % de la page (100 % entre le pied de page et l'en-tête). Mon pied de page est en position absolue avec un fond de 0 : Chaque fois que j'essaie de définir la hauteur du corps principal à 100 % ou de modifier sa position, il déborde également de l'en-tête. Si je règle le corps en position absolue avec top: 40 (parce que mon en-tête fait 40px de haut), il ira 40px trop bas, créant une barre de défilement.

J'ai créé un simple fichier html puisque je ne peux pas afficher la page complète du projet actuel. Avec l'exemple de code, même si le corps du contenu principal remplit l'écran, il descend de 40px trop bas (à cause de l'en-tête, je suppose).

html,
body {
  margin: 0;
  padding: 0;
}

header {
  height: 40px;
  width: 100%;
  background-color: blue;
}

#maincontent {
  background-color: green;
  height: 100%;
  width: 100%;
}

footer {
  height: 40px;
  width: 100%;
  background-color: grey;
  position: absolute;
  bottom: 0;
}

<html>

<head>
  <title>test</title>
  <link href="style.css" rel="stylesheet" type="text/css">
</head>

<body>
  <header></header>
  <div id="maincontent">

  </div>

  <footer></footer>
</body>

</html>

Quelqu'un connaît la réponse ?

-2voto

Dan Dascalescu Points 8165

Cette question est un doublon de Faire en sorte qu'un div remplisse la hauteur de l'espace d'écran restant et la réponse correcte est d'utiliser le flexbox modèle.

Tous les principaux navigateurs et IE11+ prennent en charge Flexbox. Pour IE 10 ou plus ancien, ou Android 4.3 ou plus ancien, vous pouvez utiliser la fonction FlexieJS cale.

Notez à quel point le balisage et le CSS sont simples. Pas de bidouillage de table ou autre.

html, body {
  height: 100%;
  margin: 0; padding: 0;  /* to avoid scrollbars */
}

#wrapper {
  display: flex;  /* use the flex model */
  min-height: 100%;
  flex-direction: column;  /* learn more: http://philipwalton.github.io/solved-by-flexbox/demos/sticky-footer/ */
}

#header {
  background: yellow;
  height: 100px;  /* can be variable as well */
}

#body {
  flex: 1;
  border: 1px solid orange;
}

#footer{
  background: lime;
}

<div id="wrapper">
  <div id="header">Title</div>
  <div id="body">Body</div>
  <div id="footer">
    Footer<br/>
    of<br/>
    variable<br/>
    height<br/>
  </div>
</div>

Dans le CSS ci-dessus, le flex permet d'abréger le nom de la propriété flex-grow , flex-shrink y base flexible pour établir la flexibilité des éléments flexibles. Mozilla dispose d'un bonne introduction au modèle des boîtes flexibles .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X