Flex工具包装时是否可以检测到flexbox?

Lex*_*xie 14 html css css3 media-queries flexbox

我希望摆脱媒体查询,只是使用flexbox来解决我的问题,但我不确定这是否可行.随着窗口变小,我希望列缩小,直到它们达到最小宽度.一旦它们击中,中间列将跳下来进行包裹.

我认为我的问题可以归结为这一点 - 当它包装时,它可以检测到弹性盒吗?如果是这样,我可以提示它改变严格的CSS包装项目的顺序吗?

这里是一个codepen的我"米尝试使用媒体查询来实现.

.wrapper {
  display: flex;
  justify-content: center;
  margin: 5px;
  flex-wrap: wrap;
}

.red {
  background-color: red;
  height: 240px;
  margin: 5px;
  width: 500px;
  order: 0;
}

.yellow {
  background-color: yellow;
  margin: 5px;
  height: 240px;
  min-width: 240px;
  max-width: 400px;
  flex: 1;
  order: 1;
}

.blue {
  background-color: blue;
  height: 240px;
  margin: 5px;
  min-width: 350px;
  max-width: 400px;
  flex: 1;
  order: 2;
}

@media (max-width:1130px) {
  .yellow {
    order: 4;
  }
}
Run Code Online (Sandbox Code Playgroud)
<div class="wrapper">
  <div class="red"></div>
  <div class="yellow"></div>
  <div class="blue"></div>
</div>
Run Code Online (Sandbox Code Playgroud)

Mic*_*l_B 9

flexbox 可以检测 flex 项目何时换行吗?

不。

在 CSS 中,一旦浏览器在初始级联上呈现页面,它就不会在元素换行时重排文档。因此,父元素不知道他们的子元素何时换行。

这就是为什么容器在包装后不会收缩以适应其内容的原因。

这就是您需要媒体查询或 JavaScript 的原因。

以下是更多详细信息:


Cit*_*zen 7

我通过检查元素偏移量是否大于 0 来解决这个问题,因为包裹的项目在下方“弯曲”。这是我的功能:

isHidden(id) {
    let el = document.getElementById(id);
    return (el.offsetTop > 0)
}
Run Code Online (Sandbox Code Playgroud)