我知道flexbox为物品中心提供了一个很好的解决方案。但是当我有3个项目并且我希望中心(第二个)项目相对于窗口居中时,我遇到了一个问题,无论其他2个项目的大小如何。
在我的笔中,您可以看到第二项"客户索引"偏离中心是因为右边的内容比左边的内容要大。 如何强制它居中?
.flex {
display: flex;
align-items: center;
justify-content: space-between;
}

<div class="flex">
<span style="font-size:12px;">small</span>
<span style="font-size:20px;">Client Index</span>
<span style="font-size:18px;">Lots of content that moves the center</span>
</div>
&#13;
答案 0 :(得分:5)
一种方法是设置flex-grow: 1; flex-basis: 0
,使3列均匀分布,然后您可以将文本或内容置于中间位置。
我使用text-align
将中间列居中。您也可以使用display: flex; justify-content: center;
执行相同的操作。
.flex {
display: flex;
align-items: center;
justify-content: space-between;
}
.flex > span {
flex: 1 0 0;
}
.flex > span:nth-child(2) {
text-align: center;
}
&#13;
<div class="flex">
<span style="font-size:12px;">small</span>
<span style="font-size:20px;">Client Index</span>
<span style="font-size:18px;">Lots of content that moves the center</span>
</div>
&#13;
答案 1 :(得分:3)
使用嵌套的弹性容器和auto
边距。
.flex-container {
display: flex;
}
.flex-item {
flex: 1;
display: flex;
justify-content: center;
}
.flex-item:first-child>span {
margin-right: auto;
}
.flex-item:last-child>span {
margin-left: auto;
}
/* non-essential */
.flex-item {
align-items: center;
border: 1px solid #ccc;
background-color: lightgreen;
height: 40px;
}
<div class="flex-container">
<div class="flex-item"><span>short</span></div>
<div class="flex-item"><span>medium</span></div>
<div class="flex-item"><span>lonnnnnnnnnnnnnnnnnnnng</span></div>
</div>
以下是它的工作原理:
flex: 1
,以便平均分配容器空间。justify-content: center
。span
元素都是一个居中的灵活项目。auto
页边距向左和向右移动span
。您也可以放弃justify-content
并仅使用auto
页边距。
但是justify-content
可以在这里工作,因为auto
页边距始终具有优先权。来自规范:
8.1. Aligning with
auto
margins在通过
justify-content
和align-self
进行对齐之前 正空闲空间被分配到该维度的自动边距。