将最后一个弹性项目放在容器的末尾

Geo*_*uer 65 css css3 flexbox

此问题涉及具有完整css3支持的浏览器,包括flexbox.

我有一个Flex容器,里面有一些物品.他们都有理由灵活启动,但我希望最后一个 .end项目被证明是flex-end.有没有一个很好的方法来做到这一点,而无需修改HTML,也没有求助于绝对定位?

.container {
  display: flex;
  flex-direction: column;
  outline: 1px solid green;
  min-height: 400px;
  width: 100px;
  justify-content: flex-start;
}
p {
  height: 50px;
  background-color: blue;
  margin: 5px;
}
Run Code Online (Sandbox Code Playgroud)
<div class="container">
  <p></p>
  <p></p>
  <p></p>
  <p class="end"></p>
</div>
Run Code Online (Sandbox Code Playgroud)

Jos*_*ier 125

灵活的盒子布局模块 - 8.1.与自动边距对齐

弹性项目的自动边距效果与块流程中的自动边距非常相似:

  • 在计算柔性基础和弹性长度期间,自动边距被视为0.

  • 在通过justify-content和进行对齐之前align-self,任何正的自由空间都会分配到该维度中的自动边距.

因此,您可以使用它margin-top: auto来分配其他元素和最后一个元素之间的空间.这会将元素定位在底部.

.end {
  margin-top: auto;
}
Run Code Online (Sandbox Code Playgroud)

您还可以避免使用类并使用:last-of-type/ last-childpseudo类.

p:last-of-type {
  margin-top: auto;
}
Run Code Online (Sandbox Code Playgroud)

.container {
  display: flex;
  flex-direction: column;
  outline: 1px solid green;
  min-height: 400px;
  width: 100px;
  justify-content: flex-start;
}
p {
  height: 50px;
  background-color: blue;
  margin: 5px;
}
.end {
  margin-top: auto;
}
Run Code Online (Sandbox Code Playgroud)
<div class="container">
  <p></p>
  <p></p>
  <p></p>
  <p class="end"></p>
</div>
Run Code Online (Sandbox Code Playgroud)

  • 有趣.为什么这样做? (8认同)
  • 啊完美,不敢相信我错过了!尤其令人尴尬的是,因为我“完全”知道使用边距自动到垂直中心技巧并一直使用它 (4认同)
  • @j08691 我没有关于*为什么*它有效的正式解释,但它类似于如何使用 `margin: 0 auto` 进行水平居中。Flexbox 项目尊重边距,并且我相信“margin: auto”本质上会将项目定位在同级项之间尽可能多的空间。请参阅:http://www.w3.org/TR/css-flexbox-1/#auto-margins (2认同)
  • @ jo8691如果我没弄错,flex项上的`margin:auto`告诉它在那个方向上创建尽可能多的空间. (2认同)

Dav*_*han 53

此Flexbox Principal也可以水平工作

在计算柔性基础和灵活长度期间,自动边距被视为0.
在通过justify-content和align-self进行对齐之前,任何正自由空间都会分配到该维度中的自动边距.

为Last Item设置自动左边距将完成工作.

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

代码示例:

.container {
  display: flex;
  width: 400px;
  outline: 1px solid black;
}

p {
  height: 50px;
  width: 50px;
  margin: 5px;
  background-color: blue;
}

.last-item {
  margin-left: auto;
}
Run Code Online (Sandbox Code Playgroud)
<div class="container">
  <p></p>
  <p></p>
  <p></p>
  <p class="last-item"></p>
</div>
Run Code Online (Sandbox Code Playgroud)

Codepen代码段

这对于桌面页脚非常有用.

正如恩瓦托在这里用公司标志做的那样.

Codepen代码段

  • 如果我需要所有项目都位于中间而最后一项位于右侧怎么办? (7认同)
  • 不确定为什么这实际上有效,但它帮助我完成了一个项目. (3认同)