Dlaczego nadrzędny element div ma zerową wysokość, skoro ma zmiennoprzecinkowe elementy podrzędne


134

W moim CSS mam następujące elementy. Wszystkie marginesy / wypełnienia / obramowania są globalnie resetowane do 0.

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

Teraz, kiedy piszę mój HTML jako

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

strona renderuje się poprawnie. Jednak kiedy sprawdzam elementy, div#wrapperjest pokazany jako 0pxwysoki. Spodziewałbym się, że rozwinie się do końca div.contenti div.lbar... Dlaczego tak się dzieje?

Ponownie strona renderuje się dobrze. To zachowanie po prostu mnie wprawia w zakłopotanie.


4
Może to być przydatne dla Ciebie CSS Floats 101 , z A List Apart .
David mówi, że przywróć Monikę

Odpowiedzi:


254

Pływająca zawartość nie wpływa na wysokość jej kontenera. Element nie zawiera żadnej treści, która nie jest zmienna (więc nic nie zatrzymuje wysokości kontenera równej 0, tak jakby był pusty).

Ustawienie overflow: hiddenw kontenerze pozwoli tego uniknąć, ustanawiając nowy kontekst formatowania bloku . Zobacz metody zawierające elementy zmiennoprzecinkowe dla innych technik i zawierające elementy pływające, aby wyjaśnić, dlaczego CSS został zaprojektowany w ten sposób.


Oto inne podejście do tworzenia kontenerów zawierających elementy pływające, które jest rozwiązywane w CSS bez konieczności dodawania elementów do strony.
Phil

59

Zwykle, float nie są one uwzględniane w układzie ich rodziców.

Aby temu zapobiec, dodaj overflow: hiddendo rodzica.


16
Dzięki, to działa, ale nie rozumiem, dlaczego ... overflow: hidden mówi się, że ukrywa zawartość, która się przepełnia, a nie powiększa element, aby ją zawrzeć.
ripper234


8

Nie jestem pewien, czy to właściwy sposób, ale rozwiązałem to, dodając display: inline-block;do elementu div wrapper.

#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
To było dokładne rozwiązanie, którego szukałem. Przepełnienie: ukryty powoduje, że cień pudełka naturalnie znika.
Kitiara
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.