我希望 flex 项目居中但是当我们有第二行时,有 5 个(来自下图)低于 1 并且不在父项中居中。
这是我所拥有的示例:
ul {
display: flex;
flex-direction: row;
flex-wrap: wrap;
justify-content: center;
margin: 0;
padding: 0;
}
li {
list-style-type: none;
border: 1px solid gray;
margin: 15px;
padding: 5px;
width: 200px;
}
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
</ul>
http://jsfiddle.net/8jqbjese/2/
原文由 Etienne Noël 发布,翻译遵循 CC BY-SA 4.0 许可协议
Flexbox 挑战与局限
挑战在于将一组弹性项目居中并将它们左对齐。但是除非每行有固定数量的盒子,并且每个盒子都是固定宽度的,否则目前使用 flexbox 是不可能的。
使用问题中发布的代码,我们可以创建一个新的 flex 容器来包装当前的 flex 容器(
ul
),这将允许我们将ul
与justify-content: center
。然后
ul
的弹性项目可以与justify-content: flex-start
左对齐。这将创建一组居中的左对齐弹性项目。
这种方法的问题是,在某些屏幕尺寸下,
ul
的右侧会有一个间隙,使其不再居中显示。发生这种情况是因为在 flex 布局(实际上,通常是 CSS)中,容器:
右边空白的最大长度是容器期望在那里的弹性项目的长度。
在下面的演示中,通过水平调整窗口大小,您可以看到空格来来去去。
演示
更实用的方法
使用
inline-block
和 media queries 可以在没有 flexbox 的情况下实现所需的布局。HTML
CSS
上面的代码呈现了一个水平居中的容器,其中的子元素左对齐,如下所示:
演示
其他选项
在最后一行正确调整弹性项目的大小和对齐
德桑德罗砌体