Ü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.