在 CSS 中以动态宽度居中内联块

Posted

技术标签:

【中文标题】在 CSS 中以动态宽度居中内联块【英文标题】:Center inline-blocks with dynamic width in CSS 【发布时间】:2012-03-03 23:35:58 【问题描述】:

所以.. 我有一个动态宽度页面。下面,包装器 div 将其中的 div 居中。但是,每个 div 都有一个样式:

display:inline-block;
width:400px; /* static */

这使得内部 div 并排排列。但这意味着根据浏览器的宽度以及可以并排放置多少个 div 而不会中断到下一行,会留下一些空白。

要了解我的目标,请打开您的 Google Chrome 新标签页并拖动您的浏览器窗口以使其更小。你会看到,当你走得太远时,一些 chrome 应用会撞到下一行,但它仍然保持居中。

在我的例子中,他们碰到下一行并变得不居中。

这是我的代码的样子:

<div class="wrapper">
    <div class="iB"></div>
    <div class="iB"></div>
    <div class="iB"></div>
    <div class="iB"></div>
    <div class="iB"></div>
    <div class="iB"></div>
</div>

我希望内部 div 并排,除非没有足够的空间,在这种情况下,最后一个会撞到下一行,同时保持在父 div 的中心。

感谢您的帮助。

【问题讨论】:

【参考方案1】:

如果我理解你正确地将text-align: center 添加到你的.wrapper 样式应该会产生预期的效果。有关示例,请参阅this fiddle。调整结果面板的大小以观察框的重新排序。

就像 Akaishen 已经提到的 inline-blocks 像文本一样流动。这就是您可以控制它们与text-align 对齐的原因。但是,如果您想对布局进行非常精细的控制,使用 inline-blocks 可能会遇到问题。因为它们像文本一样流动,它们之间的空白例如不会被忽略。不幸的是,您无法真正确定跨浏览器和操作系统的空间的绝对宽度。我的示例中的块之间的间隙是由此引起的。

【讨论】:

这正是我想要的!现在这更像是一种技巧而不是正确的方法吗? @jake 这不是 hack,请参阅上面的解释 我知道这不是黑客行为。我过去曾使用过它,但我什至没有想过要使用它。我不应该说“hack”,我的意思是必须有更好的方法来做到这一点。但就目前而言,我认为这是最好的方法。【参考方案2】:

当您使用display: inline-block 时,&lt;div&gt; 标签本质上是内联元素,可以这样设置样式。 text-align: center 将使每个元素居中。此时,您需要一个容器/包装器来定义最大和最小宽度。

可能有更好的方法来实现您正在寻找的东西,这与 Chrome 窗口的工作方式并不完全相同,尽管这是一个开始:fiddle

【讨论】:

谢谢!是的,我认为有更好的方法。将来可能与css3 box-flex有关。 回答您对 raphinesse 的问题,这不是 hack。但是,IE7 没有在非内联元素上实现内联块。 &lt;div&gt; 标签不是自然的内联元素。在 IE7 中,您将获得一系列垂直框。你可以阅读更多关于它的信息here。祝你好运!

以上是关于在 CSS 中以动态宽度居中内联块的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 CSS 使多个内联块元素居中?

CSS 固定大小/居中站点的基本CSS结构(使用内联块)

CSS-居中方法汇总

如何居中显示:块/内联块

css水平居中的小小探讨

以动态宽度居中固定 div (CSS)