2013-11-26 37 views
1

我對元素有一些非常具體的要求(目前這些元素是跨度的,但這對於我的問題並不重要)必須在網頁中顯示。相對位置的HTML元素重疊父節點

基本的問題是,相對位於固定高度div內的元素可以被擴展,即可以改變它們的高度,並且如果擴展之後它們不適合其內部,則它們應該與包含div重疊。

更具體的,主要的要求是:

  • 的元素的數目是可變的(它們可以被添加並且被用戶移除)。

  • 這些元素應該按照正常的文本流程排列在一個區域(此刻爲div)內,即在一行內從左到右顯示,如果有幾行元素,則從頂部顯示到底部。元素的寬度不固定,它們通常具有不同的寬度。

  • 包含的div通常必須具有固定的高度,只顯示一行元素,但可以由用戶擴展爲「全尺寸」以顯示所有元素。

  • 元素本身可以有變化的高度。其中一些可以自己擴展,例如他們有下拉菜單。但是,當元素展開時,包含div的高度不應改變。當這樣的下拉菜單被打開時,如果需要,該菜單應該與div重疊。元素也可以表示樹結構,可以由用戶擴展,並且應該與div重疊。

  • 進一步的要求是,元素應該在div內使用拖拽& drop(我爲此使用JQuery Sortable),並且也可以移動(拖拽)出div或從某處移動(drop)其他人進入div(目前也使用JQuery)。

我無法實現重疊功能。這種問題的典型答案似乎是,絕對定位應該用於元素。但在我的情況下,這似乎不可行,因爲我需要通常的文本流程,並且使用絕對定位來實現此流程將花費太多精力。有人有關於如何實現這些要求的想法嗎?

對不起,我沒有特定的代碼來顯示,但完整的代碼已經非常複雜,並且將不在此處顯示。如果需要的話,我可以嘗試實施一個簡化的例子,但我希望有人能夠爲一般問題提供幫助。

+1

嘗試發佈代碼部分... :) – NoobEditor

+0

@oliverm如果你可以發佈一些代碼來顯示你的問題,那麼也許有人可以幫助你修復它。或者,把你的代碼放在http://jsfiddle.net/ – SaturnsEye

+0

你可能對[Bootstrap](http://getbootstrap.com)感興趣,因爲它有一個靈活的網格系統。通過一些調整(使用jQuery)重疊的東西可以管理我猜... – Brainfeeder

回答

0

這裏是你的問題的變通方法

http://jsfiddle.net/Q8dgr/1/

HTML:

<div class="container"> 
    <span class="item">very long item</span> 
    <span class="item">very long item</span> 
    <span class="item">very long item</span> 
    <span class="item">very long item</span> 
    <span class="item">very long item</span> 
    <span class="item">very long item</span> 
    <span class="item">very long item</span> 
    <span class="item">very long item</span> 
    <span class="item">very long item</span> 
    <div style="clear:both;"></div> 
</div> 

CSS

.container{ 
    background-color:red; /* to show the container's boundary */ 
    font-size:12px; 
} 

.container span{ 
    position:relative; /* vital for setting the z-index item */ 
    float:left; 
    display:block;  /* otherwise, margin will be ignored */ 
    padding:1em;   /* just for creating some space between items */ 
} 

JS(jQuery的)

$(window).ready(function(){ 
    var expansion_amount = 100; //expansion amount in pixels 

    $('.item').hover(
     function(){ 
      //mouse on 
      $(this).css({ 
       'background-color':'green', 
       'z-index':'100', 
       'height':$(this).height() + expansion_amount + 'px', 
       'margin-bottom': -expansion_amount + 'px' 
      }); 
     }, 
     function(){ 
      //mouse off 
      $(this).removeAttr('style'); 
     } 
    ); 
}); 

此處的關鍵功能是使用負邊距值。儘管物品的高度或寬度都會增長,但它必須在該方向上獲得相同的負邊距。

此代碼也可以用純CSS編寫,但它需要了解當前項目的高度或使用css3 calc。

+0

謝謝,這是有幫助的,我不知道這個負利潤率的特徵。我試圖使它與我的代碼一起工作。我對它的一個問題是,擴展這些元素並不直接在我的控制之下。我使用一些ui控制庫來渲染下拉菜單和樹,並且它們具有擴展事件的內部處理,並且不容易干預它們。也許我可以得到這個工作,但一個解決方案,不需要在擴展時間計算和設置邊距,這將使我更容易。除此之外,你的代碼很好地反映了我的問題 – OliverM

+0

正如我所說,如果你根本不想使用javascript,你可以使用一些新的CSS3功能,比如「calc」,雖然它還沒有得到很好的支持。看一下這個。 http://caniuse.com/#search=calc,我會編輯答案以涵蓋「calc」功能。 – evolon

+0

也許你可以給我更多關於你的腳本如何處理擴展的細節。我的意思是,它只會改變高度屬性嗎? – evolon