将弹性项目堆叠在一起

Stacking flex items on top of each other

我正在尝试使用 flexbox 构建这样的布局:

我怎样才能将这些物品堆叠在一起?

我使用 CSS 网格构建上面屏幕截图中的内容,但未能使用 flexbox 执行此操作。

.grid {
  display: grid;
  height: 100%;
  grid-template-columns: 2rem repeat(2, auto) 2rem;
  grid-template-rows: 4rem 4rem auto;
  background-color: #fff;
}

.layer1 {
  background-color: rgb(64, 213, 187);
  grid-column-start: 1;
  grid-column-end: span 3;
  grid-row-start: 1;
  grid-row-end: span 3;
}

注意:此问题询问有关沿 z 轴 堆叠弹性项目的问题。如果您是来这里寻找 y 轴 的 "Stacking flex items on top of each other",请参阅此 post:.


Flexbox 旨在沿列或行对齐元素。它不是为堆叠设计的。

CSS 然而,网格非常适合这类事情。

Grid 的 CSS 替代方法是绝对定位:

(请注意,当 flex item is absolutely positioned 时,它不再接受大多数 flex 属性。)

article {
  display: flex;
  height: 100vh;
  position: relative;
}

section:nth-child(1) {
  flex: 1;
  background-color: turquoise;
}

section:nth-child(2) {
  position: absolute;
  top: 50px;
  left: 50px;
  right: 0;
  bottom: 0;
  background-color: salmon;
}

section:nth-child(3) {
  position: absolute;
  top: 100px;
  left: 250px;
  right: 0;
  bottom: 0;
  background-color: thistle;
}

body {
  margin: 0;
}
<article>
  <section></section>
  <section></section>
  <section></section>
</article>

jsFiddle