2009-03-05 219 views
6

我使用了這個page中概述的等高CSS技巧。避免當元素在「overflow:hidden」元素內時被截斷

直到今天,這一切都工作正常,當我需要添加一個對話框內的一列,這是絕對定位,把它從流中。問題是,由於容器上有「溢出:隱藏」,當溢出時對話將被切斷。

除了在容器元素外部引入對話之外,是否有任何可能的方式讓它通過CSS顯示?

下面是一個小例子,演示了我提到過的內容。

<style> 
.container { overflow: hidden; margin-top: 30px } 
.col { 
    float: left; 
    padding-bottom: 2000px; 
    margin-bottom: -2000px; 
    border-right: 1px solid black; 
    width: 100px; 
    background-color: grey; 
} 
.col.third { border-right: none } 

#div-a { position: relative } 
#div-b { 
    position: absolute; 
    background-color: red; 
    width: 35px; 
    height: 350px; 
    bottom: 0; 
    right: 0; 
    margin: 5px; 
    border: 2px solid black; 
} 
</style> 

<div class="container"> 
    <div class="col first"> 
     <p style="height: 100px">One</p> 
    </div> 
    <div class="col second"> 
     <p style="height: 300px">Two</p> 
     <div id="div-a"> 
      <!-- this gets cut off by the "overflow: hidden" on div.container --> 
      <div id="div-b"> 
       Foo 
      </div> 
     </div> 
    </div> 
    <div class="col third"> 
     <p style="height: 200px">Three</p> 
    </div> 
</div> 

你看到div#div-b在頂部時,它在div.container元素溢出切斷。

回答

3

不幸的是,如果不在容器元素之外引入對話,你想做的事情是不可能的。

最好的辦法是讓對話框元素成爲容器的同級並定位它。

1

不幸的是......我不認爲有一種方法來規避溢出:隱藏着絕對的位置。您可以嘗試使用position:fixed,但如果您使用它,則不會在完全相同的條件下進行定位。

1

一個選擇是將你的overflow:hidden容器的內容放到一個子容器(也許是一個子div)中。然後,使子容器與容器的尺寸匹配,並將溢出:從容器隱藏到子容器。

然後,您可以使對話框成爲容器的子對象(子容器的同級),它現在將存在於沒有溢出的元素中:hidden。

我還沒有測試過這一點,並刪除溢出:從容器隱藏可能會打破你的設計。如果是這樣的話,我會建議像其他人那樣做,並將對話框完全移出容器。如果你沒有把對話框的代碼放到其他地方的話,甚至可以通過Javascript來完成。 (當你需要顯示時,Javascript可以使對話框成爲BODY的子項或其他標籤)