Mengapa orangtua div ketinggian nol ketika anak-anak melayang

131

Saya memiliki yang berikut di CSS saya. Semua margin / bantalan / batas secara global diatur ulang ke 0.

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

Sekarang ketika saya menulis HTML saya sebagai

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

halaman dirender dengan benar. Namun, ketika saya memeriksa elemen, div#wrapperditampilkan sebagai 0pxtinggi. Saya akan berharap itu akan berkembang sampai akhir div.contentdan div.lbar... Mengapa ini terjadi?

Lagi-lagi, halaman ini membuat baik-baik saja. Perilaku ini hanya membingungkan saya.

Chris Stryczynski
sumber
4
Ini mungkin berguna bagi Anda CSS Floats 101 , dari A List Apart .
David mengatakan mengembalikan Monica

Jawaban:

250

Konten yang mengambang tidak mempengaruhi ketinggian wadahnya. Elemen tidak mengandung konten yang tidak mengambang (jadi tidak ada yang menghentikan ketinggian wadah menjadi 0, seolah-olah kosong).

Pengaturan overflow: hiddenpada wadah akan menghindarinya dengan membuat konteks pemformatan blok baru . Lihat metode untuk mengandung pelampung untuk teknik lain dan berisi pelampung untuk penjelasan tentang mengapa CSS dirancang dengan cara ini.

Quentin
sumber
Berikut pendekatan lain untuk membuat wadah berisi pelampung yang diselesaikan dalam CSS tanpa harus menambahkan elemen ke halaman.
Phil
56

Biasanya, floats tidak dihitung dalam tata letak orang tua mereka.

Untuk mencegahnya, tambahkan overflow: hiddenke induknya.

Slaks
sumber
16
Terima kasih, ini berfungsi, tapi saya tidak mengerti mengapa ... melimpah: disembunyikan dikatakan menyembunyikan konten yang meluap, bukan untuk memperbesar elemen untuk menampungnya.
ripper234
@ ripper234 Inilah sebabnya: stackoverflow.com/questions/25818199/…
kristianp
6

Saya tidak yakin ini adalah cara yang benar tetapi saya menyelesaikannya dengan menambahkan display: inline-block;div pembungkus.

#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%;
}
Melih
sumber
1
Ini adalah solusi tepat yang saya cari. Overflow: menyembunyikan bayangan kotak menghilang, secara alami.
Kitiara