如何使用 Flexbox 使一个弹性项目居中对齐并右对齐另一个

Posted

技术标签:

【中文标题】如何使用 Flexbox 使一个弹性项目居中对齐并右对齐另一个【英文标题】:How to center-align one flex item and right-align another using Flexbox [duplicate] 【发布时间】:2016-01-31 09:23:24 【问题描述】:

我是 Flexbox 的新手,想对齐按钮,但我不知道如何处理仅使用 Flexbox 在同一行上居中对齐按钮和右对齐按钮的常见情况。

但是,我找到了一种方法,它使用与右对齐项目相同长度的不可见左对齐项目和 flex justify-contentspace-between 来使中间项目居中。

Flexbox 有更直接的方法吗?

.flexcontainer 
  display: flex;
  justify-content: space-between;
  width: 500px;
  height: 200px;


.iteminvisible 
  flex: 0 1 auto;
  width: 100px;
  height: 100px;
  visibility: hidden;


.itemcenter 
  flex: 0 1 auto;
  width: 150px;
  height: 100px;


.itemright 
  flex: 0 1 auto;
  width: 100px;
  height: 100px;
<div class="flexcontainer">
  <div class="iteminvisible">Other</div>
  <div class="itemcenter">One</div>
  <div class="itemright">Other</div>
</div>

【问题讨论】:

【参考方案1】:
   .container 
      display: flex;
      flex-direction: column; //this will allow flex-end to move item to the right            
      align-items: center;
   
   .right-item 
      align-self: flex-end;
   

【讨论】:

但这会将右边的项目放在中间的下方,不是吗? 这会将项目放在单独的行中 这不是预期的行为见小提琴:jsfiddle.net/jLw437s2【参考方案2】:

如您的问题中所述,将justify-content: space-between 与不可见的弹性项目一起使用是实现所需布局的好方法。请注意,只有当左右项目的长度相等时,中间项目才能居中(see demo)。

您可能要考虑的另一个解决方案涉及auto margins 和absolute positioning。这种方法的两个好处是不需要额外的标记,并且无论项目大小都可以实现真正的居中。一个缺点是从document flow 中删除了居中的项目(这对您来说可能很重要,也可能无关紧要)。

.flexcontainer 
      display: flex;
      justify-content: flex-start;   /* adjustment */
      position: relative;            /* new */
      width: 500px;
      height: 200px;
    

.itemcenter 
      flex: 0 1 auto;
      width: 150px;
      height: 100px; 
      position: absolute;             /* new */
      left: 50%;
      transform: translateX(-50%);
    

.itemright 
      flex: 0 1 auto;
      width: 100px;
      height: 100px;
      margin-left: auto;              /* new */
    
<div class="flexcontainer">
  <div class="itemcenter">One</div>
  <div class="itemright">Other</div>
</div>

更多详情请点击此处:Methods for Aligning Flex Items along the Main Axis(见框 #62-78)。

【讨论】:

这不居中。它取决于左/右元素的宽度。如果它们相同,则有效。如果没有,这不起作用。

以上是关于如何使用 Flexbox 使一个弹性项目居中对齐并右对齐另一个的主要内容,如果未能解决你的问题,请参考以下文章

如何使弹性容器居中但左对齐弹性项目

如何使弹性容器居中但左对齐弹性项目

flexbox弹性盒子布局

flexbox将项目对齐到指定的基线?

不知道如何沿主轴单独对齐我的弹性项目

Flexbox - 如何左对齐最后一个弹性项目? [复制]