带有左右容器的 Flex box 响应式布局
Flex box Responsive Layout with Left and Right Container
我在移动设备中遇到 flexbox 布局问题。桌面看起来还行
在移动视图中我想显示如下
- 首先它应该显示“概览”框
- 第二个它应该显示“付款”框
- 第三个应该显示“Activity”框
.div1 {
box-sizing:border-box;
border:0.5px solid red;
}
.main-container {
height:100%;
display:flex;
}
.left-container {
flex:1 1 0;
}
.right-container {
flex:1 1 0;
display:flex;
//flex-direction:column;
}
.half-containers {
flex:1;
overflow:auto;
order: 1;
}
.half-containers-activity {
flex:1;
overflow:auto;
order: 0;
}
@include media-breakpoint-down(sm) {
.main-container {
flex-direction: row;
}
}
<div class="div1">
<div class="main-container">
<div class="left-container">
<div class="half-containers">
Overview
</div>
<div class="half-containers-activity">
Activity
</div>
</div>
<div class="right-container">
Payment
</div>
</div>
</div>
您可以使用以下方法。这里最主要的是在 .left-container
上使用 display: contents;
来“中和”它,这样所有三个元素都可以“在一个层次上”用作 flex children,根据 order
参数应用到他们。当然,所有这些都在媒体查询中,以保持桌面版本不变。
.div1 {
box-sizing: border-box;
border: 0.5px solid red;
}
.main-container {
height: 100%;
display: flex;
}
.left-container {
flex: 1 1 0;
}
.right-container {
flex: 1 1 0;
display: flex;
//flex-direction:column;
}
.half-containers {
flex: 1;
overflow: auto;
order: 1;
}
.half-containers-activity {
flex: 1;
overflow: auto;
order: 0;
}
@media screen and (max-width: 700px) {
.main-container {
flex-direction: column;
}
.left-container {
display: contents;
}
.half-containers {
order: 0;
}
.right-container {
order: 1;
}
.half-containers-activity {
order: 2;
}
}
<div class="div1">
<div class="main-container">
<div class="left-container">
<div class="half-containers">
Overview
</div>
<div class="half-containers-activity">
Activity
</div>
</div>
<div class="right-container">
Payment
</div>
</div>
</div>
我应该补充一点 display: contents;
仍然被视为“实验值”,但浏览器支持已经相当不错了:https://caniuse.com/?search=display%3A%20contents
我在移动设备中遇到 flexbox 布局问题。桌面看起来还行 在移动视图中我想显示如下
- 首先它应该显示“概览”框
- 第二个它应该显示“付款”框
- 第三个应该显示“Activity”框
.div1 {
box-sizing:border-box;
border:0.5px solid red;
}
.main-container {
height:100%;
display:flex;
}
.left-container {
flex:1 1 0;
}
.right-container {
flex:1 1 0;
display:flex;
//flex-direction:column;
}
.half-containers {
flex:1;
overflow:auto;
order: 1;
}
.half-containers-activity {
flex:1;
overflow:auto;
order: 0;
}
@include media-breakpoint-down(sm) {
.main-container {
flex-direction: row;
}
}
<div class="div1">
<div class="main-container">
<div class="left-container">
<div class="half-containers">
Overview
</div>
<div class="half-containers-activity">
Activity
</div>
</div>
<div class="right-container">
Payment
</div>
</div>
</div>
您可以使用以下方法。这里最主要的是在 .left-container
上使用 display: contents;
来“中和”它,这样所有三个元素都可以“在一个层次上”用作 flex children,根据 order
参数应用到他们。当然,所有这些都在媒体查询中,以保持桌面版本不变。
.div1 {
box-sizing: border-box;
border: 0.5px solid red;
}
.main-container {
height: 100%;
display: flex;
}
.left-container {
flex: 1 1 0;
}
.right-container {
flex: 1 1 0;
display: flex;
//flex-direction:column;
}
.half-containers {
flex: 1;
overflow: auto;
order: 1;
}
.half-containers-activity {
flex: 1;
overflow: auto;
order: 0;
}
@media screen and (max-width: 700px) {
.main-container {
flex-direction: column;
}
.left-container {
display: contents;
}
.half-containers {
order: 0;
}
.right-container {
order: 1;
}
.half-containers-activity {
order: 2;
}
}
<div class="div1">
<div class="main-container">
<div class="left-container">
<div class="half-containers">
Overview
</div>
<div class="half-containers-activity">
Activity
</div>
</div>
<div class="right-container">
Payment
</div>
</div>
</div>
我应该补充一点 display: contents;
仍然被视为“实验值”,但浏览器支持已经相当不错了:https://caniuse.com/?search=display%3A%20contents