2015-10-02 17 views
5

Mam absolutny pojemnik (musi pozostać bezwzględny), ze stałą wysokością i muszę umieścić 2 li wewnątrz, jeden na górze i drugi na dole. Obie li mają zmienną wysokość i nie mogę używać pozycji absolutnej dla dolnej (złamie coś w menu).2 rzędy, pierwszy na górze i drugi na dole rodzica

Struktura jest

<div id="container"> 
<div id="top"> 
    top variable height 
</div> 
<div id="bottom">bottom variable height</div> 

Widać olso się jsfiddle here

jakiś pomysł jak to zrobić? Dzięki

+0

Więc chcesz '# bottom' zajmują pozostałą szerokość wewnątrz' # kontener po wysokości '# góra' została wzięta pod uwagę? – BenM

+0

Zapomniałem wspomnieć, że każde rozwiązanie musi działać w IE8 bez dodatkowych jquery takich jak css pie lub inne. – Adyyda

Odpowiedz

3

Możesz to zrobić za pomocą właściwości Flex.

Fiddle: https://jsfiddle.net/9vq8nkpc/

HTML

<div id="container"> 
    <div id="top"> 
     top variable height 
    </div> 
    <div id="bottom">bottom variable heighbottom variable heightbottom variable heightbottom variable heightbottom variable heightbottom variable heightbottom variable heightbottom variable heightbottom variable heightbottom variable heightbottom variable heightbottom variable heightbottom variable heightbottom variable heightbottom variable heightbottom variable heightbottom variable heightbottom variable heightbottom variable heightt</div> 
</div> 

CSS

#container { 
    border: 1px solid red; 
    height: 200px; 
    position: absolute; 
    display:flex; 
    flex-direction:column; 
    justify-content:space-between; 
} 
#top, #bottom { 
    border: 2px solid red; 
    background: #ccc; 
    width:80%; 
    display: inline-block; 
} 
+0

Dzięki za rozwiązanie, ale potrzebuję takiego, który działa również w ie8 - przykro mi, że zapomniałem wspomnieć o tym - http://caniuse.com/#feat=flexbox – Adyyda

+0

ahh, cóż, to jest rzecz. Przepraszam za to! – Jesse

2

Jeśli jest to możliwe, aby zmienić kod HTML, można użyć wyświetlacza: stół do pojemnika i display: table - Komórka na dodatkowy pojemnik, następnie możesz ustawić pionowo n treści. Aby pierwszy li pozostał na szczycie, można użyć pozycjonowania absolutnego.

#container { 
 
    border: 1px solid red; 
 
    height: 200px; 
 
    width: 90%; 
 
    position: absolute; 
 
    display: table; 
 
} 
 
#top, #bottom { 
 
    border: 2px solid red; 
 
    background: #ccc; 
 
    width:80%; 
 
    display: inline-block; 
 
} 
 

 
#top{ 
 
    position: absolute; 
 
    top: 0; 
 
    left: 0; 
 
} 
 

 
.table-cell{ 
 
    display: table-cell; 
 
    vertical-align: bottom; 
 
}
<div id="container"> 
 
    <div class="table-cell"> 
 
      <div id="top">top variable height</div> 
 
      <div id="bottom">bottom variable height</div> 
 
    </div> 
 
</div>

Fiddle demo: http://jsfiddle.net/3bsa7hco/1/

+0

Niestety nie mogę zmienić struktury, ponieważ thisi jest częścią złożonego pionowego megamenu dla urządzeń stacjonarnych i reagujących. I tak dziękuję za to rozwiązanie. – Adyyda

0

Napisałeś że bottom nie można mieć absolutną pozycję, ale nie powiedzieć tego samego o top.

W takim przypadku można użyć następujących stylów:

#top { 
    position: absolute;   //so top won't affect bottom's placement 
} 

#bottom { 
    position: relative;   //relative to container 
    top: 100%;      //height of container ... 
    transform: translateY(-100%); //... minus height of bottom element 
} 

Fiddle

+0

To wygląda dobrze z wyjątkiem ie8, które nie obsługuje go http://caniuse.com/#feat=transforms2d - przepraszam, zapomniałem wspomnieć, że poprawka musi działać natywnie w ie8, ponieważ zrobiłem wiele poprawek ie8 w cała strona internetowa. – Adyyda

+0

Tak, to też byłby problem z elastycznym rozwiązaniem. Najlepszym rozwiązaniem może być rozwiązanie stołowe @Julia. –

+0

Niestety nie mogę zmienić struktury, ponieważ zepsuje megamenu, w którym używam tego kodu. – Adyyda

Powiązane problemy