可变高度的浮动元件将兄弟姐妹向下推

Floated elements of variable height push siblings down

提问人:KatieK 提问时间:2/27/2013 更新时间:2/27/2013 访问量:806

问:

我有 6 个元素,应该产生两行,每行 3 个元素,所以我浮动了它们。但是元素的内容差异很大,当一个较高的元素阻止后续的兄弟姐妹一直向左漂浮时,布局就会中断:

Floated elements breaking layout

下面是 CSS 示例:

figure { width: 30%; float: left; margin-left: 1%; font-size: small; outline: solid #999 1px; }
img { max-width: 100%; }

和 HTML:

<figure>
  <img src="http://placekitten.com/150/200?image=1" alt="Kitten 1" />
  <figcaption>Bacon ipsum dolor sit amet short ribs pork chop pork belly spare ribs shoulder tri-tip beef ribs turkey brisket short loin tenderloin ground round. </figcaption>
</figure>
<figure>
  <img src="http://placekitten.com/150/200?image=2" alt="Kitten 2" />
  <figcaption>Short ribs cow corned beef, beef tenderloin swine biltong short loin. </figcaption>
</figure>
<figure>
  <img src="http://placekitten.com/150/200?image=3" alt="Kitten 3" />
  <figcaption>Boudin chuck ground round, pig pastrami salami turkey ham hock beef ribs tongue. </figcaption>
</figure>
<figure>
  <img src="http://placekitten.com/150/200?image=4" alt="Kitten 4" />
  <figcaption>Tri-tip pork loin tongue corned beef shankle ball tip. </figcaption>
</figure>
<figure>
  <img src="http://placekitten.com/150/200?image=5" alt="Kitten 5" />
  <figcaption>Turkey swine tenderloin spare ribs sausage filet mignon hamburger. Leberkas andouille prosciutto, bresaola tri-tip short loin meatloaf shank pig shoulder spare ribs ribeye. </figcaption>
</figure>
<figure>
  <img src="http://placekitten.com/150/200?image=6" alt="Kitten 6" />
  <figcaption>Pastrami andouille tongue tri-tip jerky.</figcaption>
</figure>

还有一个例子 JSFiddle: http://jsfiddle.net/KatieK/5Upbt/

如何让第二行元素在前 3 个元素下方对齐?figure

HTML/CSS 解决方案比 JavaScript/jQuery 解决方案更可取。

HTML CSS格式

评论

0赞 nice ass 2/27/2013
将每 3 个数字包装在 DIV 中?
0赞 Brad M 2/27/2013
+1 用于可爱的小猫照片。您需要使用 css clear: left 再次开始在左侧一直浮动。
0赞 crush 2/27/2013
不过,@BradM这不会把所有的数字都推到左边吗?
0赞 crush 2/27/2013
@KatieK我认为你必须按照One Trick Pony的建议去做,或者你必须像Pinterest那样使用jQuery来定位它们。

答:

3赞 j08691 2/27/2013 #1

仅CSS解决方案怎么样?添加此规则:

figure:nth-of-type(3n+1) {
    clear:left;
}

jsFiddle 示例

3赞 idrumgood 2/27/2013 #2

您可以使用伪类清除每四个元素。:nth-child

figure:nth-child(4n){clear: left;}

编辑:

4n 并不完全削减它。3n + 1 是你想要的。

figure:nth-child(3n + 1){clear: left;}

http://jsfiddle.net/jMCng/1/

评论

0赞 idrumgood 2/27/2013
@j08691 你是对的。(4n) 没有给出 3 行。我已经更新了它和小提琴以使用 (3n + 1)
0赞 idrumgood 2/27/2013
你确定?对我来说看起来像一排 3 只小猫。
0赞 Brian Attwell 2/27/2013
不好意思。现在很好。我不知道上次检查时我在想什么。
2赞 Brian Attwell 2/27/2013 #3

这是我测试过的一个解决方案: http://jsfiddle.net/5Upbt/7/

我修改你的身材风格

figure { display: inline-block; vertical-align: top; width: 30%; margin-left: 1%; font-size: small; outline: solid #999 1px; }

这基于此处更通用的解决方案:http://jsfiddle.net/bazmegakapa/Ft9d2/

评论

0赞 KatieK 2/27/2013
FWIW,我宁愿不要将图形元素锁定为特定大小。