2013-07-03 64 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