2015-10-02 39 views
5

我有一個絕對的容器(必須保持絕對),固定的高度,我需要放置2裏,一個在上面,第二個在底部。兩個li的高度都是可變的,我不能在絕對位置使用絕對位置(會破壞菜單中的某些東西)。2行,第一個在父母的頂部和第二個在底部

結構是

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

你可以看到一個奧斯陸的jsfiddle here

任何想法,該怎麼辦呢?謝謝

+0

所以,你要'#bottom'到'#高度後佔據'#container'內的任何剩餘寬度頂部'已被考慮到? – BenM

+0

我忘了提及任何解決方案都必須在IE8中工作,而無需額外的jQuery,比如css pie或其他。 – Adyyda

回答

3

您可以使用Flex屬性執行此操作。

小提琴: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

感謝您的解決方案,但我需要一個在ie8中工作 - 對不起,我忘了提及這個 - http://caniuse.com/#feat=flexbox – Adyyda

+0

啊,這是一件事情。對於那個很抱歉! – Jesse

2

如果它是可以改變的HTML,您可以使用顯示:表容器和顯示:表-cell用於額外的容器,那麼你可以垂直對齊內容。爲了讓第一次留在頂部,可以使用絕對定位。

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

小提琴演示:http://jsfiddle.net/3bsa7hco/1/

+0

不幸的是我不能改變結構,因爲這是桌面和響應式設備的複雜垂直megamenu的一部分。無論如何感謝這個解決方案。 – Adyyda

0

你寫bottom不能有絕對定位,但你沒有說同樣的關於top

在這種情況下,你可以使用這些樣式:

#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

這看起來不錯,除了ie8不支持http://caniuse.com/#feat=transforms2d - 對不起,我忘了提及修復必須在ie8本地工作,因爲我已經做了很多ie8修復整個網站。 – Adyyda

+0

是的,這也將是一個靈活的解決方案的問題。你最好的選擇可能是@Julia的餐桌解決​​方案。 –

+0

不幸的是,我不能改變結構,因爲會弄糟我在使用這段代碼的megamenu。 – Adyyda

相關問題