【问题标题】:Evenly distribute items in a row except last row [duplicate]除最后一行外,将项目均匀分布在一行中[重复]
【发布时间】:2018-03-08 16:17:45
【问题描述】:

我想弄清楚是否有办法将最后一行与中心对齐。在下面的 JsFiddle 中,您将看到,当您调整屏幕大小时,div 会调整连续显示的数量以及它们周围的均匀空间。除了最后一行也做同样的事情。问题是最后一行总是一个奇数,因此我希望最后一行保持与前几行相同的间距,从左边开始。

我尝试使用浮动、显示内联块和 flex 来执行此操作,但没有运气。这是我最近的尝试:

.wrapper{
  display: flex;
  justify-content: flex-start;
  flex-wrap: wrap;
}

.item{
  width: 140px;
  height: 50px;
  background-color: blue;
  margin: 10px auto;
}
<div class="wrapper">
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
</div>

https://jsfiddle.net/yme1msj7/3/

编辑:

答案不一定要用 flex。我愿意接受任何关于使这项工作不涉及 javascript 的建议。

【问题讨论】:

标签: html css flexbox


【解决方案1】:

问题是margin: [...] auto。自动左右边距会覆盖您的对齐设置。

.wrapper{
  display: flex;
  justify-content: space-between;
  flex-wrap: wrap;
}

.item{
  width: 140px;
  height: 50px;
  background-color: blue;
  margin: 10px 0;
}
<div class="wrapper">
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
</div>

【讨论】:

  • 为什么 0 有效?
  • 我注意到如果添加第 4 个 div,那么最后一行左侧有 1 个 div,右侧有 1 个 div。两者都应该在左边。我看到的另一个问题是,如果您说只有 2 个 div,它们的间距不均匀,与左右相比,中间留有很大的间隙
  • 这只有在最后一行有 1 个项目时才有效,我相信你实际上已经知道了。无论最后一行有多少项目,欺骗链接都会显示所需的内容。
【解决方案2】:

您可以添加一个“最后一个”选择器并覆盖 auto 属性的 margin 值以避免默认居中仅在最后一个 div 上,保留它以供其他人避免不必要的行为:

.wrapper{
  display: flex;
  justify-content: flex-start;
  flex-wrap: wrap;
}

.item{
  width: 140px;
  height: 50px;
  background-color: blue;
  margin: 10px auto;
}


div:last-of-type {
 margin: 0px 10px;
}
<div class="wrapper">
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
</div>

您可以使用.wrapper:not(:last-child){margin:10 auto;} 避免声明 div.last-of-type 等。有关执行相同操作的更多方法,请参阅 CSS last 伪选择器。

【讨论】:

  • 这不起作用,因为当您调整屏幕大小和下拉框时,它的行为会有所不同。请参阅此处的示例:jsfiddle.net/yme1msj7/30
  • 如果您希望它在调整大小时运行良好,请从边距属性中删除自动值,但我不知道您是否需要此值用于其他用途
  • 或使用响应指标设置边距。例如,0.5rem 而不是使用 10px。但它仅在 div 单独位于最后一行时才有效
猜你喜欢
  • 2014-10-24
  • 1970-01-01
  • 2022-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-26
  • 2018-10-18
相关资源
最近更新 更多