5

我正在尝试创建一个图像的砌体网格一般的想法是使用 column-count in 来实现这个例子

我有三列包含一堆图像,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;
}

是一个显示问题的 JSFiddle。有四列,但在 Chrome 中,第三列比它需要的要短,图像可以从第四列移动以使它们更均匀。请注意,这个例子“没有那么糟糕”,但问题可能比这大得多。有时差值等于几幅图像的大小。

4

3 回答 3

3

你应该尝试使用

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

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

您的 JSFiddle 并没有太大变化,因为列是按此 CSS 属性顺序填充的column-count,因此元素的顺序保持不变。因此,如果您确实首先有大图像,然后是由小图像组成的列,那么您可能会有不同大小的列。

column-fill: balance;属性无法发挥作用,因为它无法更改顺序。

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

于 2013-11-06T10:11:33.947 回答
3

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

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

我知道这很旧,但我在任何地方都找不到这个答案,希望这对某人有帮助:) 它确实困扰了我!

于 2017-06-09T11:54:48.910 回答
0

您可能必须使用此 Javascript

var tallest=0;

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

ref : 2column 布局中的匹配列高

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

于 2013-11-06T12:09:33.140 回答