【发布时间】:2013-10-31 20:50:38
【问题描述】:
我有一堆相同大小的块设置为 display:inline-block 在一个 div 中设置了 text-align:center 以对齐块。
| _____ _____ _____ _____ |
| | | | | | | | | |
| | 1 | | 2 | | 3 | | 4 | |
| |_____| |_____| |_____| |_____| |
| _____ _____ _____ _____ |
| | | | | | | | | |
| | 5 | | 6 | | 7 | | 8 | |
| |_____| |_____| |_____| |_____| |
| |
这些块水平填充 div,随着浏览器窗口的缩小,一些块会换行,从而创建更多的行和更少的列。我希望所有内容仍保持居中,最后一行与左侧齐平,如下所示:
| _____ _____ _____ |
| | | | | | | |
| | 1 | | 2 | | 3 | |
| |_____| |_____| |_____| |
| _____ _____ _____ |
| | | | | | | |
| | 4 | | 5 | | 6 | |
| |_____| |_____| |_____| |
| _____ _____ |
| | | | | |
| | 7 | | 8 | |
| |_____| |_____| |
| |
目前发生的情况是这样的:
| _____ _____ _____ |
| | | | | | | |
| | 1 | | 2 | | 3 | |
| |_____| |_____| |_____| |
| _____ _____ _____ |
| | | | | | | |
| | 4 | | 5 | | 6 | |
| |_____| |_____| |_____| |
| _____ _____ |
| | | | | |
| | 7 | | 8 | |
| |_____| |_____| |
| |
我不能像一个建议那样添加额外的填充 div,因为可能有任意数量的块,并且行和列的数量会因浏览器宽度而异。出于同样的原因,我也不能直接设置块 #7 的样式。无论有多少列,块必须始终居中。
这里有一支笔可以更好地演示:
http://codepen.io/anon/pen/IDsxn
这可能吗?我觉得应该是的。我宁愿不使用 flexbox,因为它只有 ie10+,我想要 ie9+。我真的很想要一个纯 CSS 解决方案,但如果你告诉我 JS 是唯一的方法,我很乐意看到它的实际应用。
供参考 - 类似的问题,但没有一个被彻底解释:
How to align left last row/line in multiple line flexbox
CSS - Left align the last row of images in a centered div
Center multiple inline blocks with CSS and align the last row to the left
【问题讨论】:
-
@j08691 - 如果屏幕宽度小于容器最大宽度,那么您会看到问题。
-
在容器上放一个背景色,然后你会看到它是如何不完全居中的。
-
我可能猜想这是不可能的。或者,您可能需要大量媒体查询来准确指定每个屏幕尺寸的容器宽度。
-
@IvanDurst,我玩了很长一段时间,我发现为什么内联元素如此困难。它们本质上是文本(因此 html 中的空格会变得很奇怪)。一旦它们达到它们所在宽度的末端,就没有收缩包装。你不知道行何时结束,这就是为什么我们不能轻易地做悬挂标点。这是一个艰难的:)
-
有趣的是我如何在你的问题中找到我的答案。
标签: css grid-layout text-align