我正在使用CSS媒体查询来创建响应式布局。
在我当前的HTML布局中,我使用flexbox来对齐div的行:
<div id="page">
<div id="div-1">DIV 1</div>
<div id="div-2">DIV 2</div>
<div id="div-3">DIV 3</div>
<div id="div-4">DIV 4</div>
</div>和CSS:
#page {
display: flex;
flex-direction: column;
align-items: center;
}
[id^="div-"] {
border: 1px solid #ccc;
margin-bottom: 10px;
width: 50vw;
}
#div-1 {
height: 50px;
}
#div-2 {
height: 70px;
}
#div-3 {
height: 150px;
}
#div-4 {
height: 100px;
}这是供您修补的Jsfiddle。
这是我正在寻找一个较小的视窗,但想在下一个媒体查询断点周围交换东西,有2个中间div移动到右侧的单独列,如下所示:

我该如何做到这一点?对我来说,如何将最后几行div转移到另一列是很明显的,但不确定如何处理中间的行……
有没有办法通过使用flexbox或grid来实现呢?
发布于 2021-04-19 01:29:07
另一种可能的解决方案是将order-property与Flexbox结合使用(缺点:您需要一点额外的html并设置#page容器的高度;优点:灵活的div高度和间隙大小):
#page {
display: flex;
flex-direction: column;
align-items: center;
}
[id^="div-"] {
border: 1px solid #ccc;
margin-bottom: 10px;
width: 50vw;
}
#div-1 {
height: 50px;
background: lightgreen;
}
#div-2 {
height: 70px;
background: lightyellow;
}
#div-3 {
height: 150px;
background: lightcoral;
}
#div-4 {
height: 100px;
background: lightblue;
}
@media (max-width: 1000px) {
#page {
flex-wrap: wrap;
height: 300px;
}
#small-screen-spacer {
order: 3;
align-self: stretch;
flex: 1 0 100%;
margin-right: 10px;
}
#div-1 {
order: 1;
}
#div-2 {
order: 4;
}
#div-3 {
order: 5;
}
#div-4 {
order: 2;
}
}<div id="page">
<div id="div-1">DIV 1</div>
<div id="div-2">DIV 2</div>
<div id="div-3">DIV 3</div>
<div id="div-4">DIV 4</div>
<div id="small-screen-spacer"> </div>
</div>
#small-screen-spacer将填充整个可用垂直空间,以便将间隔符(由order属性定义)之后的所有元素移动到第二列。此外,您还可以通过将间隔上的右边界设置为所需的值来设置两列之间的所需间距。
https://stackoverflow.com/questions/67150018
复制相似问题