html - flex 容器的高度意外改变

标签 html css flexbox

我正在创建一个元素列表,并使用带有方向行的 flexbox 将它们均匀地间隔开,每行 4 个。我还需要一个带有 flex 方向列的周围容器,以便在其下方包含更多元素。问题是,当我使用 flex-basis 属性时,有时会看到内部 flex 框的高度发生变化。

我尝试了 4 种不同的选择。以下是它们的描述以及它们的行为是否正确:

  • 具有 2 个选项的 Flex Basis(行为不正确)
  • 具有 3 个选项的 Flex Basis(行为不正确)
  • 具有 4 个选项的 Flex Basis(行为正确)
  • 没有 flex 基础,只有一个最小宽度(行为正确)

这是我的 flexbox 中包含的 div 的 CSS(每行 4 个)。本质上,.box2 工作正常,而 .box1 行为异常。 这里还有一个代码笔来说明这个问题: https://codepen.io/anon/pen/zVWMqb

.container {
  display: flex;
  flex-direction: column;
  flex-wrap: wrap;
}

.boxes {
  display: flex;
  flex-wrap: wrap;
}

.box1 {
  flex-basis: 25%;
  min-width: 25%;
}

.box2 {
  min-width: 25%;
}
<h3>Flex basis with 2 options</h3>
<div class='container'>
  <div class='boxes'>
    <div class='box1'>Option 1</div>
    <div class='box1'>Option 2</div>
  </div>
  text below
</div>
<br/>
<h3>Flex basis with 3 options</h3>
<div class='container'>
  <div class='boxes'>
    <div class='box1'>Option 1</div>
    <div class='box1'>Option 2</div>
    <div class='box1'>Option 3</div>
  </div>
  text below
</div>
<br/>
<h3>Flex basis with 4 options</h3>
<div class='container'>
  <div class='boxes'>
    <div class='box1'>Option 1</div>
    <div class='box1'>Option 2</div>
    <div class='box1'>Option 3</div>
    <div class='box1'>Option 4</div>
  </div>
  text below
</div>
<br/>
<h3>Flex basis with 5 options</h3>
<div class='container'>
  <div class='boxes'>
    <div class='box1'>Option 1</div>
    <div class='box1'>Option 2</div>
    <div class='box1'>Option 3</div>
    <div class='box1'>Option 4</div>
    <div class='box1'>Option 5</div>
  </div>
  text below
</div>
<br/>
<h3>Without flex basis</h3>
<div class='container'>
  <div class='boxes'>
    <div class='box2'>Option 1</div>
    <div class='box2'>Option 2</div>
  </div>
  text below
</div>

我希望选项列表下方没有空格,但是,在某些情况下,如代码笔中所示。我不希望文本占用比行高更多的空间,所以我很困惑在某些情况下额外的空间是从哪里来的,而在其他情况下则不是。

最佳答案

看起来您遇到了另一个在 flexbox 中包装列的错误。

如果从 .container 中删除 flex-wrap: wrap,布局将按预期工作。看来您无论如何都不需要这条规则。

另请注意,该错误在 Chrome 和 Firefox 中处于事件状态。但是您的原始代码在 Edge 中运行良好。

使用 column wrap 的 Flex 布局有很多错误。它可能是当今 flexbox 中 bug 最多的地方。这里还有两个例子:

.container {
  display: flex;
  flex-direction: column;
  /* flex-wrap: wrap; */
}

.boxes {
  display: flex;
  flex-wrap: wrap;
}

.box1 {
  flex-basis: 25%;
  min-width: 25%;
}

.box2 {
  min-width: 25%;
}
<h3>Flex basis with 2 options</h3>
<div class='container'>
  <div class='boxes'>
    <div class='box1'>Option 1</div>
    <div class='box1'>Option 2</div>
  </div>
  text below
</div>
<br/>
<h3>Flex basis with 3 options</h3>
<div class='container'>
  <div class='boxes'>
    <div class='box1'>Option 1</div>
    <div class='box1'>Option 2</div>
    <div class='box1'>Option 3</div>
  </div>
  text below
</div>
<br/>
<h3>Flex basis with 4 options</h3>
<div class='container'>
  <div class='boxes'>
    <div class='box1'>Option 1</div>
    <div class='box1'>Option 2</div>
    <div class='box1'>Option 3</div>
    <div class='box1'>Option 4</div>
  </div>
  text below
</div>
<br/>
<h3>Without flex basis</h3>
<div class='container'>
  <div class='boxes'>
    <div class='box2'>Option 1</div>
    <div class='box2'>Option 2</div>
  </div>
  text below
</div>

关于html - flex 容器的高度意外改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56845355/

相关文章:

javascript - 将内联样式添加到元素后,我如何知道何时可以更改它以使过渡起作用?

javascript - GetBoundingClientRect 但相对于整个文档

html - 删除溢出时导航栏背景不工作 : auto; from my css

css - Rmarkdown : Different formats for code and output with . CSS

css - Bootstrap 按钮和链接的样式冲突

html - 无法让 3 个 DIV 在容器内彼此相邻

html - 如何确保 flexbox 小于周围的元素

php - jQuery Ajax : pdf response

vue.js - Vuetify 网格布局 - 如何填充网格中元素的高度

html - 使 flexbox 中的 div 在悬停时增长