web-dev-qa-db-fra.com

Comment étirer hauteur de div pour remplir parent div - CSS

J'ai une page avec des divs comme ci-dessous

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

avec style comme;

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 {
    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;
}

Je veux ajuster la hauteur de div B2 pour remplir (ou étirer) tout le div B (marqué d'une bordure verte) et je ne veux pas croiser le pied de page div D. Voici un violon qui fonctionne démo (mis à jour). Comment puis-je résoudre ça??

82
blasteralfred Ψ

Ajoutez simplement height: 100%; sur le style #B2. min-height ne devrait pas être nécessaire.

33
Snorbuckle

Supposons que vous ayez

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

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

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

Avec flexbox, vous pouvez

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

#root {
  width: 100%
}
12
onmyway133

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

Utilisez la propriété "min-height"
Méfiez-vous des rembourrages, 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;
}
10
x10

Si vous allez utiliser B2 à des fins de style, vous pouvez essayer ce "bidouillage"

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

jsFiddle

5
Teneff

Ce qui me convenait le mieux était de créer une div toujours limitée dans la fenêtre du navigateur par un montant fixe.

Ce qui a fonctionné, du moins sur Firefox, est-ce

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

Dans la mesure où la fenêtre elle-même n'est pas forcée à faire défiler, le div conserve ses limites avec la fenêtre Edge pendant tout le redimensionnement.

J'espère que cela sauve du temps à quelqu'un.

4
Leo Smith

Conteneur B2 position relative

Position haute B2 + de la hauteur restante

Hauteur de B2 + hauteur B1 ou hauteur restante

0
Dmytro Yurchenko