是否有一种比使用绝对位置更灵活的方式来将“Contact”向右对齐?

.main { display: flex; } .a, .b, .c { background: #efefef; border: 1px solid #999; } .b { flex: 1; text-align: center; } .c { position: absolute; right: 0; } <h2>With title</h2> <div class="main"> <div class="a"><a href="#">Home</a></div> <div class="b"><a href="#">Some title centered</a></div> <div class="c"><a href="#">Contact</a></div> </div> <h2>Without title</h2> <div class="main"> <div class="a"><a href="#">Home</a></div> <!--<div class="b"><a href="#">Some title centered</a></div>--> <div class="c"><a href="#">Contact</a></div> </div>

http://jsfiddle.net/vqDK9/


当前回答

更灵活的方法是使用自动左距(灵活项对待自动左距与在块格式化上下文中使用时略有不同)。

.c {
    margin-left: auto;
}

更新的小提琴:

.main { display: flex; } .a, .b, .c { background: #efefef; border: 1px solid #999; } .b { flex: 1; text-align: center; } .c {margin-left: auto;} <h2>With title</h2> <div class="main"> <div class="a"><a href="#">Home</a></div> <div class="b"><a href="#">Some title centered</a></div> <div class="c"><a href="#">Contact</a></div> </div> <h2>Without title</h2> <div class="main"> <div class="a"><a href="#">Home</a></div> <!--<div class="b"><a href="#">Some title centered</a></div>--> <div class="c"><a href="#">Contact</a></div> </div> <h1>Problem</h1> <p>Is there a more flexbox-ish way to right align "Contact" than to use position absolute?</p>

其他回答

很容易

.main {
    display: flex;
    flex-direction:row-reverse;
}

给你。在flex容器上设置justify-content: space-between。

.main { display: flex; justify-content: space-between; } .a, .b, .c { background: #efefef; border: 1px solid #999; } .b { text-align: center; } <h2>With title</h2> <div class="main"> <div class="a"><a href="#">Home</a></div> <div class="b"><a href="#">Some title centered</a></div> <div class="c"><a href="#">Contact</a></div> </div> <h2>Without title</h2> <div class="main"> <div class="a"><a href="#">Home</a></div> <!-- <div class="b"><a href="#">Some title centered</a></div> --> <div class="c"><a href="#">Contact</a></div> </div>

基于TetraDev回答的示例代码

右图: * { 轮廓:0.4 px红色虚线; } .main { 显示:flex; flex-direction:行; 对齐项目:中心; } h1 { flex-basis: 100%; } img { 边距:0 5px; 高度:30 px; } < div class = "主" > <标题>安全支付h1 > < / < img src = " https://i.stack.imgur.com/i65gn.png " > < img src = " https://i.stack.imgur.com/i65gn.png " > < / div >

左图:

* { 轮廓:0.4 px红色虚线; } .main { 显示:flex; flex-direction:行; 对齐项目:中心; } h1 { flex-basis: 100%; text-align:正确; } img { 边距:0 5px; 高度:30 px; } < div class = "主" > < img src = " https://i.stack.imgur.com/i65gn.png " > < img src = " https://i.stack.imgur.com/i65gn.png " > <标题>安全支付h1 > < / < / div >

您也可以使用填充物来填充剩余的空间。

<div class="main">
    <div class="a"><a href="#">Home</a></div>
    <div class="b"><a href="#">Some title centered</a></div>
    <div class="filler"></div>
    <div class="c"><a href="#">Contact</a></div>
</div>

.filler{
    flex-grow: 1;
}

我已经更新了3个不同版本的解决方案。这是因为讨论了使用额外填充元素的有效性。如果您运行剪切的代码,您会看到所有解决方案都做不同的事情。例如,在项目b上设置填充类将使该项填充剩余的空间。这样做的好处是没有不可点击的“死”空间。

<div class="mainfiller"> <div class="a"><a href="#">Home</a></div> <div class="b"><a href="#">Some title centered</a></div> <div class="filler"></div> <div class="c"><a href="#">Contact</a></div> </div> <div class="mainfiller"> <div class="a"><a href="#">Home</a></div> <div class="filler b"><a href="#">Some title centered</a></div> <div class="c"><a href="#">Contact</a></div> </div> <div class="main"> <div class="a"><a href="#">Home</a></div> <div class="b"><a href="#">Some title centered</a></div> <div class="c"><a href="#">Contact</a></div> </div> <style> .main { display: flex; justify-content: space-between; } .mainfiller{display: flex;} .filler{flex-grow:1; text-align:center} .a, .b, .c { background: yellow; border: 1px solid #999; } </style>

我发现添加'justify-content: flex-end'到flex容器解决了问题,而'justify-content: space-between'没有做任何事情。