说我有3个div与flexbox
水平显示:
| |-div1-| |-center-div-| |-wider-div-| |
我希望中心div与父级的中间对齐。我怎么能做到这一点? justify-content
将基于所有宽度的总和将所有3个div放在中心,并且将align-self: center
应用于中间div不会做任何事情,因为align属性操纵另一个轴上的定位。
是否有响应式CSS解决方案,还是应该使用jQuery?
ul {
display: flex;
justify-content: center;
width: 100%;
background-color: purple;
}
li {
background-color: red;
border: 5px solid blue;
list-style: none;
}

<ul>
<li><a href = "#">short</a></li>
<li><a href = "#">want center</a></li>
<li><a href = "#">loooooooooooooooooong</a></li>
</ul>
&#13;
此问题的说明: https://jsfiddle.net/7w8mp8Lj/2/
答案 0 :(得分:7)
您可以将第一个和最后一个li
设置为flex: 1
,并将a
设置为内联块,并将1/2/3 li
对齐为右/中心/左
<强> jsfiddle 强>
ul {
display: flex;
justify-content: center;
width: 100%;
background-color: purple;
list-style: none;
padding: 0;
}
li:nth-child(1) {
text-align: right;
flex: 1;
}
li:nth-child(2) {
text-align: center;
}
li:nth-child(3) {
text-align: left;
flex: 1;
}
li a {
display: inline-block;
background-color: red;
border: 5px solid blue;
}
&#13;
<ul>
<li><a href="#">short</a></li>
<li><a href="#">want center</a></li>
<li><a href="#">loooooooooooooooooong</a></li>
</ul>
&#13;
答案 1 :(得分:4)
这是一个灵活的方法,可以完美地将中间项目集中在:
popoverMenuViewController?.permittedArrowDirections = UIPopoverArrowDirection(rawValue:0)
ul {
display: flex;
padding: 0;
}
li {
display: flex;
justify-content: center;
flex: 1;
background-color: red;
border: 2px solid blue;
}
li:first-child > a {
margin-right: auto;
}
li:last-child > a {
margin-left: auto;
}
以下是它的工作原理:
<ul>
<li>
<a href="#">short</a>
</li>
<li>
<a href="#">want center</a>
</li>
<li>
<a href="#">loooooooooooooooooong</a>
</li>
</ul>
是主要的灵活容器。ul
弹性项目都为li
,以便平均分配容器空间。flex: 1
消耗了行中的所有空格并且宽度相等。li
设为灵活容器并添加li
justify-content: center
边距左右移动外部锚点。答案 2 :(得分:3)
您可以使用绝对定位来使非居中的物品不在流动状态,这样它们就不会影响居中。
ul {
display: flex;
justify-content: center;
background-color: purple;
padding: 0;
list-style: none;
}
li {
position: relative;
}
li > a {
display: block;
background-color: red;
border: 5px solid blue;
}
li:first-child > a {
position: absolute;
right: 0;
}
li:last-child > a {
position: absolute;
left: 0;
}
<ul>
<li><a href="#">short</a></li>
<li><a href="#">want center</a></li>
<li><a href="#">loooooooooooooooooong</a></li>
</ul>
但是,请注意,您将失去灵活性,因为Flex容器的绝对定位子元素不参与flex布局(重新排序步骤除外)。
答案 3 :(得分:1)
我使用一个内部有三个盒子的弹性容器,其中两个 - 左侧和右侧 - 具有相同的宽度,并且是自身的柔性容器,包裹任意宽度的内容:
[(a box) ] [centered content] [ (a longer box)]
left wrapper right wrapper
以下是代码:
<div class="test">
<div class="wrapper left">
<div class="box one"></div>
</div>
<div class="box two"></div>
<div class="wrapper right">
<div class="box three"></div>
</div>
</div>
CSS:
.test {
height: 50px;
display: flex;
justify-content: center;
}
.wrapper {
width: 33%;
display: flex;
}
.wrapper.left {
justify-content: flex-end;
}
.box {
border: 1px solid red;
}
.one {
width: 100px;
}
.two {
width: 50px;
}
.three {
width: 150px;
}