150 votes

Comment étirer la hauteur d'une div pour remplir la div parente - CSS

J'ai une page avec div comme indiqué dans la présentation / capture d'écran ci-dessous :

layout

Le code est ici :

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

#B,
#C,
#D {
  position: absolute;
}

#A {
  top: 0;
  width: 100%;
  height: 35px;
  background-color: #99CC00;
}

#B {
  top: 35px;
  width: 200px;
  bottom: 35px;
  background-color: #999999;
  z-index: 100;
  border: solid 4px #00CC00;
}

#B2 {
  margin-top: -35px;
  bottom: 0;
  background-color: #FFFFFF;
  width: 200px;
  overflow: scroll;
}

#B1 {
  height: 35px;
  width: 35px;
  margin-left: 200px;
  background-color: #CC0066;
}

#C {
  top: 35px;
  left: 200px;
  right: 0;
  bottom: 35px;
  background-color: #CCCCCC;
}

#D {
  bottom: 0;
  width: 100%;
  height: 35px;
  background-color: #3399FF;
}

<div id="container">
  <div id="A">A</div>
  <div id="B">
    <div id="B1">B1</div>
    <div id="B2">B2</div>
  </div>
  <div id="C">C</div>
  <div id="D">D</div>
</div>

Je veux ajuster la hauteur de B2 div pour remplir (ou étirer jusqu'à) l'ensemble de la B div (marqué d'une bordure verte dans l'image) et ne veulent pas traverser le pied de page D div . Voici un violon qui fonctionne lien (mise à jour). Comment puis-je résoudre ce problème ?

53voto

onmyway133 Points 2196

Supposons que vous ayez

<body>
  <div id="root" />
</body>

Avec un CSS normal, vous pouvez faire ce qui suit. Voir une application fonctionnelle https://github.com/onmyway133/Lyrics/blob/master/index.html

#root {
  position: absolute;
  top: 0;
  left: 0;
  height: 100%;
  width: 100%;
}

Avec la boîte à outils, vous pouvez

html, body {
  height: 100%
}
body {
  display: flex;
  align-items: stretch;
}

#root {
  width: 100%
}

14voto

x10 Points 2154

http://jsfiddle.net/QWDxr/1/

Utiliser la propriété "min-height
Il faut se méfier des encadrements, des marges et des bordures :)

html, body {
    margin: 0;
    padding: 0;
    border: 0;
}
#B, #C, #D {
    position: absolute;
}
#A{
    top: 0;
    width: 100%;
    height: 35px;
    background-color: #99CC00;
}
#B {
    top: 35px;
    width: 200px;
    bottom: 35px;
    background-color: #999999;
    z-index:100;
}
#B2 {
    min-height: 100%;
    height: 100%;
    margin-top: -35px;
    bottom: 0;
    background-color: red;
    width: 200px;
    overflow: scroll;
}
#B1 {
    height: 35px;
    width: 35px;
    margin-left: 200px;
    background-color: #CC0066;
}
#C {
    top: 35px;
    left: 200px;
    right: 0;
    bottom: 35px;
    background-color: #CCCCCC;
}
#D {
    bottom: 0;
    width: 100%;
    height: 35px;
    background-color: #3399FF;
}

5voto

Teneff Points 6753

Si vous souhaitez utiliser B2 à des fins de coiffage, vous pouvez essayer ce "hack"

#B { overflow: hidden;}
#B2 {padding-bottom: 9999px; margin-bottom: -9999px}

jsFiddle

4voto

Leo Smith Points 1

Ce qui me convenait, c'était de créer une div qui était toujours limitée à l'intérieur de la fenêtre du navigateur par une quantité fixe.

Ce qui a fonctionné, du moins sur firefox, c'est ceci

<div style="position: absolute; top: 127px; left: 75px;right: 75px; bottom: 50px;">

Dans la mesure où la fenêtre n'est pas forcée de défiler, le div conserve ses limites jusqu'au bord de la fenêtre pendant toute la durée du redimensionnement.

J'espère que cela permettra à quelqu'un de gagner du temps.

3voto

Snorbuckle Points 206

Il suffit d'ajouter height: 100%; sur le #B2 le stylisme. min-height ne devrait pas être nécessaire.

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