Kéo dài chiều cao div con để điền vào cha mẹ có chiều cao động


94

Như có thể thấy trong fiddle sau, tôi có hai chữ cái div, được chứa trong một dấu cha mẹ divđã kéo dài để chứa div lớn, mục tiêu của tôi là làm cho các con divđó có chiều cao bằng nhau.

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



@MikeHometchko có rất nhiều trên CSS nhưng không có trên CSS3. Tôi nghĩ vậy.
Mr_Green

1
@Mr_Green, sự khác biệt ở cấp độ cơ bản giữa "CSS" và CSS3 là không đáng kể nên tôi không thấy vấn đề. Đây là một vấn đề rất phổ biến đã được hỏi và trả lời đến chết.
Mike H.

1
@MikeHometchko kiểm tra giải pháp của tôi. Tôi chắc chắn rằng không ai đã trả lời như vậy trước đây.
Mr_Green

Câu trả lời:


47

Giải pháp là sử dụng display: table-cellđể đưa các phần tử đó vào nội tuyến thay vì sử dụng display: inline-blockhoặc 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>

Làm việc Fiddle


Điều này không hoạt động nếu phần tử mẹ là ô bảng.
Tomáš Zato - Phục hồi Monica

55

Sử dụng display: flexđể kéo dài divs của bạn :

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

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

JSFIDDLE


18

Thêm CSS sau:

Đối với div mẹ:

style="display: flex;"

Đối với div con:

style="align-items: stretch;"

Tôi cần thêm stretchvào những đứa trẻ để linh hoạt hoạt động cho tôi.
BadHorsie

4

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

Tôi nghĩ bạn có thể sử dụng hiển thị dưới dạng lưới:

.parent { display: grid };

Bạn đã kiểm tra câu trả lời của mình bằng cách sử dụng cùng một mã của người đăng ban đầu chưa?
Mark Stewart

Nó hoạt động và không yêu cầu bất kỳ CSS nào trên con. Đó là bởi vì một ô CSS Grid sẽ có autohàng và ô theo mặc định. Nó thực sự hoạt động khá tốt với IE nếu bạn sử dụng display: -ms-gridđể tránh một số flexbugs, miễn là bạn chỉ có một con.
ShortFuse

-6

Bạn có thể làm điều đó dễ dàng với một chút jQuery

$(document).ready(function(){
  var parentHeight = $("#parentDiv").parent().height();
  $("#childDiv").height(parentHeight);
});

3
Mặc dù sau khi thay đổi kích thước cửa sổ trình duyệt, điều này sẽ bị hỏng, trong khi các CSS vẫn hoạt động.
SharpC
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.