Jak rozciągnąć wysokość div, aby wypełnić nadrzędny div - CSS


107

Mam stronę z elementami div, jak poniżej

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

ze stylizacją jak;

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

Chcę dostosować wysokość elementu div, B2aby wypełnić (lub rozciągnąć) cały Belement div (oznaczony zieloną obwódką) i nie chcę przekraczać elementu div w stopce D. Oto działające demo skrzypiec (zaktualizowane). Jak mogę to rozwiązać?

Odpowiedzi:


38

Po prostu dodaj height: 100%;do #B2stylizacji. min-heightnie powinno być konieczne.


4
Będzie, jeśli dif jest pusty.
x10

39
zła odpowiedź # B2 będzie tak wysoka jak #B, ale nie rozciągnie się, aby wypełnić pozostałą przestrzeń zgodnie z pytaniem
gniazdo

3
czy to nie działa w przypadku elementu div z innym elementem floatniż jego rodzic?
Don Cheadle

obejmuje B1 i zajmuje całą przestrzeń; /
mikus

1
To ewidentnie nie działa, wysokość: 100% to 100% kontenera (myślę, że najczęściej cały widok) - jego wysokość będzie więcej niż pożądana.
BT,

25

Załóżmy, że tak

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

Za pomocą normalnego CSS możesz wykonać następujące czynności. Zobacz działającą aplikację https://github.com/onmyway133/Lyrics/blob/master/index.html

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

Dzięki Flexbox możesz

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

#root {
  width: 100%
}

10

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

Użyj właściwości „min-height”
Uważaj na wypełnienia, marginesy i obramowania :)

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
nie .. wypełnia całą stronę górnym marginesem. chcę tylko wypełnić konkretny divB
Alfred

Działa poprawnie w Chrome i Firefox. Jeśli to nie zadziała, możesz użyć Faux Columns
x10

działa, ale obcina stopkę div id= D. Nie chcę, żeby to przekroczyło div d
Alfred,

2
height:100%brakuje średnika dla #B2stylu.
Emil

5

Moim celem było utworzenie elementu div, który był zawsze ograniczony w całym oknie przeglądarki przez stałą wartość.

To, co zadziałało, przynajmniej w przeglądarce Firefox, to to

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

O ile rzeczywiste okno nie jest zmuszane do przewijania, element div zachowuje swoje granice do krawędzi okna podczas zmiany rozmiaru.

Mam nadzieję, że to komuś zaoszczędzi trochę czasu.


5

Jeśli zamierzasz używać B2 do stylizacji, możesz spróbować tego „hackowania”

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

jsFiddle


1
To działa, dzięki. Nawiasem mówiąc, powinno margin-bottom: -9999px;. Tęsknisz za minusem.
Gaui

1

Pozycja kontenera B2 względna

Najwyższe położenie B2 + pozostałej wysokości

Wysokość B2 + wysokość B1 lub pozostała wysokość


Ustawienie węzła nadrzędnego na pozycję względną rozwiązało mój niepowiązany problem! Dzięki!
Deejers

0

Używam height: stretch;. Tutaj można znaleźć szczegółowe informacje na temat użytkowania.


-4

Rozwiązałbym to za pomocą rozwiązania javascript (jQUery), jeśli rozmiary mogą się różnić.

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

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

8
Możesz dodać to do swojego pytania :)
NKCSS

48
Czy brak znacznika javascriptlub nie jquerywystarczy?
kapa

1
Jest to również całkowicie niepotrzebne. CSS przeszedł długą drogę w ciągu ostatnich kilku lat. Checkout flex-box i calc ().
Shawn Whinnery

1
Flexbox nie obsługuje <IE10 :(
Constant Meiring

@ConstantMeiring Prawdziwe pytanie brzmi: czy kogoś w ogóle obchodzi <IE10? ;)
Clonkex
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.