【问题标题】:Rearrange layout with flex使用 flex 重新排列布局
【发布时间】:2021-04-22 09:55:39
【问题描述】:

我有以下 html。

<div id="wrapper">
    <div id="a"></div>
    <div id="b"></div>
    <div id="c"></div>
</div>

使用 css flex,我在桌面模式下有以下布局:

++++++++++++++++++++++++++++++++++++++++++
+            +             +             +
+     A      +      B      +      C      +
+            +             +             +
++++++++++++++++++++++++++++++++++++++++++

我想重新排列 div,使其在移动模式下看起来像:

++++++++++++++++++++++++++++++++++++++++++
+                                        +
+                   B                    +
+                                        +
++++++++++++++++++++++++++++++++++++++++++
+                   +                    +
+        A          +          C         +
+                   +                    +
++++++++++++++++++++++++++++++++++++++++++

flex 技巧可以吗?

【问题讨论】:

  • 这可能会有所帮助 w3schools.com/cssref/css3_pr_order.asp CSS 有一个属性 order,您可以使用它指定灵活项目的顺序。
  • 谢谢!我已经按顺序试过了。但我需要的另一件事是@Minal Chauhan 给出的:flex 属性。

标签: css flexbox responsive-design


【解决方案1】:

是的,你当然可以使用 flexbox 来做这个布局。

下面的 CSS 可能会对你有所帮助。

#wrapper{
  display:-webkit-box;
  display:-ms-flexbox;
  display:flex;
  -ms-flex-wrap:wrap;
  flex-wrap:wrap;
}
#wrapper>div{
  border:1px solid #ccc;
  padding:15px;
  -webkit-box-flex:1;
  -ms-flex:1;flex:1;
  text-align:center;
}

@media(max-width:767px) {
  #wrapper>#b{
    min-width:100%;
    -webkit-box-ordinal-group:0;
    -ms-flex-order:-1;
    order:-1;
  }
}
<div id="wrapper">
    <div id="a">a</div>
    <div id="b">b</div>
    <div id="c">c</div>
</div>

【讨论】:

    【解决方案2】:

    您可以使用flex order 实现此目的

    #wrapper {
      display: flex;
      align-items: center;  
      flex-wrap: wrap;
    }
    
    #a, #b,#c{
      flex: 0 0 33.33%;
      text-align:center;
      min-height: 100px;
    }
    #a{
      background: red;
    }
    #c {
      background: blue;
    }
    
    @media (max-width:767px){
      #a {
        order: 2;
        flex: 0 0 50%;
      }
      #b {
        order: 1;
        flex: 0 0 100%;
      }
      #c {
        order: 3;
        flex: 0 0 50%;
      }
    }
    <div id="wrapper">
        <div id="a">a</div>
        <div id="b">b</div>
        <div id="c">c</div>
    </div>

    【讨论】:

    • 有效!除了order,另一个键是flex-wrapflex。谢谢!
    • @hyperbola 如果您想摆脱多余的 CSS,那么您绝对可以使用下面的第二个答案。
    猜你喜欢
    • 2011-05-10
    • 2012-08-09
    • 1970-01-01
    • 1970-01-01
    • 2021-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多