2011-08-01 78 views
2

见我JSfiddle,看看会发生目前垂直对齐不同高度的浮动DIV?

我有一些div高矮不一的内容。宽度始终相同。

每一行都应该包含两列,但是我想让一行中的每个div的起始位置处于相同的高度。对比一下jQuery Masonry插件,其中所有“砖块”都挤在一起以去除空间。

什么是一个很好的,跨浏览器的方式来实现这一目标?我的想法是为每个第二个孩子清除浮点数,但我相信IE不支持这个?

我相信我也可以用jQuery做些事情,但它是否整洁?为了在下一次发生问题时解决问题,我会学到什么?

HTML:

<div id="a" class="box">  Some content<br />Div A</div> 
<div id="b" class="box">  Some content<br />Div B</div> 
<div id="c" class="box">  Some content<br />Div C</div> 
<div id="d" class="box">  Some content<br />Div D</div> 
<div id="e" class="box">  Some content<br />Div E</div> 
<div id="f" class="box">  Some content<br />Div F</div> 

CSS:

.wrapper { width: 444px; } 
.box { 
    width: 200px; 
    border: 1px solid #333; 
    float: left; 
    margin: 0 10px; 
    } 
#a { height: 200px; } 
#b { height: 180px; } 
#c { height: 100px; } 
#d { height: 80px; } 
#e { height: 50px; } 
#f { height: 50px; } 
+0

*每个div在同一高度开始*我不确定这是什么意思。你的意思是你想要每列的最高div是相同的高度? –

回答

1

这是你想到的吗?它确实使用jQuery并添加了一些额外的标记 - 不确定是否可以接受。

http://jsfiddle.net/Awg3u/7/

我只在Chrome/FF测试,到目前为止,在IE浏览器没有检查呢。

+0

还是应该在两列的div是相同的高度? –

+0

这似乎工作得很好。我接受jQuery可能是需要的,但这是一个相当整洁的功能。谢谢。 –

+0

是的,有时候jQuery就是这样。不过,我非常喜欢CSS选项。很高兴为你工作。 –

3

您可以使用display:inline-block的

http://jsfiddle.net/Awg3u/1/

+0

http://robertnyman.com/2010/02/24/css-display-inline-block-why-it-rocks-and-why-it-sucks/ –

+0

“...有一个巨大的缺点,**可能会或可能不会将**应用到您的用例中。“并且我个人并不认为这是一个巨大的缺点,特别是当这种方法有很多用处时 –

+0

请注意'inline-block'只是体面的支持IE浏览器> = 8 – PeeHaa

0

你基本上要找出每个盒子的最大高度,然后取最大值,并将每隔一个盒子设置到该高度。

应该有任何数量的jQuery插件可以做到这一点,或者你可以滚你自己

+0

我想到了这一点,但我不是太热的创建jQuery函数。本质上,我需要比较每个“偶数”DIV到它的“奇数”等价物,决定哪个是最长的,那么把这个高度应用到较短的那个? –

0

不知道如果我明白你想要什么正确。

如果不纠正我请。

如果你想在所有行的第一个div的具有相同的高度(基于第一个div),你可以这样做:

(function() { 
    var first = true; 
    var height = 0; 
    var pos; 
    $('.box').each(function() { 
     if (first) { // do we have the first div? 
      height = $(this).height(); // set height and pos from left of first div to be used by other divs 
      pos = $(this).position(); 
     } 
     first = false; 

     var current_pos = $(this).position(); 
     if (current_pos.left == pos.left) { // are we the first div in a row, e.g. the most left div? 
      $(this).height(height); // set height to match the first div 
     } 
    }); 
})(jQuery); 

http://jsfiddle.net/Awg3u/3/

+0

对不起,我的意思是每行的列应该从相同的垂直位置开始。 –

0

您可以添加清除DIV每隔2个块后如下:

<div class="box"></div> 
<div class="box"></div> 
<div class="clear"></div> 
<div class="box"></div> 
<div class="box"></div> 
<div..................> 

或者你可以将你的行包装在一个新的DIV中。

<div> 
<div class="box"></div> 
<div class="box"></div> 
</div> 
<div> 
<div class="box"></div> 
<div class="box"></div> 
</div> 
.......etc. 
+0

虽然div是即时创建的,但是我必须在jQuery中添加清除类我相信如果我打算这样做的话,如果我已经正确理解DIV高度,我可以尝试和修改一个改变DIV高度的函数。 –

+0

所有块必须是相同的hei GHT?等于最高的div的高度? – avetarman