【发布时间】:2011-06-04 07:15:31
【问题描述】:
假设我有这个 HTML:
<h3>Features</h3>
<ul>
<li><img src="alphaball.png">Smells Good</li>
<li><img src="alphaball.png">Tastes Great</li>
<li><img src="alphaball.png">Delicious</li>
<li><img src="alphaball.png">Wholesome</li>
<li><img src="alphaball.png">Eats Children</li>
<li><img src="alphaball.png">Yo' Mama</li>
</ul>
还有这个 CSS:
li { text-align:center; display:inline-block; padding:0.1em 1em }
img { width:64px; display:block; margin:0 auto }
结果可以在这里看到:http://jsfiddle.net/YMN7U/1/
现在想象我想把它分成三列,相当于在第三个<li> 之后注入一个<br>。 (实际上这样做在语义和语法上都是无效的。)
我知道如何在 CSS 中选择第三个<li>,但是如何在它之后强制换行?这不起作用:
li:nth-child(4):after { content:"xxx"; display:block }
我也知道这种特殊情况可以通过使用float 而不是inline-block,但我对使用float 的解决方案不感兴趣。我也知道,对于固定宽度的块,可以通过将父 ul 上的宽度设置为该宽度的 3 倍左右;我对这个解决方案不感兴趣。我也知道如果我想要真正的专栏,我可以使用display:table-cell;我对这个解决方案不感兴趣。我对强制中断内联内容的可能性感兴趣。
编辑:明确地说,我对“理论”感兴趣,而不是特定问题的解决方案。 CSS 是否可以在display:inline(-block)? 元素的中间注入换行符,还是不可能?如果你确定这是不可能的,这是一个可以接受的答案。
【问题讨论】:
-
将第一个三个和第二个三个放在两个不同的列表中?我假设你不想这样做,但我想我会把它扔在那里。
-
看来您需要告诉我们您在这里真正想要实现的目标,以便有人可以推荐最佳方法。您排除的所有选项都可以解决您遇到的问题,为什么需要另一个解决方案?
-
@Jake 事实上,我在做我所说的:使用元素的语义列表并希望在特定元素之后换行。在实践中,我设置了容器的宽度,但这仅适用于我的特定情况,因为这些项目恰好是相同的宽度,我希望它们以一致的边缘包裹。情况可能并非总是如此。我“真正想要实现” 是了解 CSS 是否可以在内联流中间强制换行。自信的回答“这绝对不可能”是可以接受的(如果正确的话)。