我如何在左边对齐2个第一个元素,在右边对齐最后一个元素

yav*_*avg 7 html css css3 centering flexbox

我认为我的代码井井有条,但是我不知道为什么我无法以这种方式组织元素:

|**   *|
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

|**   *|
Run Code Online (Sandbox Code Playgroud)
.container {
  border: 1px solid red;
  display: flex;
  justify-content: flex-start;
  width: 100%;
  height: 200px;
  flex-direction: row;
}

.container div {
  border: 1px solid blue;
  height: 100px;
  width: 100px;
}

.right {
  display: flex;
  align-self: flex-end;
}
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?这是我的实时代码:https : //jsfiddle.net/uxpkh9nL/

kuk*_*kuz 6

而不是align-self: flex-end(在行flex-direction中,align-self并在横轴align-items对齐弹性项目,这意味着垂直) - 您可以在元素上使用- 请参阅下面的演示:margin-left: autoright

.container{
  border:1px solid red;
  display:flex;
  justify-content:flex-start;
  width:100%;
  height: 200px;
  flex-direction:row;
}
.container div{
  border:1px solid blue;
  height: 100px;
  width: 100px;
}

.right{
  display:flex;
  /*align-self:flex-end;*/
  margin-left: auto; /* added */
}
Run Code Online (Sandbox Code Playgroud)
<div class="container">
  <div>
    1
  </div>
  <div>
    2
  </div>  
  <div class="right">
    3
  </div>  
</div>
Run Code Online (Sandbox Code Playgroud)


在这种情况下,我更喜欢使用边距,但您也可以使用伪元素并用于分隔项目并使用flex-grow: 1它。

  • 添加order: 1flex itemsorder: 2元素order: 3elements 中,right将按该顺序放置flex items。

  • 添加flex-grow: 1伪元素会强制它填充剩余的所有空间,从而将元素放置right到右端。

但如果你问我的话,这就太过分了 - 请参阅下面的演示:

.container{
  border:1px solid red;
  display:flex;
  justify-content:flex-start;
  width:100%;
  height: 200px;
  flex-direction:row;
}
.container div{
  border:1px solid blue;
  height: 100px;
  width: 100px;
  order: 1; /* added */
}

.right{
  display:flex;
  /*align-self:flex-end;*/
  order: 3 !important; /* added */
}

.container:after { /* added */
  order: 2;
  content: '';
  display: block;
  flex-grow: 1;
}
Run Code Online (Sandbox Code Playgroud)
<div class="container">
  <div>
    1
  </div>
  <div>
    2
  </div>  
  <div class="right">
    3
  </div>  
</div>
Run Code Online (Sandbox Code Playgroud)