如何左右对齐flexbox列?


121

使用典型的CSS,我可以左右浮动两列中的一列,并在其间留一些装订线空间。我该如何使用flexbox?

http://jsfiddle.net/1sp9jd32/

#container {
  width: 500px;
  border: solid 1px #000;
  display: -webkit-flex;
  display: -ms-flexbox;
  display: flex;
}
#a {
  width: 20%;
  border: solid 1px #000;
}
#b {
  width: 20%;
  border: solid 1px #000;
  height: 200px;
}
<div id="container">
  <div id="a">
    a
  </div>
  <div id="b">
    b
  </div>
</div>

Answers:


278

您可以添加justify-content: space-between到父元素。这样做时,子级flexbox项将与相对侧对齐,并在它们之间留有空间。

更新示例

#container {
    width: 500px;
    border: solid 1px #000;
    display: flex;
    justify-content: space-between;
}


您也可以添加margin-left: auto到第二个元素以使其向右对齐。

更新示例

#b {
    width: 20%;
    border: solid 1px #000;
    height: 200px;
    margin-left: auto;
}


4
嘿,您能否解释一下如何使用margin-left: auto此处正确对齐元素?
hulkinBrain

2
@hulkinBrain,以下是说明:stackoverflow.com/a/33856609/3597276
Michael Benjamin

2
注意:margin-left: auto和那些margin-right: auto技巧与IE11不兼容,对于仍然需要支持它的人。
TetraDev

30

我想出了4种方法来达到目的。这是演示

方法1:

#a {
    margin-right: auto;
}

方法2:

#a {
    flex-grow: 1;
}

方法3:

#b {
    margin-left: auto;
}

方法4:

#container {
    justify-content: space-between;
}

9
方法5:flex:1;在您希望有多余空间的地方插入一个额外的空元素:)
adamdport

如果您嵌入代码段而不是链接到jsfiddle,那么这将是最好,最完整的答案。
styfle

方法1和3与IE 11不兼容!
PeterHøjlundAndersen

1

另一种选择是flex: auto在要填充剩余空间的标签之间添加另一种样式的标签。

https://jsfiddle.net/tsey5qu4/

HTML:

<div class="parent">
  <div class="left">Left</div>
  <div class="fill-remaining-space"></div>
  <div class="right">Right</div>
</div>

CSS:

.fill-remaining-space {
  flex: auto;
}

这等效于flex:1 1 auto,它吸收主轴上多余的空间。


0

有不同的方法,但最简单的方法是使用中间的空格,请参阅最后的示例

#container {    
    border: solid 1px #000;
    display: flex;    
    flex-direction: row;
    justify-content: space-between;
    padding: 10px;
    height: 50px;
}

.item {
    width: 20%;
    border: solid 1px #000;
    text-align: center;
}

看例子

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.