CSS Flexbox适用于桌面和移动设备上的2列和3列(包装)

Mik*_*eng 20 css flexbox

我真的很难搞清楚这个CSS flexbox解决方案.基本上有2个问题,一个有2列,另一个有3列布局.

2栏:我认为这可能非常简单 桌面上的2列 手机上的2列

3栏:这可能有点先进 桌面上的3列 手机上的3列

容器类是,好了,.container和孩子们只是.left,.right.middle.不确定它是否相关,但宽度.container是视口的100%.我应该补充说,由于我无法控制的原因,使用Bootstrap是不可能的.

非常感谢提前!

dis*_*for 33

以下是您对三列进行操作的方法.我只是补充说,因为它有点棘手:

HTML

<div class="container">
    <div class="left"></div>
    <div class="middle"></div>
    <div class="right"></div>
</div>
Run Code Online (Sandbox Code Playgroud)

CSS

.container {
    display:flex;
    flex-wrap:wrap;
    flex-direction:row;
    justify-content:flex-start;
    align-items:stretch;
}

.left {order:1; background:red; flex-basis:100%; height:300px}
.middle {order:3; background: green;flex-basis:100%; height:300px;}
.right {order:2; background:yellow;flex-basis:100%; height:300px;}

@media screen and (min-width:600px) {
   .container {
       flex-wrap:nowrap;
   } 

    .left {
        flex-basis:200px;
        order:1;
    }
    .middle {
        flex-basis:1;
        order:2;
    }
    .right {
        flex-basis:200px;
        order:3;
    }
}
Run Code Online (Sandbox Code Playgroud)

小提琴http://jsfiddle.net/2touox81/

如您所见,您可以设置弹性项目的列顺序.

希望这可以帮助.


Ori*_*iol 15

我将假设桌面意味着屏幕宽度超过600px,移动更少.

2列布局非常简单:

body {
  display: flex;   /* Magic begins */
  flex-wrap: wrap; /* Allow multiple lines */
}
#left, #right {
  flex: 1 300px;   /* Initial width of 600px/2
                      Grow to fill remaining space */
  min-width: 0;    /* No minimal width */
}
Run Code Online (Sandbox Code Playgroud)

body {
  display: flex;
  flex-wrap: wrap;
  text-align: center;
  font-weight: bold;
}
#left, #right {
  flex: 1 300px;
  min-width: 0;
  background: #f55;
  padding: 15px 0;
}
#right {
  background: #57f;
}
Run Code Online (Sandbox Code Playgroud)
<div id="left">Left</div>
<div id="right">Right</div>
Run Code Online (Sandbox Code Playgroud)

3列只是有点复杂:

body {
  display: flex;            /* Magic begins */
}
#left, #right, #middle {
  min-width: 0;             /* No minimal width */
}
#left, #right {
  flex-basis: 200px;        /* Initial width */
}
#middle {
  flex: 1;                  /* Take up remaining space */
}
@media screen and (max-width: 600px) { /* Mobile */
  body {
    flex-direction: column; /* Column layout */
  }
  #left, #right {
    flex-basis: auto;       /* Unset previous 200px */
  }
  #middle {
    order: 1;               /* Move to the end */
  }
}
Run Code Online (Sandbox Code Playgroud)

body {
  display: flex;
  text-align: center;
  font-weight: bold;
}
#left, #right, #middle {
  min-width: 0;
  padding: 15px 0;
}
#left, #right {
  flex-basis: 200px;
  background: #f55;
}
#right {
  background: #57f;
}
#middle {
  flex: 1;
  background: #5f6;
}
@media screen and (max-width: 600px) {
  body {
    flex-direction: column;
  }
  #left, #right {
    flex-basis: auto;
  }
  #middle {
    order: 1;
  }
}
Run Code Online (Sandbox Code Playgroud)
<div id="left">Left</div>
<div id="middle">Middle</div>
<div id="right">Right</div>
Run Code Online (Sandbox Code Playgroud)