2015 年更新
我注意到以前的设置有一个小问题。将文章保留在第一个占位符内会使边距增加一倍。这导致在跨每个文章换行点调整页面大小时出现轻微的不一致。
这个更新的小提琴摆脱了这些问题:
http://jsfiddle.net/C4fbX/4/
然而,现在这种布局很可能通过 Flexbox 以更好的方式实现。
https://css-tricks.com/snippets/css/a-guide-to-flexbox/
回答 2012
以下方法有效,但有点疯狂。很烦人的是,这不是 CSS 可以轻松处理的:
小提琴
http://jsfiddle.net/C4fbX/
方法
此方法适用于 Nick 发布的基本思想,并使用此方法定位左浮动系统......这解决了您总是在居中容器中居中对齐元素的问题。
所以而不是:
[][][][]
[][]
你得到:
[][][][]
[][]
需要以下规定:
- 您需要包含与文章一样多的占位符元素。该方法使用这些来计算从哪里缩进文章。这也意味着占位符元素的宽度和水平边距/填充必须与文章的匹配。
- 文章需要放在第一个占位符内。
- 为了解决与 相关的空白问题
inline-block
,font-size
和line-height
被清零,这意味着必须为文章再次手动设置它们。您可以通过从 css 中删除这些归零属性并确保您的占位符标记没有任何空格来解决此问题。
- 我非常怀疑这是否适用于旧版浏览器 - 但似乎适用于当前的现代浏览器。
- 依赖绝对位置意味着您的文章不会占用文档中通常的空间,因此您必须在设计中考虑到这一点或在
#container
元素上设置固定高度
标记
<div class="container">
<div class="placeholder">
<div class="position">
<article>a</article>
<article>b</article>
<article>c</article>
<article>d</article>
<article>e</article>
</div>
</div>
<div class="placeholder"></div>
<div class="placeholder"></div>
<div class="placeholder"></div>
<div class="placeholder"></div>
</div>
css
.container {
font-size: 0;
line-height: 0;
text-align: center;
}
.placeholder {
display: inline-block;
width: 200px;
margin-left: 5px;
margin-right: 5px;
height: 0px;
}
.position {
position: absolute;
}
article {
font-size: 12pt;
line-height: 1.2em;
float: left;
margin: 5px;
width: 200px;
height: 100px;
background: red;
}