CSS:将div水平设置为2行

可以说我有

1
2
3
4
5
6
7

我想要的是通过这种简单的方式从左到右依次绘制两排像.single divs:第一个div将在左上角,第二个将在第一个下方,第三个将在第一个旁边,第4个将被放置在第3个以下,依此类推:

 1 3 5 7 9 2 4 6 8 

所有的div都有相同的大小。

我已经尝试过使用masonry.js,它的工作就像一个魅力,但它通过复杂的解决方案来实现如此简单的任务(简单的解决方案很重要)。

小提琴操场

有一个CSS属性就是这样做的

http://tinker.io/8ff59

 .cont { -webkit-columns: 5em; -moz-columns: 5em; columns: 5em; /* desired width of column */ } 

http://caniuse.com/#feat=multicolumn

我不认为你可以用结构的css做到这一点。

此结构应该可以帮助您获得所需的布局:

 
1
2
3
4

为了论证,假设您无法更改文档结构 – 您需要仅通过布局定义来完成此操作。

如果你知道你将拥有多少项,最简单的方法是使用内联块元素的CSS3列。 你的.hesles是内联块,而.cont使用’columns’属性设置5列,每列足以容纳你的单个,同时使用max-height将内联块强制每两个项目放入新列。 单体的最小尺寸足以阻止在同一条线上显示多个内联块。

你可以在这里看到这个效果作为一个jsfiddle: http : //jsfiddle.net/mwjJG/25/ :

 .container { height: 240px; columns: 100px 5; -webkit-columns: 100px 5; -moz-columns: 100px 5; } .single { display: inline-block; height: 100px; width: 100px; } 

请注意,除非您可以使用某种基于JS的shiv添加对columns属性的支持(CSS Pie可能能够执行此操作),否则这将无法在IE <10上运行。

我使用这个代码用CSS完成了这个:但它有点像hackish。

我将三个div(最后三个)设置为类’double’

 .cont .single { background: blue; color: white; width: 100px; height: 100px; margin: 10px; float:left; display: inline-block; } .cont .double { background: blue; color: white; width: 100px; height: 100px; margin: 10px; display:inline-block; float:left; } div:nth-child(5) { clear:left; } .cont { height: 220px; background: red; }