Чому материнська висота діва дорівнює нулю, коли в ньому плавали діти


131

У моєму CSS є наступне. Усі поля / прокладки / межі глобально скидаються до 0.

#wrapper{width: 75%; min-width: 800px;}
.content{text-align: justify; float: right; width: 90%;}
.lbar{text-align: justify; float: left; width: 10%;}

Тепер, коли я пишу свій HTML як

<div id="wrapper">
    <div class="content">
        some text here
    </div>
    <div class="lbar">
        some text here
    </div>
</div>

сторінка відображається правильно. Однак, коли я перевіряю елементи, div#wrapperвиявляється як 0pxвисокий. Я б очікував, що він розшириться до кінця div.contentі div.lbar... Чому це відбувається?

Знову сторінка виглядає добре. Така поведінка мене просто вражає.


4
Це може бути корисним для вас CSS Floats 101 , від A List Apart .
Девід каже повернути Моніку

Відповіді:


250

Вміст, який плаває, не впливає на висоту його контейнера. Елемент не містить вмісту, який не плаває (тому ніщо не зупиняє висоту контейнера 0, як ніби він порожній).

Встановлення overflow: hiddenконтейнера дозволить уникнути цього, встановивши новий контекст форматування блоку . Дивіться методи, що містять плавки для інших методів та містять плавки для пояснення того, чому CSS був розроблений таким чином.


Ось ще один підхід до створення контейнерів містить поплавці, які вирішуються в CSS без необхідності додавати елементи на сторінку.
Філ

56

Зазвичай, floatвони не враховуються у макеті своїх батьків.

Щоб цього не допустити, додайте overflow: hiddenдо батьківського.


16
Дякую, це працює, але я не розумію, чому ... переповнення: прихований, як кажуть, приховує вміст, який переповнює, а не для збільшення елемента, щоб його містити.
ripper234

@ ripper234 Ось чому: stackoverflow.com/questions/25818199/…
kristianp

6

Я не впевнений, що це правильний шлях, але я вирішив це, додавши display: inline-block;в оболонку div.

#wrapper{
    display: inline-block;
    /*border: 1px black solid;*/
    width: 75%;
    min-width: 800px;
}

.content{
    text-align: justify; 
    float: right; 
    width: 90%;
}

.lbar{
    text-align: justify; 
    float: left; 
    width: 10%;
}

1
Це було саме те рішення, яке я шукав. Переповнення: прихована причина тіні коробки зникає, природно.
Кітіара
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.