css - 使一个 div 跨越网格中的两行

标签 css flexbox grid-layout css-grid

我有一个充满 block 的页面,上面堆满了 display: inline-block。我想放大四倍或两倍,所以我使用 float: leftright 来放置其他 block 。

我的问题是如果我有一个五元素行,我怎么能把一个更大的元素放在中间呢? (如 float 自然放在一边)。

这是一个示例片段:

#wrapper{
  width: 516px;
}
.block{
  display: inline-block;
  width: 90px;
  height: 50px;
  margin: 5px;
  background-color: red;
}
.bigger{
  height: 110px;
}
<div id="wrapper">
  <div class="block"></div>
  <div class="block"></div>
  <div class="block"></div>
  <div class="block"></div>
  <div class="block"></div>
  <div class="block"></div>
  <div class="block bigger"></div>
  <div class="block"></div>
  <div class="block"></div>
</div>

这是我想从上面的代码片段中得到的 Expected

最佳答案

Flexbox 解决方案

您的子元素 (.block) 具有固定高度。根据该信息,我们可以推断出容器的高度 (#wrapper)。

通过了解容器的高度,您的布局可以使用 CSS Flexbox 实现使用 flex-direction: columnflex-wrap: wrap

容器上的固定高度用作断点,告诉 flex 元素在哪里换行。

#wrapper {
  display: flex;
  flex-direction: column;
  flex-wrap: wrap;
  height: 120px;
  width: 516px;
}
.block {
  width: 90px;
  flex: 0 0 50px;
  margin: 5px;
  background-color: red;
}
.bigger {
  flex-basis: 110px;
}
<div id="wrapper">
  <div class="block"></div>
  <div class="block"></div>
  <div class="block bigger"></div>
  <div class="block"></div>
  <div class="block"></div>
  <div class="block"></div>
  <div class="block"></div>
  <div class="block"></div>
  <div class="block"></div>
</div>

jsFiddle

这里解释了为什么 flex 元素不能换行,除非容器上有固定的高度/宽度:https://stackoverflow.com/a/43897663/3597276

关于css - 使一个 div 跨越网格中的两行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57331091/

相关文章:

javascript - 使用 javascript 获取所有存在特定 CSS 属性的元素?

html - 幻灯片背景颜色过渡

html - Chrome v75 : Images with max-width stretched inside a flex column div

css - 元素居中网格中的最后一行左对齐

java - 如何修复布局管理

javascript - 同时使用 $ 和 jquery 作为变量

javascript - 通过 css 媒体查询获取其内容在运行时设置的元素的文本

javascript - 如何在父容器中自动拉伸(stretch)并约束 HTML 子元素?

html - 对齐 css-grid 或 flexbox 中的最后一个对象

html - 如何将 calc() 与最小内容一起使用?