Mở rộng cha mẹ <div> theo chiều cao của con cái


308

Tôi có một cấu trúc trang tương tự như thế này:

<body>
  <div id="parent">
    <div id="childRightCol">
      /*Content*/
    </div>
    <div id="childLeftCol">
      /*Content*/
    </div>
  </div>
</body>

Tôi muốn phụ huynh divmở rộng heightkhi nội divbộ heighttăng lên.

Chỉnh sửa:
Một vấn đề là nếu widthnội dung con mở rộng ra khỏi widthcửa sổ trình duyệt, CSS hiện tại của tôi đặt một thanh cuộn ngang trên cha mẹ div. Tôi muốn thanh cuộn ở cấp độ trang. Hiện tại div cha mẹ của tôi được đặt thànhoverflow: auto;

Bạn có thể vui lòng giúp tôi với CSS cho việc này không?


6
Bạn có nổi các div bên trong? Bạn có thể đăng CSS hiện tại không?
Eric

2
@Eric - đó cũng là vấn đề của tôi - div con của tôi đã nổi: trái, khi tôi xóa nó, 'cha mẹ' sẽ tự động được nhận ra và kéo dài đến hết chiều cao!
Michael Goltsman

Câu trả lời:


539

Hãy thử điều này cho cha mẹ, nó làm việc cho tôi.

overflow:auto; 

CẬP NHẬT:

Thêm một giải pháp hiệu quả:

Phụ huynh :

display: table;

Con :

display: table-row;

67
overflow:autocó nghĩa là trình duyệt sẽ quyết định áp dụng giá trị nào. Những gì thực sự làm thủ thuật là overflow: overlay.
Alba Mendez

14
@jmendeth Không tồn tại giá trị tràn gọi là "lớp phủ". Điều gì đang làm việc nếu div con được thả nổi đang khai báo overflow:hidden.
Christoph

16
Chờ đợi Thư giãn. Một điều là tuyên bố overlaykhông được hỗ trợ bên ngoài Webkit. Một điều hoàn toàn khác là nói nó hoàn toàn không tồn tại. Xin vui lòng, RTFM đầu tiên . ;)
Alba Mendez

6
Nếu chỉ có trên Webkit thì nó chỉ tồn tại 20%: P Chúc mừng cho liên kết, chưa từng thấy trang web này trước đây. Nó có được duy trì và cập nhật tốt không? Bạn có thề với nó không?
pilau

20
Một câu trả lời khác là stackoverflow.com/questions/450903/ và nó đề xuất để thiết lập display:inline-block. Mà làm việc tuyệt vời cho tôi.
Jens

26

thêm một clear:both. giả sử rằng các cột của bạn đang nổi. Tùy thuộc vào chiều cao của bạn được chỉ định cha mẹ, bạn có thể cần một tràn: auto;

<body>
<div id="parent">
    <div id="childRightCol">
    <div>
    <div id="childLeftCol">
    <div>
    <div id="clear" style="clear:both;"></div>
</div>
</body>

Việc làm này mang lại cho tôi một thanh cuộn ngang trên div cha khi nội dung rộng hơn cửa sổ trình duyệt. Tôi muốn cuộn ngang được trên toàn bộ trang.
Steve Horn

1
Tại sao bạn cần tràn: auto;? Trong thử nghiệm của tôi rõ ràng: cả hai; đủ điều kiện
Paolo Bergantino

3
Điều này cũng giả sử rằng cha mẹ không có chiều cao được chỉ định.
uốn cong

Cách tiếp cận này hoạt động tốt trong Firefox, nhưng không hoạt động trong IE 6. Có cách giải quyết nào không?
Steve Horn

16

Như Jens đã nói trong bình luận

Một câu trả lời khác là Làm thế nào để div không lớn hơn nội dung của nó? Càng và nó đề xuất thiết lập hiển thị: khối nội tuyến. Mà làm việc tuyệt vời cho tôi. - Jens ngày 2 tháng 6 lúc 5:41

Điều này hoạt động tốt hơn nhiều đối với tôi trong tất cả các trình duyệt.


13

Cố gắng cho max-contentchiều cao của cha mẹ.

.parent{
   height: max-content;
}

https://jsfiddle.net/FreeS/so4L83wu/5/


Làm thế nào để tài sản đó cư xử với các trình duyệt khác? Trên MDN: developer.mozilla.org/en-US/docs/Web/CSS/
Robert Molina

Đây dường như là điều duy nhất khắc phục sự cố trong Safari 12.
Ben Wheeler

thật là một giá trị css tuyệt vời! không được hỗ trợ trong Edge _ (ツ) _ /
Samer Murad

4

Đối với những người không thể tìm ra điều này trong hướng dẫn từ câu trả lời này có:

Cố gắng đặt đệm giá trị hơn sau đó 0 , nếu các div con có margin-top hoặc margin-bottom bạn có thể thay thế nó bằng đệm

Ví dụ nếu bạn có

#childRightCol
{
    margin-top: 30px;
}
#childLeftCol
{
    margin-bottom: 20px;
}

Sẽ tốt hơn nếu thay thế nó bằng:

#parent
{
    padding: 30px 0px 20px 0px;
}

4

Sử dụng một cái gì đó như tự xóa divlà hoàn hảo cho một tình huống như thế này . Sau đó, bạn sẽ chỉ sử dụng một lớp học cho phụ huynh ... như:

<div id="parent" class="clearfix">

3

Thêm vào

clear:both; 

Để css của div cha, hoặc thêm một div ở dưới cùng của div cha mà không rõ ràng: cả hai;

Đó là câu trả lời đúng, vì tràn: auto; có thể làm việc cho các bố cục web đơn giản, nhưng sẽ gây rối với các yếu tố bắt đầu sử dụng những thứ như lề âm, v.v.


2

Điều này có làm những gì bạn muốn?

.childRightCol, .childLeftCol
{
    display: inline-block;
    width: 50%;
    margin: 0;
    padding: 0;
    vertical-align: top;
}


1

Tôi đã tạo một div cha mở rộng xung quanh nội dung của div con bằng cách có div con dưới dạng một cột không có bất kỳ thuộc tính định vị nào như được chỉ định tuyệt đối.

Thí dụ:

#wrap {width:400px;padding:10px 200px 10px 200px;position:relative;margin:0px auto;}
#maincolumn {width:400px;}

Dựa trên div maincolumn là div con sâu nhất của #wrap, điều này xác định độ sâu của div #wrap và phần đệm 200px ở hai bên tạo ra hai cột trống lớn để bạn đặt div vị trí tuyệt đối theo ý muốn. Bạn thậm chí có thể thay đổi phần đệm trên cùng và dưới cùng để đặt div div và footer sử dụng vị trí: tuyệt đối.


0

Bạn phải áp dụng giải pháp Clearfix trên thùng chứa cha. Đây là một bài viết tốt giải thích các liên kết sửa chữa


0

Nếu nội dung của bạn bên trong #childRightCol và #childRightCol được thả sang trái hoặc phải, chỉ cần thêm nội dung này vào css:

#childRightCol:before { display: table; content: " "; }
#childRightCol:after { display: table; content: " "; clear: both; }
#childLeftCol:before { display: table; content: " "; }
#childLeftCol:after { display: table; content: " "; clear: both; }

0

Đây là chức năng như được mô tả bởi thông số kỹ thuật - một số câu trả lời ở đây là hợp lệ và phù hợp với những điều sau đây:

Nếu nó có con cấp độ khối, chiều cao là khoảng cách giữa cạnh biên trên cùng của hộp con cấp khối cao nhất không có lề được thu gọn qua nó và cạnh biên dưới của hộp con cấp khối cuối cùng điều đó không có lợi nhuận sụp đổ thông qua nó. Tuy nhiên, nếu phần tử có phần đệm trên cùng khác và / hoặc viền trên cùng, hoặc là phần tử gốc, thì nội dung bắt đầu ở cạnh lề trên cùng của phần con trên cùng. (Trường hợp thứ nhất thể hiện thực tế là các lề trên và dưới của phần tử sụp đổ với các phần tử con trên cùng và dưới cùng, trong trường hợp thứ hai, sự hiện diện của phần đệm / viền ngăn chặn phần lề trên bị sụp xuống. phần tử có phần đệm dưới khác và / hoặc viền dưới cùng, sau đó nội dung kết thúc ở cạnh lề dưới của phần con cuối cùng.

từ đây: https://www.w3.org/TR/css3-box/#block thong


0

Mã dưới đây làm việc cho tôi.

css

.parent{
    overflow: auto;
} 

html

<div class="parent">
    <div class="child1">
    </div>
    <div class="child2">
    </div>
    <div id="clear" style="clear:both;"></div>
</div>


0

Chúng ta bắt đầu từ đâu

Dưới đây là một số HTML và CSS soạn sẵn. Trong ví dụ của chúng tôi, chúng tôi có một phần tử cha với hai phần tử con nổi.

/* The CSS you're starting with may look similar to this.
 * This doesn't solve our problem yet, but we'll get there shortly.
 */

.containing-div {
  background-color: #d2b48c;
  display: block;
  height: auto;
}

.floating-div {
  float: left;
  width: 50%;
}

.floating-div ul {
  display: inline-block;
  height: auto;
}
<!-- The HTML you're starting with might look similar to this -->
<div class="containing-div">
  <div class="floating-div">
    <ul>
      <li>List Item One</li>
      <li>List Item Two</li>
      <li>List Item Three</li>
      <li>List Item Four</li>
    </ul>
  </div>
  <div class="floating-div">
    <ul>
      <li>List Item Five</li>
      <li>List Item Six</li>
      <li>List Item Seven</li>
      <li>List Item Eight</li>
    </ul>
  </div>
</div>

Giải pháp số 1: tràn: tự động

Một giải pháp hoạt động trong tất cả các trình duyệt hiện đại và trong Internet Explorer trở lại IE8 là thêm overflow: autovào phần tử cha. Điều này cũng hoạt động trong IE7, với thanh cuộn được thêm vào.

/* Our Modified CSS.
 * This is one way we can solve our problem.
 */

.containing-div {
  background-color: #d2b48c;
  display: block;
  height: auto;
  overflow: auto;
  /*This is what we added!*/
}

.floating-div {
  float: left;
  width: 50%;
}

.floating-div ul {
  display: inline-block;
  height: auto;
}

Giải pháp số 2: Container nổi

Một giải pháp khác hoạt động trong tất cả các trình duyệt hiện đại và quay lại IE7 là làm nổi bộ chứa chính.

Điều này có thể không phải lúc nào cũng thực tế, vì việc nổi div cha mẹ của bạn có thể ảnh hưởng đến các phần khác trong bố cục trang của bạn.

/* Modified CSS #2.
 * Floating parent div.
 */

.containing-div {
  background-color: #d2b48c;
  display: block;
  float: left;
  /*Added*/
  height: auto;
  width: 100%;
  /*Added*/
}

.floating-div {
  float: left;
  width: 50%;
}

.floating-div ul {
  display: inline-block;
  height: auto;
}

Phương pháp # 3: Thêm Div xóa các phần tử bên dưới

/* 
 * CSS to Solution #3.
 */

.containing-div {
  background-color: #d2b48c;
  display: block;
  height: auto;
}

.floating-div {
  float: left;
  width: 50%;
}

.floating-div ul {
  display: inline-block;
  height: auto;
}


/*Added*/

.clear {
  clear: both;
}
<!-- Solution 3, Add a clearing div to bottom of parent element -->
<div class="containing-div">
  <div class="floating-div">
    <ul>
      <li>List Item One</li>
      <li>List Item Two</li>
      <li>List Item Three</li>
      <li>List Item Four</li>
    </ul>
  </div>
  <div class="floating-div">
    <ul>
      <li>List Item Five</li>
      <li>List Item Six</li>
      <li>List Item Seven</li>
      <li>List Item Eight</li>
    </ul>
  </div>
  <div class="clear"></div>
</div>

Phương pháp # 4: Thêm phần xóa Div cho phần tử cha mẹ Giải pháp này khá dễ dàng cho các trình duyệt cũ hơn và các trình duyệt mới hơn.

/* 
 * CSS to Solution #4.
 */

.containing-div {
  background-color: #d2b48c;
  display: block;
  height: auto;
}

.floating-div {
  float: left;
  width: 50%;
}

.floating-div ul {
  display: inline-block;
  height: auto;
}


/*Added*/

.clearfix {
  clear: both;
}

.clearfix:after {
  clear: both;
  content: "";
  display: table;
}
<!-- Solution 4, make parent element self-clearing -->
<div class="containing-div clearfix">
  <div class="floating-div">
    <ul>
      <li>List Item One</li>
      <li>List Item Two</li>
      <li>List Item Three</li>
      <li>List Item Four</li>
    </ul>
  </div>
  <div class="floating-div">
    <ul>
      <li>List Item Five</li>
      <li>List Item Six</li>
      <li>List Item Seven</li>
      <li>List Item Eight</li>
    </ul>
  </div>
</div>

từ https://www.lockedownseo.com/parent-div-100-height-child-floated-elements/


-1

Tôi sử dụng CSS này cho cha mẹ và nó hoạt động:

min-height:350px;
background:url(../images/inner/details_middle.gif) repeat-y 0 0 ;
padding:5px 10px;   
text-align:right;
overflow: hidden;
position: relative;
width: 100%;

2
Bạn sử dụng chiều cao tối thiểu, vì vậy không được tính;)
pilau

-1

#parent{
  background-color:green;
  height:auto;
  width:300px;
  overflow:hidden;
}

#childRightCol{
  color:gray;
  background-color:yellow;
  margin:10px;
  padding:10px;
}
<div id="parent">
    <div id="childRightCol">
        <p>
          Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque vulputate sit amet neque ac consequat.
        </p>
    </div>
  </div>

bạn được quản lý bằng cách sử dụng overflow:hidden;tài sản trong css

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.