具有左右容器的 Flex 框响应式布局

Posted

技术标签:

【中文标题】具有左右容器的 Flex 框响应式布局【英文标题】:Flex box Responsive Layout with Left and Right Container 【发布时间】:2022-01-19 05:33:25 【问题描述】:

我在移动设备中遇到了 flexbox 布局问题。台式机看起来不错 在移动视图中,我想如下所示显示

    首先应该显示“概览”框 第二个应该显示“付款”框 第三个应该显示“活动”框

.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>

【问题讨论】:

对于桌面视图我在我的问题中发布的内容我想要相同的视图。对于移动视图,我希望显示如下水平概览 => 付款 => 帐户活动 试试flex-wrap: wrap 并给这3个宽度 能否举个例子? 【参考方案1】:

您可以使用以下方法。这里的主要内容是在.left-container 上使用display: contents; 来“中和”它,以便所有三个元素都可以“在一个级别”用作弹性子元素,并根据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

【讨论】:

非常感谢您的回复。此解决方案适用于移动设备。我学到了一些新东西。

以上是关于具有左右容器的 Flex 框响应式布局的主要内容,如果未能解决你的问题,请参考以下文章

Flex 布局和响应式设计面板

「布局」静态布局、自适应布局、流式布局、响应式布局、弹性布局简析

前端CSS3弹性布局媒体查询实现响应式布局和自适应布局

CSS3--Flex弹性盒子布局: 实例篇-输入框的布局 & 悬挂式布局

静态布局自适应布局流式布局响应式布局弹性布局简析

前端面试题系列之-CSS及页面布局篇