【问题标题】:"align-items: flex-start" aligns children along parent's available space [duplicate]“align-items:flex-start”沿父级可用空间对齐子级[重复]
【发布时间】:2017-11-11 12:26:31
【问题描述】:

我正在尝试将每个孩子一个接一个地(垂直)对齐。显然align-items: flex-start 并没有完全做到这一点,因为每个孩子之间有一些自动间距。

下面是我得到的结果的 sn-p。孩子们沿着他们父母的可用空间排列自己,这不是我想要实现的。我想要的是每个孩子在其前一个兄弟姐妹之后直接对齐(垂直,如在 sn-p 中)。

提前致谢!

编辑:flex-flow: column wrapalign-content: flex-start 都成功了。但是,我忘记将 align-self: flex-end 添加到最后一个孩子,当应用上述两种解决方案中的任何一种时,这都不起作用。

* {
  box-sizing: border-box;
}

#container {
  position: fixed;
  top: 0; right: 0; bottom: 0; left: 0;
  display: flex;
  align-items: flex-start;
  flex-flow: row wrap;
}
#container > div {
  width: 100%;
  margin: 10px;
  border: 2px solid #ff0000;
}
#container > div:nth-child(1) { height: 5%; }
#container > div:nth-child(2) { height: 10%; }
#container > div:nth-child(3) { height: 20%; align-self: flex-end; }
<div id="container">
  <div></div>
  <div></div>
  <div></div>
</div>

【问题讨论】:

  • 您将 div 设置为 100% 宽度,因此它们当然不会一个接一个地排成一行。此外,您需要行,align-items 用于垂直对齐。 justify-contentflex-start 所需要的,但这已经是默认值,不需要定义。阅读css-tricks.com/snippets/css/a-guide-to-flexbox它有你需要的一切
  • @Huangism - 也许我不够清楚,我会在帖子中更具体。我确实想像示例中那样垂直对齐 div。只是没有每个 div 之间的自动间距。 justify-content 不是我要找的。​​span>
  • 你肯定不清楚。 flex-flow: row wrap; 你有行而不是列

标签: css flexbox


【解决方案1】:

您需要为流设置列

#container {
  position: fixed;
  top: 0; right: 0; bottom: 0; left: 0;
  display: flex;
  align-items: flex-start;
  flex-flow: column wrap;
}
#container > div:nth-child(3) { height: 20%; margin-top: auto; }

更新:

将边距顶部自动添加到最后一个孩子

https://jsfiddle.net/qghsgze5/2/

【讨论】:

  • 确实有效。但是,现在我无法将 align-self: flex-end 设置为最后一个 div :(
【解决方案2】:

您需要在父元素上设置align-content: flex-start,因为初始值为stretch

拉伸

如果项目沿交叉轴的组合大小小于对齐容器的大小,则任何自动调整大小的项目的大小都会平均增加(不成比例),同时仍然遵守 max-height/ 施加的约束最大宽度(或等效功能),以便组合大小沿交叉轴精确填充对齐容器。

* {
  box-sizing: border-box;
}
#container {
  position: fixed;
  top: 0; right: 0; bottom: 0; left: 0;
  display: flex;
  align-items: flex-start;
  flex-flow: row wrap;
  align-content: flex-start;
}
#container > div {
  width: 100%;
  margin: 10px;
  border: 2px solid #ff0000;
}
#container > div:nth-child(1) { height: 5%; }
#container > div:nth-child(2) { height: 10%; }
#container > div:nth-child(3) { height: 20%; }
<div id="container">
  <div></div>
  <div></div>
  <div></div>
</div>

更新:另一种解决方案是设置flex-direction: column,然后您可以使用margin 来定位特定的弹性项目。

* {
  box-sizing: border-box;
}
#container {
  position: fixed;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  display: flex;
  flex-direction: column;
}
#container > div {
  width: calc(100% - 20px);
  margin: 10px;
  border: 2px solid #ff0000;
}
#container > div:nth-child(1) {
  height: 5%;
}
#container > div:nth-child(2) {
  height: 10%;
}
#container > div:nth-child(3) {
  height: 20%;
  margin-top: auto;
}
<div id="container">
  <div></div>
  <div></div>
  <div></div>
</div>

【讨论】:

  • 与@Huangism 相同 - 这也有效。但是,我无法将 align-self: flex-end 设置为最后一个 div,这是我未包含在问题中的步骤:(
  • 您没有在容器上定义高度。
  • 我确实通过topbottom 属性定义了高度。无论如何,添加 height: 100% 并不能解决问题。
  • @Nordling Art 你说得对,我用另一个解决方案更新了我的答案。
  • 现在可以了!谢谢! :D
猜你喜欢
  • 2019-07-12
  • 1970-01-01
  • 1970-01-01
  • 2017-04-24
  • 2017-02-18
  • 1970-01-01
  • 1970-01-01
  • 2016-03-20
  • 1970-01-01
相关资源
最近更新 更多