首页 > 解决方案 > 使用内联、弹性、浮动或其他方式在窗口调整大小时堆叠 3 个元素

问题描述

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

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

在此处输入图像描述

我尝试了不同的方法,例如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>

谢谢您的帮助!

标签: cssflexboxcss-floatcss-grid

解决方案


我简直不敢相信这在 CSS 中是不可能的。

有可能的。事实上,使用 CSS Grid 相当简单。

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

jsFiddle 演示

.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>


推荐阅读