Rozciągnij wysokość elementu div, aby wypełnić element nadrzędny, który ma dynamiczną wysokość

96

Jak widać na poniższych skrzypcach, mam dwa divs, zawarte w rodzicu, divktóry rozciągnął się, aby zawrzeć duży div, moim celem jest divwyrównanie wzrostu tych dzieci .

http://fiddle.jshell.net/y9bM4/

Khaled
źródło
@MikeHometchko jest wiele w CSS, ale nie w CSS3. Chyba tak.
Mr_Green
1
@Mr_Green różnice na podstawowym poziomie między „CSS” a CSS3 są trywialne, więc nie widzę problemu. Jest to bardzo częsty problem, o który zadawano i udzielano odpowiedzi na śmierć.
Mike H.
1
@MikeHometchko sprawdź moje rozwiązanie. Jestem pewien, że nikt wcześniej nie odpowiedział tak samo.
Mr_Green

Odpowiedzi:

48

Rozwiązaniem jest użycie display: table-celldo umieszczenia tych elementów w tekście zamiast używania display: inline-blocklub float: left.

div#container {
  padding: 20px;
  background: #F1F1F1
}
.content {
  width: 150px;
  background: #ddd;
  padding: 10px;
  display: table-cell;
  vertical-align: top;
}
.text {
  font-family: 12px Tahoma, Geneva, sans-serif;
  color: #555;
}
<div id="container">
  <div class="content">
    <h1>Title 1</h1>

    <div class="text">Sample Text. Sample Text. Sample Text. Sample Text. Sample Text. Sample Text. Sample Text. Sample Text. Sample Text.
      <br>Sample Text. Sample Text. Sample Text.
      <br>Sample Text.
      <br>
    </div>
  </div>
  <div class="content">
    <h1>Title 2</h1>

    <div class="text">Sample Text. Sample Text. Sample Text. Sample Text. Sample Text. Sample Text. Sample Text. Sample Text. Sample Text.</div>
  </div>
</div>

Working Fiddle

Pan Zielony
źródło
Nie działa to jednak, jeśli elementem nadrzędnym jest komórka tabeli.
Tomáš Zato - Przywróć Monikę
55

Użyj, display: flexaby rozciągnąć swoje divs:

div#container {
    padding:20px;
    background:#F1F1F1;
    display: flex;
}

.content {
    width:150px;
    background:#ddd;
    padding:10px;
    margin-left: 10px;
}

JSFIDDLE

Trong Lam Phan
źródło
19

Dodaj następujący CSS:

Dla nadrzędnego div:

style="display: flex;"

Dla elementu DIV podrzędnego:

style="align-items: stretch;"
Ayan
źródło
Musiałem dodać stretchdzieciom, żeby flex działał dla mnie.
BadHorsie,
4

https://www.youtube.com/watch?v=jV8B24rSN5o

Myślę, że możesz użyć wyświetlania jako siatki:

.parent { display: grid };
Gelo K.
źródło
Czy przetestowałeś swoją odpowiedź, używając tego samego kodu oryginalnego plakatu?
Mark Stewart,
Działa i nie wymaga CSS od dziecka. Dzieje się tak, ponieważ komórka siatki CSS będzie autodomyślnie zawierała wiersz i komórkę. W rzeczywistości działa całkiem nieźle z IE, jeśli używasz display: -ms-griddo unikania niektórych flexbugów, o ile masz tylko jedno dziecko.
ShortFuse,
-6

Możesz to łatwo zrobić z odrobiną jQuery

$(document).ready(function(){
  var parentHeight = $("#parentDiv").parent().height();
  $("#childDiv").height(parentHeight);
});
Levon Matevosyan
źródło
3
Chociaż po zmianie rozmiaru okna przeglądarki to się zepsuje, podczas gdy CSS nadal będą działać.
SharpC