首先,HTML。我所做的只是向容器添加一个 ID,这样我就可以轻松地获得对它的引用:
<div class="row show-grid" id="gridcontainer">
<div class="span1 span1-nofloat">Item 1</div>
<div class="span1 span1-nofloat">Item 1</div>
....
<div class="span1 span1-nofloat">Item 1</div>
<div class="span1 span1-nofloat">Item 1</div>
</div>
然后是 CSS。我为.span1
类设置了边框和间距,以便更容易看到:
.span1 {
width: 60px;
border: solid 1px #ccc;
padding: 20px;
}
.span1-nofloat {
float: none;
}
.show-grid{
max-height: 220px;
overflow: auto;
white-space: nowrap;
}
.show-column{
display: inline-block;
vertical-align: top;
}
最后是javascript。从您的 onload 事件中运行它,或者在 HTML 加载后直接运行。我只是把它放在一起,所以它可能可以改进很多:
var maxheight = 200;
var container = document.getElementById('gridcontainer');
var columns = [document.createElement('div')];
columns[0].className = 'show-column';
var currentcolumn = columns[0];
var currentheight = 0;
var count = container.childNodes.length;
for(var i=0;i<count;i++){
var child = container.childNodes[0];
var height = child.offsetHeight | 0;
if(currentheight + height > maxheight){
currentcolumn = document.createElement('div');
currentcolumn.className = 'show-column';
columns.push(currentcolumn);
currentheight = 0;
}
currentcolumn.appendChild(child);
currentheight += height;
}
container.innerHTML = '';
for(var j=0;j<columns.length;j++){
container.appendChild(columns[j]);
}
该maxheight
变量是容器的最大高度,在 JavaScript 中设置为比 CSS 小 20px,因此容器有空间用于水平滚动条。
解决方案的 JSFiddle:http: //jsfiddle.net/djBK3/