CSS container div ไม่ได้รับความสูง


116

ฉันต้องการให้คอนเทนเนอร์ div ของฉันได้รับความสูงสูงสุดของความสูงของเด็ก โดยไม่รู้ว่าเด็กdivจะมีความสูงเท่าใด ผมพยายามออกในJSFiddle ภาชนะdivเป็นสีแดง ซึ่งไม่ปรากฏขึ้น ทำไม?

คำตอบ:


282

เพิ่มคุณสมบัติต่อไปนี้:

.c{
    ...
    overflow: hidden;
}

สิ่งนี้จะบังคับให้คอนเทนเนอร์เคารพความสูงขององค์ประกอบทั้งหมดภายในโดยไม่คำนึงถึงองค์ประกอบที่ลอยอยู่
http://jsfiddle.net/gtdfY/3/

UPDATE

เมื่อเร็ว ๆ นี้ฉันกำลังทำโปรเจ็กต์ที่ต้องใช้เคล็ดลับนี้ แต่จำเป็นต้องอนุญาตให้มีการแสดงล้นดังนั้นคุณสามารถใช้องค์ประกอบหลอกเพื่อล้างการลอยตัวของคุณได้อย่างมีประสิทธิภาพเพื่อให้ได้เอฟเฟกต์เดียวกันอย่างมีประสิทธิภาพในขณะที่ปล่อยให้ทุกองค์ประกอบล้น

.c:after{
    clear: both;
    content: "";
    display: block;
}

http://jsfiddle.net/gtdfY/368/


8
โดยพื้นฐานแล้วการเพิ่มคุณสมบัตินี้จะบังคับให้กล่องด้านนอกละเว้นกฎที่คอนเทนเนอร์ลอยมีโดยที่พวกเขาไม่ได้คำนวณความสูงสำหรับคอนเทนเนอร์และนำไปใช้กับการวาดพื้นหลังแบบเต็ม
Nightfirecat

4
ว้าวฉันคิดว่า "อะไรนะที่ไม่ได้ผล" แต่ฉันจะยี้ ฉันคิดว่ามันจะทำตัวไม่ถูก ขอบคุณ
fie

1
นี่มันไม่แฮ็คจริงๆเหรอ? สำหรับฉันมันเอาชนะจุดประสงค์ของการล้น ฉันไม่เข้าใจว่าเหตุใดจึงเป็นคำตอบที่ถูกต้องและได้รับการโหวตมากที่สุด
Andrew Weir

3
@AndrewWeir ฉันจะยอมรับจนถึงตอนนี้ฉันยังไม่แน่ใจทั้งหมดว่าทำไมวิธีการขยายตู้คอนเทนเนอร์แบบนี้เพื่อให้พิจารณาขนาดของตู้ได้อย่างถูกต้อง ตาม ไป หลาย แหล่งที่มามันก็ดูเหมือนว่านี้จะทำให้องค์ประกอบเพื่อเปลี่ยนโหมดการแสดงผลจากการอนุญาตให้ล้นมองเห็นไม่ได้ทำเช่นนั้นและในการทำเช่นนี้องค์ประกอบกองกำลังที่จะไม่อนุญาตให้ล้นที่
Nightfirecat

2
วิธีแรกใช้โอเวอร์โฟลว์ได้ผลสำหรับฉัน วิธีที่สองยังใช้ได้ผลและดูเหมือนว่าจะมีความเสี่ยงน้อยกว่าในกรณีที่ปริมาณน้ำล้นในอนาคต ฉันหวังว่าฉันจะโหวตได้สองครั้งเท่านั้น
Tyler Collier

28

คุณกำลังลอยเด็กซึ่งหมายความว่าพวกเขา "ลอย" อยู่หน้าภาชนะ ในการรับความสูงที่ถูกต้องคุณต้อง "ล้าง" ลูกลอย

div style = "clear: both" เคลียร์ลอยและให้ความสูงที่ถูกต้องกับคอนเทนเนอร์ ดูhttp://css.maxdesign.com.au/floatutorial/clear.htmสำหรับข้อมูลเพิ่มเติมเกี่ยวกับลอย

เช่น.

<div class="c">
    <div class="l">

    </div>
    <div class="m">
        World
    </div>
    <div style="clear: both" />
</div>

นี้ชัดเจน: ทั้งสอง; ดูเหมือนว่าจะเป็นวิธีแก้ปัญหาที่เหมาะสมสำหรับความสูงของตู้คอนเทนเนอร์เพราะปัญหาคือเด็กลอยน้ำ ดังนั้นแนวทางนี้จึงดูดีกว่า overflow: hidden; หนึ่งข้างต้น
Ronnie Depp

ขอบคุณ @Yoeri สำหรับการแบ่งปันวิธีง่ายๆนี้ ยกนิ้วให้! ฉันกำลังมองหาโซลูชันเดียวกันสำหรับการออกแบบใหม่ของฉันเนื่องจากเป็นเวลาเกือบ 6 ปีแล้วที่ฉันออกแบบเค้าโครงเว็บครั้งล่าสุดหลังจากที่ฉันมุ่งเน้นไปที่มุมมองการพัฒนา PHP แต่เพียงอย่างเดียวในด้านการออกแบบ
Ronnie Depp



3

วิธีแก้ปัญหากันกระสุนที่ดีที่สุดและดีที่สุดคือการเพิ่ม::beforeและ::afterเทียมลงในภาชนะ ดังนั้นหากคุณมีตัวอย่างรายการเช่น:

<ul class="clearfix">
    <li></li>
    <li></li>
    <li></li>
</ul>

และทุกองค์ประกอบในรายการมีfloat:leftคุณสมบัติคุณควรเพิ่มใน css ของคุณ:

.clearfix::after, .clearfix::before {
     content: '';
     clear: both;
     display: table;
}

หรือคุณอาจลองใช้display:inline-block;คุณสมบัติจากนั้นคุณไม่จำเป็นต้องเพิ่ม clearfix ใด ๆ

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