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)
flexbox 可以检测 flex 项目何时换行吗?
不。
在 CSS 中,一旦浏览器在初始级联上呈现页面,它就不会在元素换行时重排文档。因此,父元素不知道他们的子元素何时换行。
这就是为什么容器在包装后不会收缩以适应其内容的原因。
这就是您需要媒体查询或 JavaScript 的原因。
以下是更多详细信息:
我通过检查元素偏移量是否大于 0 来解决这个问题,因为包裹的项目在下方“弯曲”。这是我的功能:
isHidden(id) {
let el = document.getElementById(id);
return (el.offsetTop > 0)
}
Run Code Online (Sandbox Code Playgroud)