Как растянуть высоту div для заполнения родительского div - CSS

У меня есть страница с divs, как показано ниже

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

с стилем как:

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 B2, чтобы заполнить (или растянуть) весь div B (помечен зеленой рамкой) и не хочет пересекать нижний колонтитул div. Вот рабочая скрипка демо (обновлено). Как я могу решить эту проблему?

Ответ 1

Просто добавьте height: 100%; к стилю #B2. min-height не требуется.

Ответ 2

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

Используйте свойство "min-height"
Будьте осторожны с прокладками, полями и границами:)

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;
}

Ответ 3

Если вы собираетесь использовать B2 для стилизации, вы можете попробовать этот "взломать"

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

jsFiddle

Ответ 4

То, что подходит моей цели, было создание div, который всегда был ограничен в общем окне браузера фиксированной суммой.

Что работало, по крайней мере, на firefox, было это

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

Поскольку фактическое окно не принудительно прокручивается, div сохраняет свои границы до края окна во время повторного калибровки.

Надеюсь, что это кому-то поможет.

Ответ 5

Предположим, что у вас есть

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

С обычным CSS вы можете сделать следующее. См. Рабочее приложение https://github.com/onmyway133/Lyrics/blob/master/index.html

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

С flexbox вы можете

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

#root {
  width: 100%
}

Ответ 6

Я бы разрешил его с помощью javascript-решения (jQuery), если размеры могут меняться.

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

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