CSS - 如何通过浮动摆脱空的垂直空间

时间:2014-10-28 20:09:17

标签: html css floating

当您使用浮动时,下一个浮动元素将占用至少相同数量的垂直空间或更多,然后断开线并在流中降低。在下面的图片中有很多未使用的空白区域。

with empty vertical space

我怎样才能得到更多这样的东西?

without empty vertical space

这是一个小提琴。 http://jsfiddle.net/BamBamm/4x51qLt4/1/

<div class="someBlock">...</div>
<div class="someBlock">...</div>
<div class="someBlock">...</div>
<div class="someBlock">...</div>

.someBlock {
    display: inline-block;
    vertical-align:top;
    width: 30%;
    float: left;
}

((从这里复制的图像:http://designshack.net/articles/css/everything-you-never-knew-about-css-floats/))

4 个答案:

答案 0 :(得分:4)

有一个黑客填补空间,添加这个:

.someBlock{
    margin-bottom: -100%;
    padding-bottom: 100%;
    overflow: hidden;
}

检查出来:JSFiddle

虽然我建议使用像jQuery Masonry这样的东西,正如Hachem Qolami在评论中指出的那样。

答案 1 :(得分:2)

如果没有js,你无法实现100%浏览器兼容纯css和完美对齐顶部。您可以使用名为masonry的库:http://masonry.desandro.com/。我不会为它做广告,只是试图给你一个简单而且非常好的解决方案来解决你的问题。

答案 2 :(得分:1)

正如Hashem Qolami ha指出的那样,你想要实现的目标不仅仅是通过CSS实现的。您需要计算不同块的高度。

但是,如果这有助于你,有一种简单的方法可以确保每行总有一定数量的元素:

.someBlock:nth-of-type(3n+1) {
    clear : both;
}

这不会回答你的问题,但也许会帮助别人。

答案 3 :(得分:1)

如果div的顺序不重要,可以像这样使用css3列属性:

body {
     -webkit-column-count: 3;  -webkit-column-gap: 15px; /* Chrome, Safari 3 */
     -moz-column-count: 3;     -moz-column-gap: 15px; /* Firefox 3.5+ */
          column-count: 3;          column-gap: 15px; /* Opera 11+ */
}

演示:http://jsfiddle.net/ytf66xm7/(您可以看到它将从上到下填充,而不是从左到右)

如果你需要一个从左到右的布局,只有解决这个问题的方法就是使用JS,比如Masonry或Salvattore,就像Hashem Qolami在上面的评论中所说的那样。