【问题标题】:Why doesn't flexbox shrink to fit after wrapping elements? [duplicate]为什么 flexbox 在包装元素后不收缩以适应? [复制]
【发布时间】:2020-04-20 03:26:20
【问题描述】:

我希望有一个最大宽度的 flex-box 超出该宽度,但它也适合 flexbox 内任何给定“行”的最大大小。

我现在面临的问题是,任何超出最大宽度然后换行的元素都会导致 flexbox 仍然占据最大宽度。

这是一个演示问题的代码笔链接:

https://codepen.io/heroes-coding/pen/rNaGYmo

这里是顶部容器的 html/css:

<div class="holder">
  <div class="flexbox">
    <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>
</div>
body {
  background: black;
}

.holder {
  width: 650px;
  background: gray;
  margin-top: 50px;
}

.flexbox {
  display: flex;
  background: blue;
  max-width: 500px;
  width: fit-content;
  flex-wrap: wrap;
}

.item {
  width: 100px;
  height: 50px;
  background: red;
  border-bottom: 1px dotted white;
  border-top: 1px dotted white;
  border-right: 1px dotted white;
}
.item.wide {
  width: 200px;
}

我希望 flexbox 仍以 500 像素换行,但在换行后收缩以适应内容。

【问题讨论】:

  • 这不是另一个问题的重复。这个问题是关于当 flex 容器具有多行和最大宽度时 flex 容器的固有宽度。另一个问题是关于 flex items wrapping 的内容,而不是关于多行或内在宽度或最大宽度。
  • 问题不重要。这就是答案。请注意重复通知的内容:“此问题已在此处找到答案:”
  • @Michael_B,您认为该问题中的哪个答案适用于该问题?我不认为有任何作用。
  • 来自您的问题:“我现在面临的问题是,任何超出最大宽度然后换行的元素都会导致 flexbox 仍占据最大宽度。” 请参考我回答的第一行。
  • 此外,这个问题是关于当指定宽度是固有宽度时如何计算 flex 容器的使用宽度以及指定的 max-width 属性(显然!)如何影响它。您的回答没有解决这些问题。

标签: html css flexbox


【解决方案1】:

仅使用 CSS 无法完全实现您的要求。你可以做的是设置每行要显示的最大项目数,然后计算传递给 flexbox 容器的最大宽度:

:root{
   --item-width: 100px;
   --max-per-row: 4;
   --max-width: calc( var(--max-per-row) * ( var(--item-width) + 1px)  );
}

使用此代码,您可以将容器的宽度设置为您想要的任何值,例如 500 像素,然后确保最大宽度为 n * flexbox 项目的宽度(边框加上 1),其中 n 是您想要的项目数每行。只需确保 flexbox 宽度大于最大宽度即可。

:root{
   --item-width: 100px;
   --max-per-row: 4;
   --max-width: calc( var(--max-per-row) * ( var(--item-width) + 1px)  );
}

body {
  background: black;
}

.holder {
  width: 650px;
  background: gray;
  margin-top: 50px;
}

.flexbox {
  display: flex;
  background: blue;
  width: 500px;
  max-width: var(--max-width);
  flex-wrap: wrap;
}

.item {
  width: var(--item-width);
  height: 50px;
  background: red;
  border: 1px dotted white;
  border-left: none;
}
.item.wide {
  width: 200px;
}
<div class="holder">
  <div class="flexbox">
    <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>
</div>

【讨论】:

  • 我知道示例案例看起来并非如此,但在我的实际使用中,这些项目没有固定宽度。否则,将最大宽度设置为每“行”的项目数乘以项目宽度将是微不足道的,不需要单独的公式来这样做
猜你喜欢
  • 2016-08-27
  • 1970-01-01
  • 2021-11-18
  • 1970-01-01
相关资源
最近更新 更多