在 window 两侧堆叠 3 个元素使用内联、弹性、浮动或其他方式调整 CSS 大小

Stacking 3 elements both sides on window resize with CSS using inline, flex, float or whatever

我知道有很多关于这个的问题,他们中的大多数人说这是不可能的,因为他们只询问了一种方法,这个问题是关于任何方法的,我简直不敢相信这是不可能的CSS.

我有 3 个元素,其中 2 个堆叠在左边,另一个更高,他的宽度填充剩余的 space,当屏幕变小时,它们堆叠,所以右边的元素在中间移动第一个和最后一个元素:

我尝试了不同的方法,如 display:inline-blockfloat:left(和正确的)、display:flex(和一些 flex 属性)甚至表格!我做不到。

这是我最好的 3 次尝试:

.test_inline div{display:inline-block;}
.test_inline .right{flex-grow:1; width: calc(100% - 130px);min-width:100px;}

.test_flex{display:flex;flex-wrap: wrap}
.test_flex .right{flex-grow:1; width: calc(100% - 130px);min-width:100px;}

.test_float .left{float:left;}
.test_float .right{display: flow-root;}

/* */

.main{ margin: 50px; }
div div{ border: 1px solid #333; }
.left{ width: 100px; }
.right{ height: 50px; }
<div class='main test_inline'>
  <div class='left'>1 Top left</div>
  <div class='right'>2 Right</div>
  <div class='left'>3 Bottom Left</div>
</div>
<div class='main test_flex'>
  <div class='left'>1 Top left</div>
  <div class='right'>2 Right</div>
  <div class='left'>3 Bottom Left</div>
</div>
<div class='main test_float'>
  <div class='left'>1 Top left</div>
  <div class='right'>2 Right</div>
  <div class='left'>3 Bottom Left</div>
</div>

感谢您的帮助!

有几种方法可以解决这个问题@stamin。最后,我认为您需要知道要确定 UI 高度的标记的哪一侧。

这绝对定位右边的元素,并为左边的两个元素使用 flexbox。你总是可以用另一种方式来做。

<div class="wrapper">
  <div class="item one">Top Left</div>
  <div class="item two">Right</div>
  <div class="item three">Bottom Left</div>
</div>

CSS

.wrapper {
  border: 1px solid green;
  display: flex;
  flex-wrap: wrap;
  position: relative;
}

.item {
  border: 1px solid red;
  flex: 0 0 100%;
  height: 100px;
}

.one,
.three {
  text-align: left;
}
.two {
text-align: right;
}

@media (min-width: 768px) {
  .wrapper {
    padding-right: 50%;
  }
  .one,
  .three {
    float: left;
  }
  .two {
    align-self: stretch;
    position: absolute;
    right: 0;
    width: 50%;
    height: 100%;
  }
}

这是一个工作示例https://stackblitz.com/edit/css-reorder

I simply can't believe this is not possible with CSS.

有可能。事实上,使用 CSS Grid 非常简单。

不需要浮动、内联块、绝对定位甚至 flex。

jsFiddle demo

.test_grid {
  display: grid;
  grid-template-columns: 150px 1fr;
  grid-template-rows: 50px 50px;
  grid-gap: 5px;
}

.right {
  grid-row: span 2;
}

@media ( max-width: 600px) {
  .test_grid {
    grid-template-columns: 1fr;
    grid-template-rows: 50px 50px 50px 50px;
  }
}

/* */

.main {
  margin: 50px;
}

div div {
  border: 1px solid #333;
}
<div class='main test_grid'>
  <div class='left'>1 Top left</div>
  <div class='right'>2 Right</div>
  <div class='left'>3 Bottom Left</div>
</div>