faire en sorte que la hauteur de div se développe avec son contenu

J'ai ces divs imbriqués et j'ai besoin du conteneur principal pour se développer (en hauteur) pour accueillir les DIVs à l'intérieur

    <!-- head -->
    ...
    <!-- /head -->

    <body class="main">
      <div id="container">
        <div id="header">
          <!--series of divs in here, graphic banner etc. -->
        </div>

    <div id="main_content"> <!-- this DIV _should_ stretch to accomodate inner divs -->
      <div id="items_list" class="items_list ui-sortable">
        <div id="item_35" class="item_details">
        </div>
        <div id="item_36" class="item_details">
        </div>        
        <div id="item_37" class="item_details">
        </div>
        <!-- this list of DIVs "item_xx" goes on for a while
             each one representing a photo with name, caption etcetc -->
      </div>
    </div>
    <br class="clear"/>

    <div id="footer">
    </div>
  </body>
</html>

CSS est ceci:

* {
    padding: 0;
    margin: 0;
}

.main {
    font: 100% Verdana, Arial, Helvetica, sans-serif;
    background: #4c5462;
    margin: 0; 
    padding: 0;
    text-align: center; 
    color: #000000;
}
.main #container {
    height: auto;
    width: 46em;
    background: #4c5462;
    margin: 0 auto; 
    border: 0px solid #000000;
    text-align: left;       
}

.main #main_content {
    padding: 5px;
    margin: 0px;
}
#items_list {
    width: 400px;
    float: left;
}

.items_list {
    width: 400px;
    float: left;
}
.item_details {
    margin-top: 3px;
    margin-bottom: 3px;
    padding: 3px;
    float: left;
    border-bottom: 0.5px solid blue;
}

Le problème que j'ai est que #main_content ne s'étire pas pour accueillir toutes les divs internes, avec le résultat qu'ils continuent à aller en arrière-plan.

Comment puis-je résoudre cela?

330
demandé sur Eliran Malka 2009-11-10 19:51:46

23 réponses

, Vous devez forcer un clear:both avant #main_content div est fermé. Je déplacerais probablement le <br class="clear" />; dans le #main_content div et définirais le CSS comme:

.clear { clear: both; }

Update: cette question reçoit toujours une bonne quantité de trafic, donc je voulais mettre à jour la réponse avec une alternative moderne en utilisant un nouveau mode de mise en page en CSS3 appelé boîtes flexibles ou Flexbox :

body {
  margin: 0;
}

.flex-container {
  display: flex;
  flex-direction: column;
  min-height: 100vh;
}

header {
  background-color: #3F51B5;
  color: #fff;
}

section.content {
  flex: 1;
}

footer {
  background-color: #FFC107;
  color: #333;
}
<div class="flex-container">
  <header>
    <h1>
     Header   
    </h1>
  </header>

  <section class="content">
    Content
  </section>

  <footer>
    <h4>
      Footer
    </h4>
  </footer>
</div>

La Plupart des navigateurs modernes supportent actuellement Flexbox et vue unités , mais si vous devez maintenir la prise en charge des anciens navigateurs, assurez-vous de vérifier la compatibilité de la version spécifique du navigateur.

244
répondu jennyfofenny 2016-02-04 21:02:42

Essayez ceci: overflow: auto;

Cela a fonctionné pour mon problème..

200
répondu sipőcz péter 2011-12-11 14:02:45

Ajouter ce qui suit:

overflow:hidden;
height:1%;

À votre div principale. Élimine le besoin de <br /> supplémentaire pour le clair.

79
répondu Nick 2012-11-23 00:11:53

Comme alternative, vous pouvez également essayer ceci qui peut être utile dans certaines situations

display:table;

JsFiddle

55
répondu h0mayun 2014-06-20 05:51:53

Je voudrais juste utiliser

height: auto;

Dans votre div. Oui, je sais que je suis un peu en retard, mais j'ai pensé que cela pourrait aider quelqu'un comme ça m'aurait aidé si c'était là.

18
répondu Charles 2014-03-07 02:16:18

Thw suivant devrait fonctionner:

.main #main_content {
    padding: 5px;
    margin: 0px;
    overflow: auto;
    width: 100%; //for some explorer browsers to trigger hasLayout
}
13
répondu Steerpike 2009-11-10 16:55:57

Utilisez la balise span avec {[0] } CSS attaché à elle. Vous pouvez ensuite utiliser CSS et le manipuler comme un div de nombreuses façons, mais si vous n'incluez pas un width ou height, il se développe et se rétracte en fonction de son contenu.

J'espère que ça aide.

8
répondu dark marc 2012-07-06 11:06:11

Typiquement, je pense que cela peut être résolu en forçant une règle clear:both sur le dernier élément enfant du #items_list.

Vous pouvez utiliser:

#items_list:last-child {clear: both;}

Ou, si vous utilisez un langage dynamique, ajoutez une classe supplémentaire au dernier élément généré dans n'importe quelle boucle créant la liste elle-même, de sorte que vous vous retrouvez avec quelque chose dans votre html comme:

<div id="list_item_20" class="last_list_item">

Et css

.last_list_item {clear: both; }
6
répondu David Thomas 2012-04-16 19:45:23

Ce problème se pose lorsque les éléments enfants D'un Div Parent sont flottants. Voici la Dernière Solution du problème:

Dans votre fichier CSS, écrivez la classe suivante appelée .clearfix avec le pseudo Sélecteur : Après

.clearfix:after {
    content: "";
    display: table;
    clear: both;
}

Ensuite, dans votre HTML, ajoutez le .clearfix classe à votre Div parent. Par exemple:

<div class="clearfix">
    <div></div>
    <div></div>
</div>

Cela devrait toujours fonctionner. Vous pouvez appeler le nom de la classe comme .le groupe au lieu de .clearfix , comme cela rendra le code plus sémantique. Notez que, il n'est Pas nécessaire d'ajouter le point ou même un espace dans la valeur de Contenu entre les guillemets "". Aussi, overflow: auto; pourrait résoudre le problème, mais il provoque d'autres problèmes comme l'montrant la barre de défilement n'est pas recommandée.

Source: Blog de Lisa Catalano et Chris Coyier

6
répondu Flight-87 2016-01-07 09:14:11

Ajoute une propriété float à la #main_content div - elle se développera alors pour contenir son contenu flottant

5
répondu Ray 2016-01-07 09:13:33

Avant de faire quoi que ce soit vérifiez les règles css avec:

{ position:absolute }

Supprimer si existent et n'en ont pas besoin.

4
répondu onalbi 2014-09-28 22:46:14

On dirait que cela fonctionne

html {
 width:100%;
 height:auto;
 min-height:100%
} 

Il prend la taille de l'écran au minimum, et si le contenu se développe, il grandit.

3
répondu SyntheticMeshwork 2013-07-24 18:23:44

Les éléments flottants n'occupent pas l'espace à l'intérieur de l'élément parent, comme son nom l'indique, ils flottent! Ainsi, si une hauteur n'est pas explicitement fournie à un élément ayant ses éléments enfants flottés, alors l'élément parent semblera rétrécir et ne pas accepter les dimensions de l'élément enfant, aussi si son overflow:hidden; donné ses enfants peuvent ne pas apparaître à l'écran. Il existe plusieurs façons de traiter ce problème:

  1. Insérez un autre élément sous l'élément flottant avec la propriété clear:both;, ou utilisez clear:both; sur :after de l'élément flottant.

  2. Utiliser display:inline-block; ou flex-box au lieu de float.

3
répondu Apoorv Srivastava 2017-04-04 08:56:08

En CSS: #clear_div{clear:both;}

Après La Balise div de la div interne, Ajoutez cette nouvelle div suivante

<div id="clear_div"></div>

Http://www.w3schools.com/cssref/pr_class_clear.asp : pour plus d'informations

2
répondu ingrid 2013-01-25 00:35:10

J'ai ajouté Bootstrap à un projet avec des balises section que j'avais définies à 100% de la hauteur de l'écran. Cela a bien fonctionné jusqu'à ce que je rende le projet réactif, à quel point j'ai emprunté une partie de la réponse de jennyfofenny donc, mon fond de section correspond à l'arrière-plan du contenu lorsque la taille de l'écran a changé sur des écrans plus petits.

Mon nouveau section CSS ressemble à ceci:

section {
    // min-height so it looks good on big screen
    // but resizes on a small-screen
    min-height: 100%;
    min-height: 100vh;
    width:100%;
    width:100vh;
}

Disons que vous avez une section qui est d'une certaine couleur. En utilisant min-height, si la largeur de la section rétrécit en raison d'un écran plus petit, la hauteur de la section se développera, le contenu restera dans la section, et votre arrière-plan restera la couleur désirée.

2
répondu Adrian 2017-05-23 12:34:45

Je cours moi - même sur un projet-j'avais une table à l'intérieur d'une div qui débordait du bas de la div. Aucun des correctifs de hauteur que j'ai essayé n'a fonctionné, mais j'ai trouvé une solution bizarre pour cela, et c'est de mettre un paragraphe au bas de la div avec juste un point dedans. Ensuite, le style de la" couleur " du texte pour être le même que l'arrière-plan du conteneur. Travaillé soigné à votre guise et aucun javascript requis. Un espace insécable ne fonctionnera pas - pas plus qu'une image transparente.

Apparemment, il avait juste besoin de voir qu'il y a du contenu sous la table afin de s'étirer pour le contenir. Je me demande si cela fonctionnera pour quelqu'un d'autre.

C'est le genre de chose qui fait que les concepteurs ont recours à des mises en page basées sur des tables-le temps que j'ai passé à comprendre ce genre de choses et à le rendre compatible avec les navigateurs croisés me rend fou.

1
répondu Nancy Hastings-Trew 2012-04-20 21:19:05

J'ai essayé ceci et cela a fonctionné

<div style=" position: absolute; direction: ltr;height:auto; min-height:100%">   </div>
1
répondu Ahmed Aboelela 2016-06-26 11:54:46

Avez-vous essayé la manière traditionnelle? donnez la hauteur du conteneur principal: auto

#container{height:auto}

J'ai utilisé ceci et cela a fonctionné la plupart du temps avec moi.

1
répondu Michelle Dimwaite 2017-10-03 15:19:13

Si vous utilisez jQuery UI, ils ont déjà une classe les œuvres juste un charme ajoutez un <div> en bas à l'intérieur de la div que vous voulez développer avec height:auto; ajoutez ensuite un nom de classe ui-helper-clearfix ou utilisez cet attribut de style et ajoutez comme ci-dessous:

<div style=" clear:both; overflow:hidden; height:1%; "></div>

Ajoutez la classe jQuery UI à la div clear, pas la div que vous souhaitez développer.

0
répondu Lucas M. Oliveira 2013-06-28 03:16:12

Je sais que c'est une sorte de vieux thread, cependant, cela peut être réalisé avec la propriété min-height CSS d'une manière propre, donc je vais laisser ceci ici pour de futures références:

J'ai fait un violon basé sur le code posté par OP ici: http://jsfiddle.net/U5x4T/1/, lorsque vous supprimez et ajoutez des divs à l'intérieur, vous remarquerez comment le conteneur se développe ou se réduit en taille

Les 2 seules choses dont vous avez besoin pour y parvenir, en plus du code OP est:

* débordement dans le conteneur principal (requis pour les divs flottants)

* propriété CSS min-height, plus d'informations disponibles ici: http://www.w3schools.com/cssref/pr_dim_min-height.asp

0
répondu Juan Carlos Alpizar Chinchilla 2014-03-07 18:02:32

Affichage ajouté: en ligne à la div et il a grandi auto (pas les choses de défilement ) lorsque le contenu de la hauteur est devenu plus grand que la hauteur définie div de 200px

0
répondu Jelle 2015-04-09 10:53:15

Manière Très simple

Sur DIV parent:

height: 100%;

Ce travail pour moi à chaque fois

0
répondu Daniel Beltrami 2018-05-22 19:29:38

Pas besoin d'utiliser beaucoup de CSS, utilisez simplement bootstrap, puis utilisez:

class="container"

Pour le div qui doit être rempli.

Vous pouvez obtenir de l'amorçage à partir d'ici

-3
répondu Thadeo Arlo 2016-06-21 11:27:37