因此,我在尝试在移动设备上交换 div 1 和 div 2 时遇到了问题。
移动顺序应为 div 1、2 和 3 按该顺序堆叠。
然后在 768px 以上,需要按照以下顺序将 div 2 放在左侧,设置为 30% 宽度。然后在右侧,需要堆叠 div 1 和 div 3,以占据右侧的剩余部分。
不确定我该怎么做。我试过不用包装器,但没能成功,这是我能做到的最接近的了。
有人能帮帮我吗?
.container {
display: flex;
flex-direction: column;
gap: 10px;
}
@media (min-width: 768px) {
.container {
flex-direction: row;
}
.specs {
flex: 0 0 30%;
order: 1;
}
.content-buttons {
flex: 0 0 70%;
display: flex;
flex-direction: column;
gap: 10px;
order: 2;
}
.content {
flex: 1;
order: 1;
}
.buttons {
flex: 1;
order: 2;
}
}
/* Borders for visualization */
.content {border: 1px solid red;}
.specs {border: 1px solid green;}
.buttons {border: 1px solid blue;}
<div class="container">
<div class="specs">2</div>
<div class="content-buttons">
<div class="content">1</div>
<div class="buttons">3</div>
</div>
</div>
桌面视图截图
移动视图截图
现场演示-Js-Fiddle
使用网格布局系统,可以通过在 html 本身中对
spec
、content
、button
div 进行排序来解决此问题。我已删除 divcontent-buttons
,并使 html 保持非常简单,如下所示。解决方案桌面视图:通过指定布局来保持 div 的顺序,如 - 2、1、3,
grid-template-columns: repeat(2, 1fr);
这将只占用一行中的 2 列,然后通过让grid-row: 1/-1;
2 个 div 在垂直方向上占用足够的空间,并将第 3 个 div 移到第 1 个 div 下方。请参阅桌面视图屏幕截图。为第二个 div 在一行中留出足够的垂直空间。
移动视图的解决方案:使用将使 div 的顺序为 - 1,2,3 一个接一个。现在可以使用 将类
grid-template-columns: 1fr
的顺序保持在第二个,对于内容类,使div 保持顺序 1。specs
grid-row: 2;
grid-row: 1
content
下面是使用网格的整体解决方案。请确保使用 js-fiddle 中的演示。运行此处的代码片段有时不会显示布局,请在完整页面中查看。
下面的示例是一个没有在
.content
和周围添加额外包装器的解决方案.buttons
。注意:的高度.content
完全由其内容决定,布局不依赖于它(无论是在桌面还是移动设备上)。OP与本例的相关区别(不多):
设置 flex-items 的宽度,保持 flex 属性为默认值(
flex
无需设置)。当处于桌面宽度时,设置
flex-wrap
为wrap
以便.buttons
可以占据第二行。通过分配来调整
.buttons
水平对齐,margin-left: auto
使其向右移动。示例中已注释详细信息。在Full page模式下查看并调整窗口大小,即可看到布局恢复为移动版(最大宽度:768px)。