我需要水平显示我的网站中的搜索结果数据.我遵循我的网站的地铁UI方法,所以我希望数据水平流动而不是垂直流动.
我需要的内容如下图所示:

结果数据是动态的.我想首先根据父div高度垂直绘制div,然后水平绘制div.类似于WPF包装面板的东西,但我还没有实现它.
这是我尝试过的,水平绘制然后垂直绘制:
小提琴:http://jsfiddle.net/4wuJz/2/
HTML:
<div id="wrap">
<div id="wrap1">
<div class="result">
<div class="title">1</div>
<div class="postcontent">
<p>Test</p>
</div>
</div>
<div class="result">
<div class="title">2</div>
<div class="postcontent">
<p>Test</p>
</div>
</div>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
CSS
#wrap {
width:100%;
height: 500px;
background-color: rgba(0,0,0,0.5);
overflow:scroll;
overflow-y:hidden;
}
#wrap1 {
width:2500px;
height:500px;
text-align: center;
}
.result {
width: 300px;
vertical-align: middle;
float:left;
background: rgba(120,30,20,0.5);
padding: 10px;
margin: 30px 0px 30px 30px;
}
Run Code Online (Sandbox Code Playgroud)
如何更改代码以便满足所需的输出?有没有可用的jQuery插件?
添加clear: left到.result班级,使您的盒子垂直堆叠.
然后将结果包装为3个块并水平浮动这些块.您可以使用您可能用于输出结果标记或使用jQuery的任何后端语言来执行该逻辑:
$('.result:nth-child(3n+1)').each(function() {
$(this).add( $(this).next().next().addBack() ).wrapAll('<div style="float:left"></div>');
});
Run Code Online (Sandbox Code Playgroud)
这是一个响应更快的解决方案,它在窗口调整大小时重新计算:Demo.
注意:它假设所有方框都具有相同的高度.如果不是这种情况,您可以max-height在resultHeight变量中进行硬编码.
$(window).resize(function() {
var resultHeight = $('.result:first').outerHeight(true),
nRows = Math.floor( $('#wrap1').height() / resultHeight );
$('.results-column').contents().unwrap();
$('.result:nth-child('+nRows+'n+1)').each(function() {
$(this).nextAll().slice(0, nRows-1).add(this).wrapAll('<div class="results-column"></div>');
});
}).resize();
Run Code Online (Sandbox Code Playgroud)
添加了CSS:
#wrap1 {
white-space: nowrap;
}
.results-column {
display: inline-block;
vertical-align: top;
}
Run Code Online (Sandbox Code Playgroud)
还可以查看Isotope的cellsByColumn/ fitColumns布局.
最后,您的用例是使用Flexible Box Layout的一个主要示例.我还没有提到这一点,因为已经有其他答案显示了这个解决方案,而且因为目前很难制作跨浏览器:
虽然,一切都没有丢失.如果你想今天使用Flexbox,那么有一个非常有用的Flexbox生成器.
使用Flexbox的纯CSS解决方案:演示
#wrap1 {
display: -webkit-box;
display: -moz-box;
display: -ms-flexbox;
display: -webkit-flex;
display: flex;
-webkit-box-direction: normal;
-moz-box-direction: normal;
-webkit-box-orient: vertical;
-moz-box-orient: vertical;
-webkit-flex-direction: column;
-ms-flex-direction: column;
flex-direction: column;
-webkit-flex-wrap: wrap;
-ms-flex-wrap: wrap;
flex-wrap: wrap;
-webkit-box-pack: start;
-moz-box-pack: start;
-webkit-justify-content: flex-start;
-ms-flex-pack: start;
justify-content: flex-start;
-webkit-align-content: flex-start;
-ms-flex-line-pack: start;
align-content: flex-start;
-webkit-box-align: start;
-moz-box-align: start;
-webkit-align-items: flex-start;
-ms-flex-align: start;
align-items: flex-start;
}
Run Code Online (Sandbox Code Playgroud)
我已经测试了这个解决方案,它可以在IE10,IE11,Chrome 31,Opera 18和Firefox 29 Nightly中正常运行.
注意: Firefox <= 27不支持具有多个行/列的Flexbox(它不支持flex-wrap: wrap).我已经在Firefox 29上测试了这个(每晚)它运行正常,所以我相信它应该很快就能稳定下来.
Flexbox 将是一个无 JavaScript 的解决方案:
#wrap1 {
display: flex;
flex-wrap: wrap;
flex-direction: column;
}
Run Code Online (Sandbox Code Playgroud)
演示:http : //jsfiddle.net/4wuJz/5/
| 归档时间: |
|
| 查看次数: |
2778 次 |
| 最近记录: |