2015-10-15 98 views
2

有没有办法创建一个没有空格的布局,其中大多数物品的尺寸是相同的,但有些是高度的2倍?我可以做类似的东西我想用下面的CSS:用flexbox增加物品的高度

家长:

display: flex; 
flex-direction: column; 
justify-content: flex-start; 
align-content: flex-start; 
flex-wrap: wrap; 

孩子:

width: 22% 
height: 100px; 

高大的人有height: 200px。它看起来像这样:

Screnshot 1

这是非常密切的,但问题是,我需要一个左到右的顺序,而不是顶部至底部,所以我不能使用flex-direction: column。如果我做同样的flex-direction: row,这是行不通的:

Screenshot 2

任何想法?

+1

如果大多数项目是相同的维度,只有少数是高度的2倍,请保留您的'列'布局并使用'order'属性重新排列它们。如果在您的情况下这是可行的,请告诉我,我会准备一个更详细的答案。 –

+0

Michael_B,请这么做,这听起来像是我最好的解决方案。 –

+1

'order'对于指定数量的div(30+)会非常粗糙......加上它不会响应....您可能需要JS来跟踪...并且如果您正在使用JS,你不妨使用Masonry.js。 :) –

回答

3

根据您的总体情况,您可能可以使用order属性。

CSS order属性指定用于在Flex容器中布置Flex项目的顺序。

这里是一个基本的flexbox,在column对齐中有20个flex项目。

编号是垂直的,就像在您的第一张图片中一样。


随着order你可以重新安排布局不改变HTML或flex-direction

项目按列堆叠,但order属性覆盖了它们的自然位置并将它们重新排列成行,就像在第二张图像中一样。


然后,如果你加倍的几个项目的大小,你只需要找出正确的排序数学(因为每一个项目,现在将占用两个空格)。

注意项目之间没有额外的垂直间距。

所有Flex项目默认设置为order: 0。负值是允许的(即order: -3)。

+1

谢谢!看起来数学会非常复杂,在调整大小的时候,我仍然需要重新计算顺序,所以在砌体方面没有真正的优势。 –

+0

我刚刚遇到了这个反应,它看起来会帮助我完成我所需要的。谢谢! –