CSS将一个项目与flexbox对齐

Jen*_*ell 170 css alignment flexbox

https://jsfiddle.net/vhem8scs/

是否可以将两个项目左对齐,一个项目与flexbox对齐?该链接更清楚地显示了它.最后一个例子是我想要实现的.

在flexbox中,我有一个代码块.使用float我有四个代码块.这是我更喜欢flexbox的一个原因.

HTML

<div class="wrap">
  <div>One</div>
  <div>Two</div>
  <div>Three</div>
</div>

<!-- DESIRED RESULT -->

<div class="result">
  <div>One</div>
  <div>Two</div>
  <div>Three</div>
</div>
Run Code Online (Sandbox Code Playgroud)

CSS

.wrap {
  display: flex;
  background: #ccc;
  width: 100%;
  justify-content: space-between;
}

.result {
  background: #ccc;
  margin-top: 20px;
}

.result:after {
  content: '';
  display: table;
  clear: both;
}

.result div {
  float: left;
}
.result div:last-child {
  float: right;
}
Run Code Online (Sandbox Code Playgroud)

Dan*_*eld 439

要将一个弹性子项与右侧对齐,请将其设置为margin-left: auto;

flex规范:

在主轴上使用自动边距是将弹性项目分成不同的"组".以下示例显示如何使用它来重现常见的UI模式 - 单个操作栏,其中一些在左侧对齐,而另一些在右侧对齐.

.wrap div:last-child {
  margin-left: auto;
}
Run Code Online (Sandbox Code Playgroud)

更新了小提琴

.wrap {
  display: flex;
  background: #ccc;
  width: 100%;
  justify-content: space-between;
}
.wrap div:last-child {
  margin-left: auto;
}
.result {
  background: #ccc;
  margin-top: 20px;
}
.result:after {
  content: '';
  display: table;
  clear: both;
}
.result div {
  float: left;
}
.result div:last-child {
  float: right;
}
Run Code Online (Sandbox Code Playgroud)
<div class="wrap">
  <div>One</div>
  <div>Two</div>
  <div>Three</div>
</div>

<!-- DESIRED RESULT -->
<div class="result">
  <div>One</div>
  <div>Two</div>
  <div>Three</div>
</div>
Run Code Online (Sandbox Code Playgroud)

注意:

您可以通过在中间弹性项目(或简写flex:1)上设置flex-grow:1来实现类似的效果,这会将最后一个项目一直推到右侧.(演示)

然而,明显的区别是中间项目变得比它可能需要的更大.为flex项添加边框以查看差异.

演示

.wrap {
  display: flex;
  background: #ccc;
  width: 100%;
  justify-content: space-between;
}
.wrap div {
  border: 3px solid tomato;
}
.margin div:last-child {
  margin-left: auto;
}
.grow div:nth-child(2) {
  flex: 1;
}
.result {
  background: #ccc;
  margin-top: 20px;
}
.result:after {
  content: '';
  display: table;
  clear: both;
}
.result div {
  float: left;
}
.result div:last-child {
  float: right;
}
Run Code Online (Sandbox Code Playgroud)
<div class="wrap margin">
  <div>One</div>
  <div>Two</div>
  <div>Three</div>
</div>

<div class="wrap grow">
  <div>One</div>
  <div>Two</div>
  <div>Three</div>
</div>

<!-- DESIRED RESULT -->
<div class="result">
  <div>One</div>
  <div>Two</div>
  <div>Three</div>
</div>
Run Code Online (Sandbox Code Playgroud)

  • 不是所有的英雄穿着斗篷. (10认同)
  • @JensTörnell,`auto` margin使用容器中的空白区域来分隔flex项.`flex-grow` /`flex`属性获取该空白空间,将其提供给flex项,该项扩展了该数量.正如Danield所提到的,后一种方法使得flex项目TWO更大,您可能不需要. (4认同)
  • 很好的答案.因此,保证金不会占用额外空间,而flex:1会占用空间.凉! (2认同)
  • @ user1063287将多个元素对齐到右边只需在第一个元素上应用margin-left:auto,需要右对齐.所以,假设您希望最后4个元素与右侧对齐,您可以这样做:`div:nth-​​last-child(4){margin-left:auto}`https://codepen.io/danield770/pen/ERyoar (2认同)

小智 30

对于简洁的纯弹性框选项,请将左对齐的项目和右对齐的项目分组:

<div class="wrap">
  <div>
    <span>One</span>
    <span>Two</span>
  </div>
  <div>Three</div>
</div>
Run Code Online (Sandbox Code Playgroud)

并使用space-between:

.wrap {
  display: flex;
  background: #ccc;
  justify-content: space-between;
}
Run Code Online (Sandbox Code Playgroud)

这样,您可以将多个项目组合到右侧(或仅一个).

https://jsfiddle.net/c9mkewwv/3/


小智 9

将某些元素 (headerElement) 居中对齐,将最后一个元素 (headerEnd) 对齐。

.headerElement {
    margin-right: 5%;
    margin-left: 5%;
}
.headerEnd{
    margin-left: auto;
}
Run Code Online (Sandbox Code Playgroud)


小智 9

你可以做任何一个

margin-left: auto;
Run Code Online (Sandbox Code Playgroud)

或者

position absolute;
right: 0px;
Run Code Online (Sandbox Code Playgroud)

这会将项目移动到右侧。您给出的 px 值会将项目从右推到左。

  • 你好@raoul。感谢您的回答,但问题是关于 Flexbox 的。请仔细阅读问题标题。 (3认同)