我正在开发一个响应式网页设计,将4列中的多个项目并排放置。这些物品的高度不同,因此漂浮不起作用。
这就是目前发生的事情:
floating wrong http://f.cl.ly/items/05233z0M0H0x1t1K331B/floating-wrong.png
关于如何使元素浮动的任何想法:
floating right http://f.cl.ly/items/300e1s0o0p1r1P3k2U3z/floating-right.png
我想这应该适用于jQuery“砌体”,对吧?但是我正在使用Zepto.js,我猜一个jQuery插件不起作用。
有没有纯CSS(CSS3)方式?有些窍门吗?
如果这不适用于纯CSS或JS,则可以这样做:
floating different http://f.cl.ly/items/0p3O1k0d332c242c0G0F/floating-different.png
现在第5行,第6行和第7行并没有像你期望的那样“真正”浮动,但内部有一个隐藏的换行符(clearfix)。
纯CSS有没有办法解决这个问题?例如。使用nth-child(4n+4)
和像:after
这样的伪选择器来应用content
的换行符?
有什么想法吗?有什么聪明的技巧可以让它发挥作用吗?
答案 0 :(得分:31)
你可以对每个第五个元素应用一个清除强制它从左边开始。我认为它在css3中看起来像这样:
div#wrapper > *:nth-child(4n+1) {
clear: both;
}
答案 1 :(得分:21)
如@Arieljuod所述,您可以使用display: inline-block
代替float
。它的美妙之处在于它可以在所有浏览器中运行(包括IE7 +以及下面的hack)并且完全流畅:
div {
...
display: inline-block;
vertical-align: top;
margin-bottom: 0.3em;
*display: inline;
*margin-right: 0.3em;
*zoom: 1;
...
}
答案 2 :(得分:1)
我知道我迟到了派对,但有人刚刚将这个问题与另一个类似的问题联系起来,我意识到这个问题错过了flexbox解决方案...... (当被问到这个问题时,它就不在了。)
添加所需的供应商前缀并在CSS中删除不必要的
.parent {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: -moz-box;
display: flex;
-webkit-flex-wrap: wrap;
-ms-flex-wrap: wrap;
flex-wrap: wrap;
-webkit-flex-flow: row wrap;
-ms-flex-flow: row wrap;
flex-flow: row wrap;
}
答案 3 :(得分:0)
对于第二个选项,“float:left”的instad使用“display:inline-block”,你甚至可以将它与text-align:center结合起来,总是填充100%,除了最后一行
对于第一个选项,您可以将1和5放在onw容器中,将2和6放在另一个容器上,然后将其中一个放入那些容器
答案 4 :(得分:0)
对于最后一个,你可以用容器包围每组四个。然后将div放在容器内部,如果你不想或不想手动执行此操作,可以使用JavaScript轻松完成。
答案 5 :(得分:0)
第一个选项
CSS multi-column layout,一旦得到充分的标准化和支持,就可以提供灵活的方式来实现这一目标。
唯一想到的其他CSS解决方案,虽然可能没有足够的响应能力,但是将列中的元素分组(1和5,然后是2和6,然后是3和7,然后是4)。
除了这两个选项之外,我认为JS是必需的。
答案 6 :(得分:0)
有点晚,但在另一个分频器中加1。然后在该分隔符中放入7(您必须调整分隔符,使得7出现在1以下)。使用溢出可能很有用:在此分隔符中可见。
答案 7 :(得分:0)
我会像这样使用 jQuery:
c = df.groupby('type').cumcount()
df.set_index([c, df['type'].values]).stack().unstack([1, 2])
A B C
type qt vol type qt vol type qt vol
0 A 1 10 B 3 11 C 4 20
1 A 2 12 B 4 20 C 4 20
2 A 1 12 B 4 20 C 4 20
3 NaN NaN NaN NaN NaN NaN C 4 20
var max_height = divs_cnt = 0;
$("#holder .box").each(function() {
if (divs_cnt % 4 == 0) {
$(this).css("clear", "both");
}
if (max_height < $(this).height()) {
$("#holder .box").height($(this).height());
}
max_height = $(this).height();
divs_cnt ++;
})