对齐html网格项以垂直包装

时间:2016-10-13 16:28:08

标签: javascript jquery css

我有一个生成div的网格,我需要垂直流0到9,然后将10包裹到下一列。当前配置是水平包装:

HTML

<div id="item-container"></div>

JavaScript的:

for (var i = 0; i <= 150; i++) {
  $("<li class='items grid'>item " + i + "</li>").appendTo("#item-    
  container"); 
}

CSS

li.grid {
      display: inline-block;
      border: 1px solid #333;
      background-color: #000;
      color: #fff;
      padding: 30px 30px 30px 30px;
      background-image: linear-gradient(to bottom right, #eee, #ddd);
    }

jsfiddle中的当前实现:http://jsfiddle.net/Ldh9beLn/9/

2 个答案:

答案 0 :(得分:0)

对于内联块和内联块元素,HTML元素的正常流是水平的。您尝试实现的与列相关。您需要将item-container元素划分为列。

第一个选项是使用CSS3列计数或flex。

#item-container{
  column-count: 4;
}

如果您也需要支持旧浏览器,则可以实现js后备。有一个jquery plugin可能会对你有帮助。

第二个选项是使用容器元素将元素划分为列。将列中的每10个元素换行并使用适当的css作为列包装器,如下所示;

for (var i = 0; i <= 150; i++) {
    if(i%10 == 0) $("<div class='column'></div>").appendTo("#item-container");
  $("<li class='items grid'>item " + i + "</li>").appendTo("#item-container > .column:last-child");
}

.column{
  width: 35px;
  border: 1px solid;
  float: left;
  margin: 30px;
}

答案 1 :(得分:0)

我找出了解决方案,但创建了两个类,以便在column1column7之间切换,具体取决于所需的网格布局。

$('.item-container').removeClass('column7').addClass('column1');

$('.item-container').removeClass('column1').addClass('column7');

与相关的css类:

.column1{
  column-count: 1;
}
.column7{
  column-count: 7;
}