CSS列计数列的高度不同

时间:2013-11-05 14:42:48

标签: css css3 css-multicolumn-layout column-count

我正在尝试创建一个砌体网格的图像。一般的想法是使用列数来实现this example

我有三列带有一堆图像,CSS和HTML与链接中的相同。问题是列不能正确对齐。最右边的列通常比其他列短得多。显然,除非图像大小相同,否则列将永远不会完美对齐,但差异远大于此。有时前两列将分别容纳十个图像,但第三列仅容纳两个(图像大小相似),这意味着您可以轻松地将一些图像从第一列和第二列移动到第三列以获得更好的对齐。这个结果似乎违背了列数。

如果您将某些图像更改为更小的图像,也会在上面的链接中发生这种情况。是否只是列计数仍然有问题且不应该使用,或者是否有一些技巧可以阻止这种情况发生?

编辑:这是基本的CSS(减去许多基本样式,如过渡和东西,我试图删除,看看他们是否是罪魁祸首)。

#wrapper {
    width: 90%;
    max-width: 1100px;
    min-width: 800px;
    margin: 50px auto;
}

#columns {
    -webkit-column-count: 4;
    -webkit-column-gap: 10px;
    -webkit-column-fill: auto;
    -moz-column-count: 4;
    -moz-column-gap: 10px;
    -moz-column-fill: auto;
    column-count: 4;
    column-gap: 15px;
    column-fill: auto;
}

.pin {
    display: inline-block;
    background: #FEFEFE;
    border: 2px solid #FAFAFA;
    box-shadow: 0 1px 2px rgba(34, 25, 25, 0.4);
    margin: 0 2px 15px;
    -webkit-column-break-inside: avoid;
    -moz-column-break-inside: avoid;
    column-break-inside: avoid;
    padding: 15px;
    padding-bottom: 5px;
}

here is a JSFiddle显示问题。有四列,但在Chrome中,第三列比它需要的短,可以从第四列移动图像以使它们更均匀。请注意,此示例“不是那么糟糕”,但问题可能远大于此。有时差异等于几张图像的大小。

3 个答案:

答案 0 :(得分:3)

你应该尝试使用

column-fill: balance;
-moz-column-fill: balance;
-webkit-column-fill: balance;

来源:https://www.w3.org/TR/css-multicol-1/#cf

由于使用此column-count CSS属性按顺序填充列,因此对JSFiddle的更改并不多,因此元素的顺序保持不变。因此,如果您首先拥有大图像,然后是由小图像组成的列,则可能会有不同大小的列。

column-fill: balance;属性无法改变魔法,因为它无法改变顺序。

如果要调整元素的顺序以使(或多或少)相等长度的列,请使用JavaScript。

答案 1 :(得分:2)

确保列中的直接子项没有填充,边距或边框。

IE如果使用ul和li,请确保li上没有填充,边距或边框,如果需要,请将其放在嵌套元素上。

我知道这已经老了,但我无法在任何地方找到这个答案,希望这有助于某人:)它肯定会让我烦恼!

答案 2 :(得分:0)

您可能必须使用此Javascript

var tallest=0;

$(document).ready(function() {
    $('.pin').each(function(){
        if($(this).height() > tallest)
           tallest = $(this).height();
    });
    $('.pin').css('height', tallest + 'px');
});

参考:Matching column height in 2column layout

否则,只需在“pin”类中设置静态高度