การขยายพาเรนต์ <div> เป็นความสูงของลูก


308

ฉันมีโครงสร้างหน้าคล้ายกับนี้:

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

ฉันต้องการสำหรับผู้ปกครองdivที่จะขยายในheightเมื่อภายในdiv's heightเพิ่มขึ้น

แก้ไข:
ปัญหาหนึ่งคือถ้าwidthเนื้อหาลูกขยายผ่านwidthหน้าต่างเบราว์เซอร์ CSS ปัจจุบันของฉันวางแถบเลื่อนแนวนอนบนพาเรนdivต์ ฉันต้องการให้แถบเลื่อนอยู่ในระดับหน้าเว็บ ขณะนี้ div หลักของฉันถูกตั้งค่าเป็นoverflow: auto;

คุณช่วยฉันด้วย CSS ให้หน่อยได้ไหม?


6
คุณกำลังลอย divs ภายในหรือไม่? คุณสามารถโพสต์ CSS ปัจจุบันได้หรือไม่
Eric

2
@ เอริค - มันเป็นปัญหาของฉันด้วย - ลูกของฉัน div (s) มีโฟลต: ซ้ายเมื่อฉันลบมัน 'ผู้ปกครอง' ได้รับการยอมรับโดยอัตโนมัติและยืดให้เต็มความสูง!
Michael Goltsman

คำตอบ:


539

ลองใช้สำหรับผู้ปกครองมันใช้งานได้สำหรับฉัน

overflow:auto; 

UPDATE:

อีกหนึ่งโซลูชั่นที่ใช้งานได้:

ผู้ปกครอง :

display: table;

เด็ก :

display: table-row;

67
overflow:autoหมายความว่าเบราว์เซอร์ควรตัดสินใจว่าจะใช้ค่าใด จริงๆสิ่งที่ไม่overflow: overlayเคล็ดลับคือ
Alba Mendez

14
@jmendeth ค่า overflow ที่เรียกว่า "overlay" ไม่มีอยู่ สิ่งที่ทำงานถ้า divs overflow:hiddenเด็กกำลังลอยอยู่ในประกาศ
Christoph

16
Waaaait ผ่อนคลาย. สิ่งหนึ่งที่อ้างว่าoverlayไม่รองรับนอก Webkit อีกอย่างที่แตกต่างกันอย่างสิ้นเชิงคือการบอกว่ามันไม่มีอยู่เลย กรุณาRTFM แรก ;)
Alba Mendez

6
ถ้ามันอยู่ใน Webkit เท่านั้นมันมีอยู่ 20% เท่านั้น: P ไชโยสำหรับลิงค์ไม่เคยเห็นเว็บไซต์นี้มาก่อน มันได้รับการดูแลและปรับปรุงเป็นอย่างดีหรือไม่? คุณสาบานด้วยหรือไม่
Pilau

20
คำตอบทางเลือกคือstackoverflow.com/questions/450903/...display:inline-blockและจะเสนอให้ชุด ซึ่งใช้งานได้ดีสำหรับฉัน
Jens

26

clear:bothเพิ่ม สมมติว่าคอลัมน์ของคุณลอย ทั้งนี้ขึ้นอยู่กับความสูงของคุณระบุผู้ปกครองคุณอาจต้องการมากเกินไป: อัตโนมัติ;

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

การทำเช่นนี้ทำให้แถบเลื่อนแนวนอนบน div parent เมื่อเนื้อหากว้างกว่าหน้าต่างเบราว์เซอร์ ฉันต้องการให้การเลื่อนในแนวนอนเป็นแบบทั้งหน้า
Steve Horn

1
ทำไมคุณถึงต้องการโอเวอร์โฟลว์: auto;? ในการทดสอบของฉันชัดเจน: ทั้งสอง; พอเพียง
เปาโลเบอร์กันติโน

3
นอกจากนี้ยังสมมติว่าผู้ปกครองไม่ได้ระบุความสูง
bendewey

วิธีนี้ใช้งานได้ดีใน Firefox แต่ไม่ทำงานใน IE 6 วิธีแก้ปัญหาใด ๆ
สตีฟฮอร์น

16

อย่างที่เจนส์กล่าวไว้ในความคิดเห็น

คำตอบทางเลือกคือจะทำให้ div ไม่ใหญ่กว่าเนื้อหาได้อย่างไร …และเสนอให้ตั้งค่าการแสดง: inline-block ซึ่งใช้งานได้ดีสำหรับฉัน - Jens Jun 2 เวลา 5:41

มันใช้งานได้ดีกว่าสำหรับฉันในเบราว์เซอร์ทั้งหมด


13

พยายามที่จะให้max-contentความสูงของผู้ปกครอง

.parent{
   height: max-content;
}

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


คุณสมบัตินั้นทำงานกับเบราว์เซอร์อื่นอย่างไร ใน MDN: developer.mozilla.org/en-US/docs/Web/CSS/…
Robert Molina

สิ่งนี้ดูเหมือนจะเป็นสิ่งเดียวที่แก้ไขปัญหาใน Safari 12
Ben Wheeler

ช่างเป็น css ที่ยอดเยี่ยม! ไม่ได้รับการสนับสนุนใน Edge ¯_ (ツ) _ / ¯
Samer Murad

4

สำหรับผู้ที่ไม่สามารถหาคำแนะนำได้จากคำตอบนี้ :

พยายามที่จะตั้งpaddingคุ้มค่ามากขึ้นแล้ว0ถ้า divs เด็กมีขอบด้านบนหรือขอบล่างคุณสามารถแทนที่ด้วย padding

ตัวอย่างเช่นถ้าคุณมี

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

มันจะดีกว่าที่จะแทนที่ด้วย:

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

4

ใช้สิ่งที่ต้องการด้วยตนเองล้างdivเหมาะสำหรับสถานการณ์เช่นนี้ จากนั้นคุณจะใช้คลาสกับผู้ปกครอง ... เช่น:

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

3

เพิ่ม

clear:both; 

ลงใน css ของ div parent หรือเพิ่ม div ที่ด้านล่างของ div parent ที่ไม่ชัดเจน: ทั้งสอง;

นั่นคือคำตอบที่ถูกต้องเพราะล้น: อัตโนมัติ; อาจทำงานกับเลย์เอาต์ทางเว็บแบบง่าย ๆ แต่จะยุ่งกับองค์ประกอบที่เริ่มใช้สิ่งต่าง ๆ เช่นมาร์จิ้นติดลบ ฯลฯ


2

สิ่งนี้ทำในสิ่งที่คุณต้องการหรือไม่?

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


1

ฉันทำให้ผู้ปกครอง div ขยายเนื้อหาของลูกย่อยโดยให้ลูก div เป็นคอลัมน์เดียวที่ไม่มีแอตทริบิวต์การระบุตำแหน่งเช่นระบุแน่นอน

ตัวอย่าง:

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

จาก maincolumn div เป็น div ลูกที่ลึกที่สุดของ #wrap สิ่งนี้จะกำหนดความลึกของ #wrap div และการเติม 200px ที่ด้านใดด้านหนึ่งสร้างคอลัมน์ว่างสองคอลัมน์ขนาดใหญ่เพื่อให้คุณวาง div ในตำแหน่งที่ต้องการ คุณสามารถเปลี่ยน padding ด้านบนและล่างเพื่อวาง div ส่วนหัวและส่วนท้าย div โดยใช้ position: absolute



0

หากเนื้อหาของคุณใน #childRightCol และ #childRightCol ถูกลอยไปทางซ้ายหรือขวาเพียงเพิ่มลงใน 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

สิ่งนี้ทำงานตามที่อธิบายไว้โดยสเป็ค - คำตอบหลายข้อในที่นี้ใช้ได้และสอดคล้องกับสิ่งต่อไปนี้:

ถ้ามันมีลูกระดับบล็อกความสูงคือระยะห่างระหว่างขอบด้านบนสุดของกล่องระดับบล็อกระดับบนสุดที่ไม่มีระยะขอบยุบผ่านและขอบด้านล่างของกล่องระดับบล็อกระดับล่างสุด ที่ไม่มีระยะขอบยุบผ่าน อย่างไรก็ตามหากองค์ประกอบมีช่องว่างภายในที่ไม่เป็นศูนย์และ / หรือขอบด้านบนหรือเป็นองค์ประกอบรากเนื้อหาจะเริ่มที่ขอบด้านบนสุดของชายด์สูงสุด (กรณีแรกเป็นการแสดงออกถึงความจริงที่ว่าระยะขอบด้านบนและด้านล่างขององค์ประกอบจะยุบลงกับเด็กที่อยู่บนสุดและต่ำสุดขณะที่ในกรณีที่สองการปรากฏตัวของช่องว่างภายใน / ขอบป้องกันขอบด้านบนจากการยุบ) องค์ประกอบมีช่องว่างภายในด้านล่างที่ไม่ใช่ศูนย์และ / หรือเส้นขอบด้านล่างจากนั้นเนื้อหาจะสิ้นสุดที่ขอบด้านล่างของชายด์ด้านล่าง

จากที่นี่: https://www.w3.org/TR/css3-box/#blockwidth


0

รหัสด้านล่างทำงานสำหรับฉัน

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

เราจะเริ่มจากที่ใด

นี่คือตัวอย่างแผ่น HTML และ CSS ในตัวอย่างของเราเรามีองค์ประกอบหลักที่มีองค์ประกอบย่อยสองชุด

/* 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>

โซลูชัน # 1: ล้น: อัตโนมัติ

วิธีแก้ปัญหาที่ใช้งานได้ในเบราว์เซอร์ที่ทันสมัยและใน Internet Explorer กลับไปที่ IE8 คือการเพิ่มoverflow: autoองค์ประกอบหลัก นอกจากนี้ยังใช้งานได้ใน IE7 โดยเพิ่มแถบเลื่อน

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

โซลูชัน # 2: ลอยคอนเทนเนอร์หลัก

โซลูชันอื่นที่ใช้งานได้ในเบราว์เซอร์สมัยใหม่ทั้งหมดและกลับไปที่ IE7 คือการลอยคอนเทนเนอร์หลัก

สิ่งนี้อาจใช้ไม่ได้เสมอไปเพราะการลอยตัว div parent ของคุณอาจส่งผลต่อส่วนอื่น ๆ ของเค้าโครงหน้ากระดาษของคุณ

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

วิธีที่ # 3: เพิ่ม Div Clearing ด้านล่างองค์ประกอบที่ลอย

/* 
 * 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>

วิธีที่ # 4: เพิ่ม Div สำนักหักบัญชีกับองค์ประกอบหลัก โซลูชันนี้จะค่อนข้าง bulletproof สำหรับเบราว์เซอร์รุ่นเก่าและเบราว์เซอร์รุ่นใหม่เหมือนกัน

/* 
 * 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>

จากhttps://www.lockedownseo.com/parent-div-100-height-child-floated-elements/


-1

ฉันใช้ CSS นี้เพื่อผู้ปกครองและทำงาน:

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
คุณใช้ความสูงขั้นต่ำจึงไม่นับ;)
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>

คุณจัดการโดยใช้overflow:hidden;คุณสมบัติใน css

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.