我需要的是在下面的图像中演示:@H_502_3@
结果数据是动态的.我想先根据父div高度然后水平绘制divs.与WPF包装面板类似的东西,但是我还没有实现.@H_502_3@
这是我试过的,水平绘制,然后垂直绘制:@H_502_3@
小提琴:http://jsfiddle.net/4wuJz/2/@H_502_3@
HTML:@H_502_3@
<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>
CSS@H_502_3@
#wrap { width:100%; height: 500px; background-color: rgba(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; }
解决方法
然后以3的方式包装结果并水平浮动这些块.您可以使用您可能使用的任何后端语言来输出结果标记或使用jQuery来执行该逻辑:@H_502_3@
$('.result:nth-child(3n+1)').each(function() { $(this).add( $(this).next().next().addBack() ).wrapAll('<div style="float:left"></div>'); });
这是一个更灵敏的解决方案,重新计算窗口大小:Demo.@H_502_3@
注意:它假定所有框具有相同的高度.如果不是这样,您可以在resultHeight变量中对最大高度进行硬编码.@H_502_3@
$(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();
#wrap1 { white-space: nowrap; } .results-column { display: inline-block; vertical-align: top; }
还要查看Isotope的cellByColumn / fitColumns布局.@H_502_3@
最后,您的用例是使用Flexible Box Layout的主要示例.我还没有提到这一点,因为已经有其他答案显示了这个解决方案,也是因为现在很难使跨浏览器:@H_502_3@
> Firefox< = 27,IE10和Safari< = 6支持旧版本的规范
>较新的Chrome,Safari和IE11支持新的语法
>不能忘记所有的浏览器前缀!@H_502_3@
参考:http://caniuse.com/flexbox@H_502_3@
虽然,一切都没有失去.如果您今天要使用FlexBox,那么Flexbox generator非常有用.@H_502_3@
使用灵活框架的仅适用于CSS的解决方案:Demo@H_502_3@
#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; }
我已经测试了这个解决方案,它可以在IE10,IE11,Chrome 31,Opera 18和Firefox 29中正常工作.@H_502_3@
注意:Firefox< = 27不支持具有多个行/列的FlexBox(它不支持flex-wrap:wrap).我已经在Firefox 29(夜间)测试了它,它的工作正常,所以我相信它应该稳定下来.@H_502_3@