2012-07-10 12 views
8

Jestem tutaj, ponieważ inne podobne pytania nie mogą pomóc w rozwiązaniu mojego konkretnego problemu.Dywan dziecięcy o wysokości 100% do nadrzędnej automatycznej wysokości

Potrzebuję, aby right div stale wynosił 100% wysokości, gdzie wysokość parent zależy od wysokości left div, która zależy od zawartości w środku.

Oto html:

<div class="container clearfix"> 
<div class="left"></div> 
<div class="right"></div> 
</div> 

Oto CSS:

.container{ 
    min-height: 10px; 
    width: auto; 
    height: auto; 
    background-color: #eeeeee; 
} 

.left{ 
    position: relative; 
    float: left; 
    min-height: 100px; 
    width: 50px; 
    background-color: #dddddd; 
} 

.right{ 
    min-height: 20px; 
    position: relative; 
    float: left; 
    height: 100%; 
    width: 50px; 
    background-color: #dddddd; 
} 

. 

.clearfix:after 
{ 
    content: "."; 
    display: block; 
    clear: both; 
    visibility: hidden; 
    line-height: 0; 
    height: 0; 
} 
.clearfix { 
    display: inline-block; 
} 

Uwaga:
Używam clearfix.
A jeśli można pokazać swoją odpowiedź w jsfiddle

Oto jsFiddle http://jsfiddle.net/C9Kmx/32/

Odpowiedz

0

Czytając komentarze na temat innych rozwiązań jest to dla mnie jasne, że jedynym rozwiązaniem dla ciebie jest, aby wdrożyć pewne JS w kodzie. Nie stanowi to jednak problemu.

http://jsfiddle.net/b7TuP/

+0

jak na razie widzę tylko jedno rozwiązanie i to w tym js, więc w zasadzie nie da się tego zrobić za pomocą zwykłego css. – skmasq

1

Daj position:fixed i height:100% dla prawego div. To rozwiąże twój problem.

+0

Czy możesz mi pokazać jsfiddle, bo nie mogę zrozumieć, dlaczego nie jest to praca dla mnie – skmasq

+0

http://jsfiddle.net/aneeshrajvj/J8qTB/ – aneeshraj

+0

Możesz zobaczyć jego przeskakiwanie nad div. Nie tego chcę. Chcę, żeby to było w środku. – skmasq

11

Złóż odpowiedni div position:absolute; i wykonaj podziałkę rodzicielską position:relative;, a następnie height:100%; będzie działać dla prawego div. Upewnij się, że odpowiednio dopasowujesz także jego położenie i szerokość. W tym przykładzie dałem mu left:50px, aby upewnić się, że pojawia się po prawej stronie lewej kolumny.

JSFiddlehttp://jsfiddle.net/e9mvD/

+0

Nie mogę podać go w lewo: 50px, ponieważ wartość z będzie względna – skmasq

+0

W takim przypadku możesz ustawić stałą szerokość na div kontenera, a następnie użyć 'right: 0' na absolutnie ustawionym prawym div i po prostu dać to prawo Podziel także szerokość. – tb11

+0

To rozwiązanie sprawdziło się najlepiej. Wolimy to od konieczności włączenia javascript – Kiee

4

Można użyć wartości table-cell nieruchomości display w tym układzie i usunąć float takiego:

.left, .right{ 
    display:table-cell; 
} 

demo żywo http://jsfiddle.net/C9Kmx/34/

+2

+1 To jest najlepsze rozwiązanie, ponieważ nie nakłada żadnych innych ograniczeń na lewy i prawy element .. – techfoobar

+0

Ta właściwość używa najniższej wysokości, w zasadzie jeśli używam 100% wysokości nie ma "prawa" div to po prostu upada. – skmasq

+0

To jest doskonałe rozwiązanie. Dziękuję –

0

Spróbuj dając wysokość pojemnika o stałej wartości

to również rozwiąże problem. Po prostu próbowałem go w jsFiddle

http://jsfiddle.net/C9Kmx/35/

.container 
{ 
    min-height: 10px; 
    width: auto; 
    height: 100px; 
    background-color: #eeeeee; 
} 
+0

Jak już wspomniano, nie można go naprawić – skmasq

1

Można tego dokonać za pomocą schematu flexbox i trochę kreatywności.

.container { 
 
    display: flex; 
 
    background: black; 
 
    padding: 5px; 
 
    width: 300px 
 
} 
 

 
.left { 
 
    height: 200px; 
 
    flex: 1 0 0px; 
 
    background: blue; 
 
} 
 

 
.right { 
 
    flex: 1 0 0px; 
 
    overflow: auto; 
 
    background: green; 
 
} 
 

 
.column { 
 
    display: flex; 
 
    flex-direction: column; 
 
    width: 20%; 
 
}
<div class="container"> 
 
    <div class="left"></div> 
 
    <div class="column"> 
 
    <div class="right"></div> 
 
    </div> 
 
</div>

+0

Zgodzę się, ale ponieważ IE11 jest nadal wspierany, ma poważne niezgodności z tym, jak Chrome i Firefox implementują Flexbox. Point is being flexbox ma swoje ograniczenia do momentu, aż IE11 zostanie upuszczony. – skmasq

Powiązane problemy