445 Stimmen

div's Höhe mit seinem Inhalt erweitern

Ich habe diese verschachtelten Divs und ich brauche den Hauptcontainer zu erweitern (in der Höhe), um die DIVs innerhalb unterzubringen

    <!-- 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 accommodate 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 ist dies:

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

Das Problem, das ich habe, ist, dass #main_content dehnt sich nicht aus, um alle inneren Divs unterzubringen, mit dem Ergebnis, dass sie sich immer wieder vom Hintergrund abheben.

Wie kann ich dieses Problem in Anbetracht des obigen Szenarios lösen?

312voto

jennyfofenny Punkte 4290

Sie müssen eine clear:both vor dem #main_content div ist geschlossen. Ich würde wahrscheinlich die <br class="clear" />; in die #main_content div und legen Sie das CSS so fest:

.clear { clear: both; }

Aktualisierung: Diese Frage wird immer noch häufig gestellt, deshalb wollte ich die Antwort mit einer modernen Alternative aktualisieren, die eine neuer Layout-Modus in CSS3 namens Flexible Boxen oder 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>

Die meisten modernen Browser unterstützen derzeit Flexbox y Ansichtsfenster-Einheiten Wenn Sie jedoch die Unterstützung für ältere Browser aufrechterhalten müssen, sollten Sie die Kompatibilität für die jeweilige Browserversion prüfen.

269voto

sipőcz péter Punkte 2709

Versuchen Sie dies: overflow: auto;

Das hat bei meinem Problem funktioniert

96voto

Nick Punkte 969

Das Folgende hinzufügen:

overflow:hidden;
height:1%;

zu Ihrem Haupt-Div. Eliminiert die Notwendigkeit für die zusätzliche <br /> für die Freigabe.

65voto

h0mayun Punkte 3369

Als Alternative können Sie auch Folgendes versuchen, was in manchen Situationen nützlich sein kann

display:table;

jsFiddle

37voto

Charles Punkte 395

Ich würde einfach die

height: auto;

in Ihrem Div. Ja, ich weiß, ich bin ein wenig spät, aber ich dachte, dies könnte jemandem helfen, wie es mir geholfen hätte, wenn es hier war.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X