390 votes

Expansion d'un <div> parent à la hauteur de ses enfants

J'ai une structure de page similaire à celle-ci :

<body>
  <div id="parent">
    <div id="childRightCol">
      /*Content*/
    </div>
    <div id="childLeftCol">
      /*Content*/
    </div>
  </div>
</body>

J'aimerais que le parent div de s'étendre en height lorsque l'intérieur div 's height augmente.

Edita:
L'un des problèmes est que si le width du contenu de l'enfant s'étend au-delà de la width de la fenêtre du navigateur, mon CSS actuel place une barre de défilement horizontale sur la fenêtre parentale. div . Je voudrais que la barre de défilement soit au niveau de la page. Actuellement, ma div parent est réglée sur overflow: auto;

Pouvez-vous m'aider avec le CSS pour cela ?

7 votes

Les divs intérieures sont-elles flottantes ? Pouvez-vous afficher le CSS actuel ?

2 votes

@Eric - c'était mon problème aussi - mes div(s) enfant(s) avaient float:left, quand je l'ai enlevé le 'parent' a été automatiquement reconnu et étiré à la pleine hauteur !

620voto

Dr Casper Black Points 2242

Essayez ceci pour le parent, cela a fonctionné pour moi.

overflow:auto; 

UPDATE :

Une autre solution qui a fonctionné :

Parent :

display: table;

Enfant :

display: table-row;

76 votes

overflow:auto signifie que le navigateur doit décider de la valeur à appliquer. Ce qui est vraiment fait l'astuce consiste à overflow: overlay .

16 votes

@jmendeth Une valeur de débordement appelée "overlay" n'existe pas. Ce qui fonctionne si les divs enfants sont flottantes, c'est de déclarer overflow:hidden .

17 votes

Waaaait. Détendez-vous. Une chose est certaine overlay n'est pas pris en charge en dehors de Webkit. Une autre façon de dire qu'il n'existe pas du tout est complètement différente. S'il vous plaît, RTFM d'abord . ;)

27voto

bendewey Points 25437

Ajouter un clear:both . en supposant que vos colonnes soient flottantes. Selon la façon dont la hauteur est spécifiée par le parent, vous pouvez avoir besoin d'un overflow:auto ;

<body>
<div id="parent">
    <div id="childRightCol">
    <div>
    <div id="childLeftCol">
    <div>
    <div id="clear" style="clear:both;"></div>
</div>
</body>

0 votes

Cela me permet d'obtenir une barre de défilement horizontale sur la div parente lorsque le contenu est plus large que la fenêtre du navigateur. J'aimerais que le défilement horizontal se fasse sur l'ensemble de la page.

1 votes

Pourquoi avez-vous besoin de l'option overflow:auto; ? Dans mon test, le clear:both ; suffisait.

3 votes

Cela suppose également que le parent n'a pas de hauteur spécifiée.

19voto

noisy Points 538

Comme le dit Jens dans son commentaire

Une autre réponse est Comment faire en sorte que la div ne soit pas plus grande que son contenu ? propose de définir display:inline-block. Ce qui a très bien fonctionné pour moi. - Jens le 2 juin à 5:41

Cela fonctionne beaucoup mieux pour moi dans tous les navigateurs.

4voto

imy Points 106

Pour ceux qui ne parviennent pas à comprendre ce qui suit dans les instructions de cette réponse là :

Essayez de définir rembourrage valeur plus entonces 0 Si les divs enfants ont un margin-top ou un margin-bottom, vous pouvez le remplacer par un padding.

Par exemple, si vous avez

#childRightCol
{
    margin-top: 30px;
}
#childLeftCol
{
    margin-bottom: 20px;
}

il sera préférable de le remplacer par.. :

#parent
{
    padding: 30px 0px 20px 0px;
}

3voto

Tim K. Points 5090

L'utilisation de quelque chose comme l'auto-défense div est parfait pour une situation telle que cette . Il suffit alors d'utiliser une classe sur le parent... comme :

<div id="parent" class="clearfix">

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