Üst div'i doldurmak için div yüksekliği nasıl uzatılır - CSS


107

Aşağıdaki gibi div içeren bir sayfam var

<div id="container">
    <div id="A">
    </div>
    <div id="B">
        <div id="B1"></div>
        <div id="B2">B2</div>
    </div>
    <div id="C"></div>
    <div id="D">
    </div>
</div>

stil ile;

html, body {
    margin: 0;
    padding: 0;
    border: 0;
}
#B, #C, #D {
    position: absolute;
}
#A{
    top: 0;
    width: 100%;
    height: 35px;
    background-color: #99CC00;
}
#B {
    top: 35px;
    width: 200px;
    bottom: 35px;
    background-color: #999999;
    z-index:100;
}
#B2 {
    margin-top: -35px;
    bottom: 0;
    background-color: #FFFFFF;
    width: 200px;
    overflow: scroll;
}
#B1 {
    height: 35px;
    width: 35px;
    margin-left: 200px;
    background-color: #CC0066;
}
#C {
    top: 35px;
    left: 200px;
    right: 0;
    bottom: 35px;
    background-color: #CCCCCC;
}
#D {
    bottom: 0;
    width: 100%;
    height: 35px;
    background-color: #3399FF;
}

Div'in yüksekliğini B2tüm div'i B(yeşil kenarlıkla işaretlenmiş ) dolduracak (veya uzatacak) şekilde ayarlamak istiyorum ve altbilgi div D'yi geçmek istemiyorum. İşte çalışan bir keman demosu (güncellenmiş). Bunu Nasıl Çözebilirim??

Yanıtlar:


38

Basitçe eklemek height: 100%;üzerine #B2stil. min-heightgerekli olmamalı.


4
Dif boşsa, olacaktır.
x10

39
kötü cevap # B2, #B kadar uzun olacak ancak sorulduğu gibi kalan boşluğu doldurmayacak
içe

3
floatbu, ebeveyn olduğu zaman farklı olan bir div için çalışmaz mı?
Don Cheadle

B1'i kaplar ve tüm alanı kaplar; /
mikus

1
Bu açıkça işe yaramıyor, yükseklik:% 100, kapsayıcının% 100'üdür (sanırım çoğu zaman tüm görüntü alanı) - yüksekliği istenenden daha fazla olacaktır.
BT

25

Varsayalım ki

<body>
  <div id="root" />
</body>

Normal CSS ile aşağıdakileri yapabilirsiniz. Çalışan bir uygulamaya bakın https://github.com/onmyway133/Lyrics/blob/master/index.html

#root {
  position: absolute;
  top: 0;
  left: 0;
  height: 100%;
  width: 100%;
}

Flexbox ile şunları yapabilirsiniz:

html, body {
  height: 100%
}
body {
  display: flex;
  align-items: stretch;
}

#root {
  width: 100%
}

10

http://jsfiddle.net/QWDxr/1/

"Min-height" özelliğini kullanın
Dolgulara, kenar boşluklarına ve sınırlara dikkat edin :)

html, body {
    margin: 0;
    padding: 0;
    border: 0;
}
#B, #C, #D {
    position: absolute;
}
#A{
    top: 0;
    width: 100%;
    height: 35px;
    background-color: #99CC00;
}
#B {
    top: 35px;
    width: 200px;
    bottom: 35px;
    background-color: #999999;
    z-index:100;
}
#B2 {
    min-height: 100%;
    height: 100%;
    margin-top: -35px;
    bottom: 0;
    background-color: red;
    width: 200px;
    overflow: scroll;
}
#B1 {
    height: 35px;
    width: 35px;
    margin-left: 200px;
    background-color: #CC0066;
}
#C {
    top: 35px;
    left: 200px;
    right: 0;
    bottom: 35px;
    background-color: #CCCCCC;
}
#D {
    bottom: 0;
    width: 100%;
    height: 35px;
    background-color: #3399FF;
}

1
hayır .. tüm sayfayı bir üst kenar boşluğuyla doldurur. sadece belirli bölümü doldurmak istiyorumB
Alfred

Chrome ve Firefox'ta düzgün çalışır. Bu sizin için işe yaramazsa, Sahte Sütunları
x10

işe yarıyor, ancak altbilgiyi kesiyor div id= D. Div d'yi geçmesini istemiyorum
Alfred

2
height:100%#B2stil için noktalı virgül eksik .
Emil

5

Amacıma uygun olan şey, her zaman genel tarayıcı penceresi içinde sabit bir miktarla sınırlanan bir div oluşturmaktı.

En azından firefox'ta işe yarayan şey şuydu:

<div style="position: absolute; top: 127px; left: 75px;right: 75px; bottom: 50px;">

Gerçek pencere kaydırmaya zorlanmadığı sürece div, tüm yeniden boyutlandırma sırasında pencere kenarına kadar olan sınırlarını korur.

Umarım bu birine biraz zaman kazandırır.


5

B2'yi şekillendirme amacıyla kullanacaksanız, bu "hack" i deneyebilirsiniz.

#B { overflow: hidden;}
#B2 {padding-bottom: 9999px; margin-bottom: -9999px}

jsFiddle


1
Bu çalışıyor, teşekkürler. Bu arada, öyle olmalı margin-bottom: -9999px;. Eksi eksik.
Gaui

1

Göreceli B2 konteyner konumu

Kalan yüksekliğin üst konumu B2 +

B2 yüksekliği + B1 yüksekliği veya kalan yükseklik


Ana düğümü göreceli konuma ayarlamak ilgisiz sorunumu çözdü! Teşekkürler!
Deejers

0

Ben kullanıyorum height: stretch;. Burada kullanımla ilgili bazı ayrıntıları bulabilirsiniz.


-4

Boyutlar değişebiliyorsa, bunu bir javascript çözümü (jQUery) ile çözerdim.

window.setTimeout(function () {
    $(document).ready(function () {
        var ResizeTarget = $('#B');

        ResizeTarget.resize(function () {
            var target = $('#B2');
            target.css('height', ResizeTarget.height());
        }).trigger('resize');
    }); 
}, 500);

8
Bunu sorunuza eklemek isteyebilirsiniz :)
NKCSS

48
Bir javascriptveya jqueryetiketinin olmaması yeterli değil mi?
kapa

1
Bu da tamamen gereksizdir. CSS, son birkaç yılda uzun bir yol kat etti. Flex-box ve calc () kontrol edin.
Shawn Whinnery

1
Flexbox <IE10 :(
Constant Meiring'i desteklemez

@ConstantMeiring Asıl soru, <IE10'u önemseyen var mı? ;)
Clonkex
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.