Dış div'i kayan içeriğiyle otomatik olarak aynı yükseklikte yapın


95

divSiyah olan dış divtarafın içinde yüzmesini istiyorum. Kullanmak istediğim daha dont style='height: 200pxiçinde divolan outerdivben (örneğin, yüzer otomatik içeriğinin yüksekliği olmasını istediğiniz gibi id divler).

<div id='outerdiv' style='border: 1px solid black;background-color: black;'>
<div style='width=300px;border: red 1px dashed;float: left;'>
    <p>xxxxxxxxxxxxxxxxxxxxxxxxxxxxx</p>
</div>

<div style='width=300px;border: red 1px dashed;float: right;'>
    <p>zzzzzzzzzzzzzzzzzzzzzzzzzzzzz</p>
</div>

Bunu nasıl başarabilirim?

Yanıtlar:


169

outerdivCSS'sini buna ayarlayabilirsiniz

#outerdiv {
    overflow: hidden; /* make sure this doesn't cause unexpected behaviour */
}

Bunu sonuna ile bir eleman ekleyerek de yapabilirsiniz clear: both. Bu, JS ile (iyi bir çözüm değildir) veya :afterCSS sözde elemanıyla (eski IE'lerde yaygın olarak desteklenmez ) normal olarak eklenebilir .

Sorun şu ki, kaplar yüzen çocukları içerecek şekilde doğal olarak genişlemiyor. İlk örneği kullanarak uyarıda bulunun, ana öğenin dışında herhangi bir alt öğe varsa, bunlar gizlenecektir. Özellik değeri olarak 'auto' da kullanabilirsiniz, ancak bu, dışarıda herhangi bir öğe görünürse kaydırma çubuklarını çağırır.

Üst kapsayıcıyı yüzdürmeyi de deneyebilirsiniz, ancak tasarımınıza bağlı olarak bu imkansız / zor olabilir.


37
Keşke neden taşma mantığını anlamış olsaydım: bu durumda gizli işler.
masteroleary

2
Evet, bunun sezgiye aykırı olduğunu düşünenin sadece ben olmadığımı umuyordum. alex?
normalmike

3
@masteroleary @regularmike HTML/CSShiçbir zaman iyi bir UI teknolojisi olmamıştı, bu yüzden sezgisel olmayan şeyler oldukça yaygındır :)
Yuriy Nakonechnyy

2
@masteroleary Bunun eski bir konu olduğunun farkındayım, ancak yakın zamanda stackoverflow.com/questions/21041297#21041625 adresinde benzer bir soruyu yanıtlamaya çalıştım - umarım yardımcı olur
xec

1
floatÇözüm için +1 . Diğerleriyle çok iyi çalışır, özellikle de Twitter Bootstrap ile eşleştirildiğinde.
Fizzix

17

Öncelikle, CSS stilinizi satır içi yapmak yerine harici bir CSS dosyasında yapmanızı şiddetle tavsiye ederim. Sınıfları kullanarak bakımı çok daha kolaydır ve daha yeniden kullanılabilir olabilir.

Alex'in "sonuna net bir öğe ekleyerek: her ikisi de" yanıtını (ve Garret'in açık ekini) inceleyerek, bunu şöyle yapabilirsiniz:

    <div id='outerdiv' style='border: 1px solid black; background-color: black;'>
        <div style='width: 300px; border: red 1px dashed; float: left;'>
            <p>xxxxxxxxxxxxxxxxxxxxxxxxxxxxx</p>
        </div>

        <div style='width: 300px; border: red 1px dashed; float: right;'>
            <p>zzzzzzzzzzzzzzzzzzzzzzzzzzzzz</p>
        </div>
        <div style='clear:both;'></div>
    </div>

Bu işe yarar (ancak gördüğünüz gibi satır içi CSS o kadar da hoş değil).


Neden puan düştüm? İşe yarıyor ve bunun güzel bir çözüm olmadığını haklı olarak kabul ettim.
Lycana

1
Emin değilim, en azından seni 0'a döndürmek için + 1'ledim. Belki de yanlış CSS'yi düzeltmediğiniz için reddedildiniz ... yani bir CSS özelliğini ayarlamak için eşittir işaretini kullanmak yanlıştır.
alex

yeterince adil. +1 alex için minnettarım. Benim ifademin adil olduğunu düşündüm.
Lycana

Bu çözüm daha iyi IMO'dur. Benim sorum olsaydı bu cevabı kabul ederdim.
ksg91


7

Bazı insanların benden nefret edeceğini biliyorum, ancak display:table-cellbu durumlarda yardım ettim .

Gerçekten daha temiz.


dış div kullanım ekranı: tablo; ve div kullanım ekranı: table-cell;
Anukul Limpanasil

4

Öncelikle kullanmadığınız width=300pxbu, CSS değil etiketi için bir öznitelik ayarıdır, width: 300px;bunun yerine kullanın.

Ben uygulayarak öneririm clearfixüzerinde tekniğini #outerdiv. Clearfix , 2 kayan div'i temizlemek için genel bir çözümdür, böylece üst div, 2 kayan div'i barındıracak şekilde genişler.

<div id='outerdiv' class='clearfix' style='width:600px; background-color: black;'>
    <div style='width:300px; float: left;'>
        <p>xxxxxxxxxxxxxxxxxxxxxxxxxxxxx</p>
    </div>

    <div style='width:300px; float: left;'>
        <p>zzzzzzzzzzzzzzzzzzzzzzzzzzzzz</p>
    </div>
</div>

İşte durumunuza ve Clearfix'in sorunu çözmek için yaptıklarına bir örnek .


3

JQuery kullanın:

Ebeveyn Yüksekliğini Ayarla = Çocuk ofset Yüksekliği.

$(document).ready(function() {
    $(parent).css("height", $(child).attr("offsetHeight"));
}

3
Overkill, bunu yalnızca CSS ile yapabildiğiniz zaman.
alex

1
Cevabımla, ebeveyn yüksekliğini çocuk yüksekliği ile aynı şekilde ayarlayabilirsiniz, ancak taşma özelliğini kullanarak ebeveyn yüksekliğini, ebeveyn div'den sonra veri gösteriyorsak bazı sorunlara neden olacak şekilde değiştirmiyoruz.
Harpal

1

Kullanım clear: both;

Bunu anlamaya çalışmak için bir haftadan fazla zaman harcadım!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.