2013-07-03 90 views
0

我有這樣的HTML代碼和風格「這只是一個例子」:如何刪除李CSS之間的垂直間距

<div id="mn" style="margin-top:200px;"> 
       <div class="first">1</div> 
       <div class="second">2</div> 
       <div class="third">3</div> 
       <div class="fourth">4</div> 
      </div> 

<style type="text/css"> 
     #mn, #mn div { display:inline-block; vertical-align:middle; } 
     #mn div { width:350px; margin:5px; /* float:left Comment */ } 
     div.first { height:5px; background-color:Red; } 
     div.second { height:120px; background-color:#999 } 
     div.third { height:50px; background-color:Yellow } 
     div.fourth { height:180px; background-color:#ccc } 
    </style> 

的問題是,在左側的「黃色和紅色的」元素有一個大這些之間的空間或底部邊距。 我需要刪除這個大的邊距或間距,並在所有元素中只使用5px。

我創建了一個腳本使用jQuery是採取列表,並將其移動到一個div的,這樣的事情:

<div id="mn_left"></div> 
      <div id="mn_right"></div> 
      <div id="mn" style="margin-top:200px;"> 
       <div class="first">1</div> 
       <div class="second">2</div> 
       <div class="third">3</div> 
       <div class="fourth">4</div> 
      </div> 

$(document).ready(function() {    
      $("div", "#mn").each(function (e, value) { 
       if ($("#mn_left").height() <= $("#mn_right").height()) { 
        $("#mn_left").append(value.outerHTML); 
       } 
       else { 
        $("#mn_right").append(value.outerHTML); 
       } 
      }); 
     }); 

該腳本工作正常,但我想這樣做沒有腳本。

編輯... 我錯了,我改變了李的div ...但它是完全一樣的。在HTML看起來像這樣:

http://postimg.org/image/dh6dwdjc1/

我真正想要的是這個

http://postimg.org/image/otnkrwhep/

+1

在你的例子中,我沒有看到一個列表,只是'div's。你的意圖是用'ul'和'li'編碼(如果它是一個列表,那麼你應該)。 – brentonstrine

+0

這個空白的原因是黃色和紅色的div與右側的div不一樣高。你想要達到什麼目的? – Horen

+0

從你的編輯,我不得不問,爲什麼不會只重構你的標記?你有沒有理由不能重組?創建2個DIV,左側包含項目1,3,4和右側包含項目2. – hungerstar

回答

0

首先,這裏是你的代碼正確設置使用列表標記,既然你說這是一個列表:

HTML:

<ul id="mn"> 
    <li class="first">1</li> 
    <li class="second">2</li> 
    <li class="third">3</li> 
    <li class="fourth">4</li> 
</ul> 

CSS:

#mn {padding:0; margin:0;} 
#mn, #mn li { display:inline-block; vertical-align:middle; } 
#mn li { width:350px; margin:5px; } 
li.first { height:5px; background-color:Red; } 
li.second { height:120px; background-color:#999 } 
li.third { height:50px; background-color:Yellow } 
li.fourth { height:180px; background-color:#ccc } 

然後,取出margin#mn li

#mn li { width:350px; /* margin:5px; */ } 

您會看到列表中的項目現在處於清除狀態,除了第一個項目,其中線條高度高於項目高度。要修復第一個問題,請列出項目overflow:hidden;並將displayinline-block更改爲block

#mn, #mn li { display:block; vertical-align:middle; } 
#mn li { width:350px; overflow: hidden;} 

這應該是它適合你,除非我誤解了。

+0

你好,我誤以爲,我改變了李的div ...但它是完全一樣的。在HTML看起來像這樣: http://postimg.org/image/dh6dwdjc1/ 我真正想要的是這個 http://postimg.org/image/otnkrwhep/ – Yah

+0

哦,對不起,我誤解你了。我不認爲你會找到一個通用的解決方案,而不使用Javascript。 CSS不能根據其他事物的高度來移動事物。除非你的元素高度是固定的......它們是否固定?或者您是否需要根據內容更改進行工作? – brentonstrine

+0

是的,高度是dinamyc。然後,我必須使用javascript ...謝謝 – Yah

0

這個怎麼樣?使用浮動而不是絕對定位。

#mn {width: 720px;} 
#mn div { width:350px; float:left; margin:5px; } 
#mn div.second {float:right;} 
div.first { height:5px; background-color:Red; } 
div.second { height:120px; background-color:#999; } 
div.third { height:50px; background-color:Yellow } 
div.fourth { height:180px; background-color:#ccc } 
  • 所有飄來到左。
  • 爲包含div#mn添加了新的CSS規則。寬度等於每個div div的寬度加上它的邊距 ,所以(5px + 350px + 5px) = (360px x 2) = 720px
  • 爲第二個div添加了新的CSS聲明。
+0

嗨...謝謝,但在你的例子de元素不是浮動的,我想要兩行... – Yah

0

現在我明白你想要做什麼......

的一種方式做到這一點是創建一個類的項目,將在第二科拉姆:

#mn .col2 { position: absolute; left: 355px; top:0; margin-top: 0;} 

JSFiddle Example。 (PS,您需要#mn{position:relative;}爲上述工作。)

這個問題是,如果你在第二列有多個項目,你必須給第二個(和第三,第四等) )項目定製top位置,以便他們正確排隊。

這似乎是一個使用Javascript而不是CSS的理想場所。這是來自支持者「隨時可以使用CSS!」

+0

再次感謝,這是不適用於我,因爲作爲我這只是一個例子。這些項目是動態加載的,可能更多。如果沒有解決方案,我將不得不使用腳本。 – Yah

+0

是的,使用腳本。 – brentonstrine