Powiększ wysokość div wraz z jego zawartością

Mam te zagnieżdżone Div I potrzebuję głównego kontenera, aby rozszerzyć (w wysokości), aby pomieścić Div wewnątrz

    <!-- 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 jest taki:

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

Problem, który mam jest to, że #main_content nie rozciągają się, aby pomieścić wszystkie wewnętrzne div, z wynikiem, że nadal idą w tle.

Jak mogę rozwiązać ten problem biorąc pod uwagę powyższy scenariusz?

 397
Author: patrick, 2009-11-10

25 answers

Musisz wymusić clear:both przed zamknięciem #main_content div. Prawdopodobnie przeniosłbym <br class="clear" />; do #main_content div i ustawił CSS na:

.clear { clear: both; }

Update: to pytanie wciąż dostaje sporą ilość ruchu, więc chciałem zaktualizować odpowiedź z nowoczesną alternatywą za pomocą nowy tryb układu w CSS3 o nazwie Flexbox lub 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>

Większość nowoczesnych przeglądarek obsługuje obecnie Flexbox i viewport jednostki, ale jeśli musisz utrzymać wsparcie dla starszych przeglądarek, upewnij się, aby sprawdzić zgodność dla konkretnej wersji przeglądarki.

 296
Author: jennyfofenny,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-04 21:02:42

Spróbuj tego: overflow: auto;

Zadziałało na mój problem..
 245
Author: sipőcz péter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-11 14:02:45

Dodać:

overflow:hidden;
height:1%;

Do twojego głównego div. Eliminuje potrzebę dodatkowego <br /> dla klarowności.

 88
Author: Nick,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-23 00:11:53

Jako alternatywny sposób możesz również spróbować tego, co może być przydatne w niektórych sytuacjach

display:table;

JsFiddle

 61
Author: h0mayun,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-20 05:51:53

Użyłbym tylko

height: auto;

W Twoim div. Tak, Wiem, że jestem trochę spóźniona, ale pomyślałem, że to może pomóc komuś takiemu jak mnie, gdyby to było tutaj.

 29
Author: Charles,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-07 02:16:18

THW następujące powinny działać:

.main #main_content {
    padding: 5px;
    margin: 0px;
    overflow: auto;
    width: 100%; //for some explorer browsers to trigger hasLayout
}
 14
Author: Steerpike,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-10 16:55:57

Bardzo prosty sposób

On parent DIV:

height: 100%;

To działa dla mnie za każdym razem

 12
Author: Daniel Beltrami,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-20 09:12:55

Użyj znacznika span z dołączonym display:inline-block css. Możesz następnie użyć CSS i manipulować nim jak div na wiele sposobów, ale jeśli nie dołączysz width lub height, rozszerza się i wycofuje na podstawie jego zawartości.

Mam nadzieję, że to pomoże.
 8
Author: dark marc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-06 11:06:11

Zazwyczaj myślę, że można to rozwiązać wymuszając regułę clear:both na ostatnim elemencie potomnym #items_list.

Możesz użyć:

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

Lub, jeśli używasz dynamicznego języka, dodaj dodatkową klasę do ostatniego elementu wygenerowanego w dowolnej pętli, która sama utworzy listę, więc skończysz z czymś w html, na przykład:

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

I css

.last_list_item {clear: both; }
 6
Author: David says reinstate Monica,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-16 19:45:23

Ten problem pojawia się, gdy elementy potomne rodzica Div są unoszone. Oto najnowsze rozwiązanie problemu:

W pliku CSS wpisz następującą klasę o nazwie .clearfix wraz z pseudo selektorem : Po

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

Następnie w Twoim HTML dodaj .clearfix class to your parent Div. Na przykład:

<div class="clearfix">
    <div></div>
    <div></div>
</div>
Powinno działać zawsze. Możesz wywołać nazwę klasy jako .Grupa zamiast .clearfix , jako to uczyni kod bardziej semantycznym. Zauważ, że nie jest konieczne dodawanie kropki ani nawet spacji w wartości Content pomiędzy podwójnym cudzysłowem"". Ponadto, overflow: auto; może rozwiązać problem, ale powoduje inne problemy, takie jak wyświetlanie paska przewijania i nie jest zalecane.

źródło: Blog Lisy Catalano i Chrisa Coyiera

 6
Author: Ifti Mahmud,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-07 09:14:11

Przed zrobieniem czegokolwiek sprawdź reguły css z:

{ position:absolute }

Usuń, jeśli istnieją i nie są potrzebne.

 5
Author: onalbi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-28 22:46:14

Dodaj właściwość float do #main_content div - zostanie ona rozszerzona o zawartość float

 5
Author: Ray,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-07 09:13:33

Wygląda na to, że to działa

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

Pobiera rozmiar ekranu jako minimum, a jeśli zawartość się rozszerza, rośnie.

 4
Author: SubstanceMX,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-24 18:23:44

Elementy pływające nie zajmują przestrzeni wewnątrz elementu nadrzędnego, jak sama nazwa wskazuje, pływają! Tak więc, jeśli wysokość nie jest jawnie zapewniona elementowi, którego elementy potomne są unoszone, to Element nadrzędny będzie się zmniejszał i wydawał się nie akceptować wymiarów elementu potomnego, również jeśli jego podane overflow:hidden; jego dzieci mogą nie być wyświetlane na ekranie. Istnieje wiele sposobów radzenia sobie z tym problemem:

  1. Wstaw inny element pod pływającym elementem z właściwością clear:both;, lub użyć clear:both; na :after elementu pływającego.

  2. Użyj display:inline-block; lub flex-box zamiast float.

 4
Author: Apoorv Srivastava,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-04 08:56:08

Próbowałeś tradycyjnego sposobu? podaj wysokość głównego kontenera: auto

#container{height:auto}

Używałem tego i to działało większość razy ze mną.

 3
Author: Michelle Dimwaite,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-03 15:19:13

W CSS: #clear_div{clear:both;}

Po znaczniku div wewnętrznego div dodaj ten nowy po div

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

Http://www.w3schools.com/cssref/pr_class_clear.asp : Więcej informacji

 2
Author: ingrid,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-25 00:35:10

Dodałem Bootstrap do projektu z tagami section, które ustawiłem na 100% wysokości ekranu. Działał dobrze, dopóki nie uczyniłem projektu responsywnym, w którym to momencie pożyczyłem część jennyfofenny 's answer więc moje tło sekcji dopasowane tło treści, gdy rozmiar ekranu zmienił się na mniejszych ekranach.

Mój Nowy section CSS wygląda tak:

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

Powiedzmy, że masz sekcję, która ma określony kolor. Używając min-height, jeśli szerokość odcinka zmniejsza się z powodu mniejszego ekranu, wysokość sekcji zostanie rozszerzona, zawartość pozostanie w sekcji, a tło pozostanie pożądanym kolorem.

 2
Author: Adrian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:34:45

Wpadam na to w projekcie - miałem stół wewnątrz div, który wylewał się z dna div. Żadna z poprawek wysokości, które próbowałem, nie zadziałała, ale znalazłem dziwną poprawkę na to, a mianowicie umieszczenie akapitu na dole div z tylko kropką w nim. Następnie Ustaw "kolor" tekstu tak, aby był taki sam jak tło kontenera. Pracował schludnie, jak chcesz i nie wymaga javascript. Nietłukąca się przestrzeń nie zadziała , podobnie jak przezroczysty obraz.

Najwyraźniej po prostu trzeba było zobaczyć, że pod tabelą znajduje się jakaś treść, aby rozciągnąć ją, aby ją pomieścić. Zastanawiam się, czy to zadziała na kogoś innego.

To jest coś, co sprawia, że projektanci uciekają się do układów opartych na tabelach - ilość czasu, jaki spędziłem na wymyślaniu tych rzeczy i uczynieniu ich kompatybilnymi z przeglądarką, doprowadza mnie do szaleństwa.

 1
Author: Nancy Hastings-Trew,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-20 21:19:05

Próbowałem tego i zadziałało

<div style=" position: absolute; direction: ltr;height:auto; min-height:100%">   </div>
 1
Author: Ahmed Aboelela,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-26 11:54:46

Jeśli używasz jQuery UI, mają już klasę, która działa tylko urok dodaj <div> na dole wewnątrz div, który chcesz rozwinąć za pomocą height:auto; następnie dodaj nazwę klasy ui-helper-clearfix lub użyj tego atrybutu stylu i dodaj tak jak poniżej:

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

Dodaj klasę jQuery UI do clear div, a nie div, który chcesz rozwinąć.

 0
Author: Lucas M. Oliveira,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-28 03:16:12

Wiem, że to trochę stary wątek, jednak można to osiągnąć za pomocą min-height właściwości CSS w czysty sposób, więc zostawię to tutaj dla przyszłych odniesień:

Zrobiłem skrzypce na podstawie kodu OP zamieszczonego tutaj: http://jsfiddle.net/U5x4T/1 / , gdy usuniesz i dodasz div wewnątrz, zauważysz, jak kontener rozszerza się lub zmniejsza rozmiar

Jedyne 2 rzeczy, których potrzebujesz, aby to osiągnąć, dodatkowe do kodu OP to:

*przepełnienie w głównym pojemniku (wymagane dla pływających divów)

* właściwość css min-height, więcej informacji dostępnych tutaj: http://www.w3schools.com/cssref/pr_dim_min-height.asp

 0
Author: Juan Carlos Alpizar Chinchilla,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-07 18:02:32

Dodano display: inline do div I rosło automatycznie (nie przewijanie), gdy zawartość wysokości wzrosła wtedy ustawiona wysokość div 200px

 0
Author: Jelle,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-09 10:53:15

Możesz użyć CSS Grid Layout . Wsparcie jest w tej chwili dość szerokie: sprawdź to na caniuse .

Oto przykład na jsfiddle. Również przykład {[4] } z tonami tekstu.

Kod HTML:

<div class="container">
  <div class="header">
   Header
  </div>
  <div class="content">
   Content
  </div>
  <div class="footer">
   Footer
  </div>
</div>

Kod CSS:

html, body {
  width: 100%;
  height: 100%;
  margin: 0;
}

.container {
  width: 100%;
  height: 100%;

  display: grid;
  grid-template-rows: 100px auto 150px;
  grid-template-columns: auto;
}
// style stuff
 0
Author: Sharikov Vladislav,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-01-15 00:26:40

Próbowałem prawie wszystkich sugestii wymienionych powyżej i żadna z nich nie zadziałała. Jednak "display: table" zrobił dla mnie trick.

 0
Author: PongGod,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-05 14:34:04

Nie trzeba używać dużo CSS, wystarczy użyć bootstrap, a następnie użyć:

class="container"

Dla div, który należy wypełnić.

Możesz pobrać bootstrap stąd

 -1
Author: Thadeo Arlo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-21 11:27:37