如何使前两个元素左对齐,最后一个元素右对齐?

10

我认为我的代码没有问题,但我不知道为什么我无法按照这种方式组织我的元素:

|**   *|

这是我的代码:

.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;
}
<div class="container">
  <div>
    1
  </div>
  <div>
    2
  </div>
  <div class="right">
    3
  </div>
</div>

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

我没有在意。 - Kamalesh M. Talaviya
1个回答

6

行 flex-direction 中,align-selfalign-items 会将 flex items交叉轴 上对齐,这意味着垂直方向上对齐。因此,你可以使用 margin-left: autoright 元素上来替代 align-self: flex-end。请参见下面的演示:

.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 */
}
<div class="container">
  <div>
    1
  </div>
  <div>
    2
  </div>  
  <div class="right">
    3
  </div>  
</div>


在这种情况下,我更喜欢使用边距,但您也可以使用伪元素来调整项目间的间距,并在其上使用flex-grow: 1

  • flex项目添加order: 1,将伪元素添加order: 2,将right元素添加order: 3,可以将flex项目按照该顺序排列

  • 伪元素添加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;
}
<div class="container">
  <div>
    1
  </div>
  <div>
    2
  </div>  
  <div class="right">
    3
  </div>  
</div>


它能工作,但是...是否有用Flexbox实现的方法呢? - yavg
你在 flexbox 中没有 justify-self - 使用边距在 flex axis 上对齐是 flexbox 的方式 :) 将为答案添加另一个选项... - kukkuz
1
我正在学习flexbox,对于我来说它是一些复杂的东西,你能详细解释一下吗?毕竟你是最好的答案。 - yavg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接