具有多个子项的弹性盒列

Lzh*_*nin 4 html css flexbox

我有一个问题我是否可以做这样的事情:

截屏

使用弹性盒并且包装器内只有三个div(我想制作两列会更容易,一列包装第一个大div,另一列包装其他两个块,但我想尝试按照我的方式来做)之前已经提到过)

小提琴

#row {
  margin: 0 auto;
  width: 610px;
}
#wrapper {
  display: -ms-flexbox;
  display: -webkit-flex;
  display: flex;
  -webkit-flex-direction: row;
  -ms-flex-direction: row;
  flex-direction: row;
  -webkit-flex-wrap: wrap;
  -ms-flex-wrap: wrap;
  flex-wrap: wrap;
  -webkit-justify-content: center;
  -ms-flex-pack: center;
  justify-content: center;
  -webkit-align-content: flex-start;
  -ms-flex-line-pack: start;
  align-content: flex-start;
  -webkit-align-items: flex-start;
  -ms-flex-align: start;
  align-items: flex-start;
}
#x-1,
#x-2,
#x-3 {
  margin: 5px;
  background-color: red;
}
#x-1 {
  height: 250px;
  -webkit-order: 0;
  -ms-flex-order: 0;
  order: 0;
  -webkit-flex: 1 1 300px;
  -ms-flex: 1 1 300px;
  flex: 1 1 300px;
  -webkit-align-self: stretch;
  -ms-flex-item-align: stretch;
  align-self: stretch;
}
#x-2 {
  -webkit-order: 0;
  -ms-flex-order: 0;
  order: 0;
  -webkit-flex: 1 1 200px;
  -ms-flex: 1 1 200px;
  flex: 1 1 200px;
  -webkit-align-self: auto;
  -ms-flex-item-align: auto;
  align-self: auto;
}
#x-3 {
  -webkit-order: 0;
  -ms-flex-order: 0;
  order: 0;
  -webkit-flex: 1 1 200px;
  -ms-flex: 1 1 200px;
  flex: 1 1 200px;
  -webkit-align-self: auto;
  -ms-flex-item-align: auto;
  align-self: auto;
}
#x-2,
#x-3 {
  height: 50px;
}
Run Code Online (Sandbox Code Playgroud)
<div id="row">
  <div id="wrapper">
	<div id="x-1"></div>
	<div id="x-2"></div>
	<div id="x-3"></div>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

mis*_*Sam 6

截屏

兼容性: IE 11 和所有现代浏览器。Safari 需要-webkit-前缀。

  • 给父级一个高度以及flex-flow: column wrap。这将导致重叠的子项包裹在列中

  • 为第一个 Flex 子级赋予与父级相同的高度,并且不允许其收缩,使用flex: 1 0 <parent height>. 这会将其兄弟姐妹推入另一列。

  • 让其他兄弟姐妹flex: 1在他们之间均匀分配其余的列高度

例子

* {
  padding: 0;
  margin: 0;
}
#wrapper {
  display: flex;
  flex-flow: column wrap;
  height: 200px;
  width: 300px;
  padding: 5px;
  margin: 0 auto;
}
#wrapper > div {
  background-color: red;
}
#x-1 {
  flex: 1 0 100%;
  margin-right: 5px;
}
#x-2 {
  flex: 1;
  margin-bottom: 5px;
}
#x-3 {
  flex: 1;
}
Run Code Online (Sandbox Code Playgroud)
<div id="wrapper">
  <div id="x-1"></div>
  <div id="x-2"></div>
  <div id="x-3"></div>
</div>
Run Code Online (Sandbox Code Playgroud)